配置 WebLogic Server 环境

来源:互联网 发布:ubuntu 系统默认编码 编辑:程序博客网 时间:2024/06/11 07:59

配置 Web 服务器功能

以下部分描述如何配置 WebLogic Server 上承载的 J2EE Web 应用程序,以使其作为承载静态内容的标准 HTTP Web 服务器运行。Web 应用程序还可以承载动态内容,如 JSP 和 Servlet。请参阅开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP

  • 配置 Web 服务器组件概述
  • 配置服务器
  • Web 应用程序
  • 配置虚拟主机
  • WebLogic Server 如何解析 HTTP 请求
  • 设置 HTTP 访问日志
  • 防止 POST 拒绝服务攻击
  • 设置 WebLogic Server 以使用 HTTP 隧道
  • 使用本地 I/O 提供静态文件服务(仅适用于 Windows)

 


配置 Web 服务器组件概述

除了承载基于动态 Java 的分布式应用程序之外,WebLogic Server 还可以作为处理高流量网站的 Web 服务器,提供静态文件(如 HTML 文件和图像文件)以及 Servlet 和 JavaServer Pages (JSP) 服务。WebLogic Server 支持 HTTP 1.1 标准。

 


配置服务器

可指定每个 WebLogic Server 在其上监听 HTTP 请求的端口。尽管可以指定任何有效的端口号,但如果指定端口80,那么在用于通过 HTTP 来访问资源的 HTTP 请求中,就可以省略端口号。例如,如果将端口80 定义为监听端口,则可以使用 http://hostname/myfile.html 的形式而不是http://hostname:portnumber/myfile.html的形式。

在 UNIX 系统上,将进程绑定到小于 1025 的端口的操作必须从具有权限的用户(通常是根)的帐户执行。因此,如果希望 WebLogic Server 在端口 80 上进行监听,则必须作为具有权限的用户启动 WebLogic Server;但是,从安全角度来说,允许长时间运行的进程(如 WebLogic Server)以超过必需权限的权限运行,是不适当的。仅在绑定端口之前,WebLogic 需要根权限。

通过将 weblogic.system.enableSetUID 属性(和 weblogic.system.enableSetGID 属性,如果需要)设置为 true,可以启用一个内部进程,在 WebLogic Server 绑定到端口 80 之后,它将通过该进程切换其 UNIX 用户 ID (UID)。配套属性 weblogic.system.nonPrivUser 和 weblogic.system.nonPrivGroup 会标识 WebLogic Server 在启动后将在其下运行的不具有权限的 UNIX 用户帐户(和组名(可选))。

可切换到 UNIX 帐户“nobody”,该帐户是大多数 UNIX 系统上权限最少的用户。如果需要,则可创建一个专用于运行 WebLogic Server 的 UNIX 用户帐户。请确保 WebLogic Server 所需的文件(如日志文件和 WebLogic 类)可供不具有权限的用户访问。一旦 WebLogic 进程的所有者已切换为不具有权限的用户,WebLogic 便会具有与不具有权限的用户相同的读、写和执行权限。

可为非 SSL 请求和安全(使用 SSL)请求分别定义单独的监听端口。有关配置监听端口的其他信息,请参阅了解网络通道。

配置监听端口

  1. 使用管理控制台可将监听端口设置为端口 80。请参阅配置监听端口
  2. 如果承载 WebLogic Server 的计算机正在运行 Windows,则请转至配置监听端口的步骤 8。
  3. 使用管理控制台新建 Unix 计算机。请参阅配置计算机
  4. 选中“启用 Post-Bind UID”字段。
  5. 在“Post-Bind UID”字段中输入要将 WebLogic Server 作为其运行的用户名。
  6. 选中“启用 Post-Bind GID”字段。
  7. 在“Post-Bind GID”字段中输入要将 WebLogic Server 作为其运行的组名。
  8. 单击“保存”。
  9. 要激活这些更改,请在管理控制台的“更改中心”中,单击“激活更改”。

 


Web 应用程序

HTTP 和 Web 应用程序是根据来自 Sun Microsystems 的 Servlet 2.4 和 JSP 2.0 规范进行部署的,这些规范将 Web 应用程序作为一种用于对基于 Web 的应用程序组件进行分组的标准来描述。这些组件包括 JSP 页、HTTP Servlet 和静态资源(如 HTML 页或图像文件)。此外,Web 应用程序还可访问外部资源,如 EJB 和 JSP 标记库。每个服务器均可承载任意数量的 Web 应用程序。通常,可将 Web 应用程序的名称作为用于从 Web 应用程序请求资源的 URI 的一部分来使用。

有关详细信息,请参阅开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP

Web 应用程序和群集

Web 应用程序可部署到 WebLogic Server 群集。当用户从一个 Web 应用程序请求资源时,该请求会路由到群集中承载该 Web 应用程序的服务器之一。如果应用程序使用会话对象,则必须在群集中的所有节点上复制会话。提供了复制会话的多种方法。

有关详细信息,请参阅使用 WebLogic Server 群集

指定默认 Web 应用程序

您的域中的每个服务器实例和虚拟主机都可以声明一个默认 Web 应用程序。默认 Web 应用程序可对无法解析到其他已部署 Web 应用程序的任何 HTTP 请求做出响应。和所有其他 Web 应用程序形成对比,默认 Web 应用程序不将 Web 应用程序名作为 URI 的一部分使用。定位到某个服务器或虚拟主机的任何 Web 应用程序均可声明为默认 Web 应用程序。(本部分中后面的内容将对 Web 应用程序的定位进行论述。有关虚拟主机的详细信息,请参阅配置虚拟主机)。

随 WebLogic Server 一起提供的示例域已配置了默认 Web 应用程序。此域中的默认 Web 应用程序已命名为DefaultWebApp,位于此域的applications 目录下。

例如,如果您的 Web 应用程序名为shopping,那么您要使用下列 URL 访问该 Web 应用程序中名为cart.jsp 的 JSP:

http://host:port/shopping/cart.jsp

但是,如果将shopping 声明为默认 Web 应用程序,则要使用下列 URL 来访问 cart.jsp

http://host:port/cart.jsp

(其中,host 是运行 WebLogic Server 的计算机的主机名,port 是 WebLogic Server 正在使用其监听请求的端口号。

要为某个服务器或虚拟主机指定默认 Web 应用程序,请将 application.xml 或 weblogic.xml 文件中的上下文根设置为 ""。

如果声明了无法正确部署的默认 Web 应用程序,则会记录一个错误,并且尝试访问失败的默认 Web 应用程序的用户将收到 HTTP404 错误消息。

 


配置虚拟主机

通过虚拟主机,可以定义服务器或群集要响应的主机名。使用虚拟主机时,要使用 DNS 来指定一个或多个映射到 WebLogic Server 实例或群集的 IP 地址的主机名,并指定该虚拟主机所服务的 Web 应用程序。在群集中使用时,负载平衡将允许最高效地使用您的硬件,即使其中一个 DNS 主机名处理的请求多于其他 DNS 主机名,也是如此。

例如,您可以指定,名为books 的 Web 应用程序响应名为 www.books.com 的虚拟主机的请求,并且这些请求会定位到 WebLogic Server A、B 和 C,而名为cars 的 Web 应用程序响应名为www.autos.com的虚拟主机的请求,并且这些请求会定位到 WebLogic Server D 和 E。您可以配置虚拟主机、WebLogic Server 实例、群集和 Web 应用程序的多种组合,具体取决于您的应用程序和 Web 服务器的需求。

对于您定义的每个虚拟主机,您还可以单独为其定义 HTTP 参数和 HTTP 访问日志。为虚拟主机设置的 HTTP 参数和访问日志会替换那些为服务器设置的 HTTP 参数和访问日志。您可以指定任意数量的虚拟主机。

可通过将虚拟主机定位到服务器或服务器的群集来激活虚拟主机。定位到某个群集的虚拟主机将应用到该群集中的所有服务器。

虚拟主机和默认 Web 应用程序

还可以为每个虚拟主机指定一个默认 Web 应用程序。虚拟主机的默认 Web 应用程序会对无法解析到部署在与该虚拟主机相同的服务器或群集上的其他 Web 应用程序的所有请求做出响应。

与其他 Web 应用程序不同,默认 Web 应用程序不将 Web 应用程序名(也称为上下文路径)作为用于访问默认 Web 应用程序中资源的 URI 的一部分来使用。

例如,如果定义了虚拟主机名www.mystore.com,并将其定位到在其上部署了名为shopping 的 Web 应用程序的服务器,则要使用以下 URI 从shopping Web 应用程序访问名为cart.jsp 的 JSP:

http://www.mystore.com/shopping/cart.jsp

但是,如果将shopping 声明为虚拟主机 www.mystore.com 的默认 Web 应用程序,则要使用以下 URI 来访问cart.jsp

http://www.mystore.com/cart.jsp

有关详细信息,请参阅WebLogic Server 如何解析 HTTP 请求

将多个虚拟主机与不同的默认 Web 应用程序一起使用时,不能使用单一登录,因为每个 Web 应用程序都会覆盖前一个 Web 应用程序设置的 JSESSIONID cookie。即使每个默认 Web 应用程序中的 CookieName、CookiePath 和 CookieDomain 都完全相同,也会出现上述情况。

设置虚拟主机

  1. 使用管理控制台可定义虚拟主机。请参阅虚拟主机
  2. 将用于为虚拟主机命名的指令行添加到服务器上的etc/hosts 文件中,以确保可解析该虚拟主机名。

 


WebLogic Server 如何解析 HTTP 请求

当 WebLogic Server 收到一个 HTTP 请求时,它会通过解析 URL 的各个部分来解析该请求,并使用该信息确定哪个 Web 应用程序和/或服务器应处理该请求。表 5-1 说明了 Web 应用程序、虚拟主机、Servlet、JSP 和静态文件的各种请求组合和最终生成的响应。

注意:如果将 Web 应用程序作为企业应用程序的一部分打包,则可为用于解析向该 Web 应用程序发出的请求的 Web 应用程序提供一个备用名称。有关详细信息,请参阅开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP

表 5-1 提供了一些示例 URL 和 WebLogic Server 所服务的文件。“是否选中索引目录”列是指“索引目录”特性,该特性可控制是否提供目录列表服务(如果未专门请求任何文件)。

表 5-1有关 WebLogic Server 如何解析 URL 的示例
URL
是否选中索引目录
作为响应提供此文件
http://host:port/apples
apples Web 应用程序中定义的欢迎文件*。
http://host:port/apples
apples Web 应用程序顶层目录的目录列表。
http://host:port/oranges/naval
无关紧要
oranges Web 应用程序中 /naval<url-pattern> 进行映射的 Servlet。
对于 Servlet 映射,还有其他需考虑的事项。有关详细信息,请参阅配置 Servlet
http://host:port/naval
无关紧要
oranges Web 应用程序中 /naval<url-pattern>进行映射的Servlet(oranges 已定义为默认 Web 应用程序)。
有关详细信息,请参阅配置 Servlet
http://host:port/apples/pie.jsp
无关紧要
pie.jsp,来自apples Web 应用程序的顶层目录。
http://host:port
默认 Web 应用程序顶层目录的目录列表。
http://host:port
来自默认 Web 应用程序的欢迎文件*。
http://host:port/apples/myfile.html
无关紧要
myfile.html,来自apples Web 应用程序的顶层目录。
http://host:port/myfile.html
无关紧要
myfile.html,来自默认 Web 应用程序的顶层目录。
http://host:port/apples/images/red.gif
无关紧要
red.gif,来自apples Web 应用程序顶层目录的图像子目录。
http://host:port/myFile.html

其中,myfile.html 不存在于 apples Web 应用程序中,并且,默认 Servlet 尚未被定义。
无关紧要
错误 404
http://www.fruit.com/
来自具有主机名www.fruit.com 的虚拟主机的默认 Web 应用程序的欢迎文件。
http://www.fruit.com/
具有主机名www.fruit.com 的虚拟主机的 default Web 应用程序顶层目录的目录列表。
http://www.fruit.com/oranges/myfile.html
无关紧要
myfile.html,来自定位到具有主机名www.fruit.com 的虚拟主机的oranges Web 应用程序。

 


设置 HTTP 访问日志

WebLogic Server 能够以常用日志格式或扩展日志格式将所有 HTTP 事务的日志保存在一个文本文件中。常用日志格式为默认格式。通过扩展日志格式可以自定义要记录的信息。您可以为每个服务器实例或您定义的每个虚拟主机设置用于定义 HTTP 访问日志行为的特性。

要为服务器或虚拟主机设置 HTTP 日志记录,请参阅“管理控制台联机帮助”中的以下主题:

  • 启用和配置 HTTP 访问日志
  • 为虚拟主机配置 HTTP 日志文件设置

日志滚动

可根据文件的大小,或在指定的时间量已过去之后滚动日志文件。在符合上述任一标准的情况下,会关闭当前访问日志文件并启动一个新的访问日志文件。如果不配置日志滚动,则 HTTP 访问日志文件会无限增长。可将访问日志文件的名称配置为包含时间和日期戳(用于表示滚动日志的时间)。如果不配置时间戳,则每个滚动文件的名称都会包含数字部分,该数字部分会随每次滚动而增加。对于已定义的每个虚拟主机,都会针对其保存单独的 HTTP 访问日志。

常用日志格式

用于所记录的 HTTP 信息的默认格式为常用日志格式。此标准格式遵循以下模式:

host RFC931 auth_user [day/month/year:hour:minute:second    UTC_offset] "request" status bytes

其中:

host

远程客户端的 DNS 名称或 IP 号

RFC931

远程客户端的 IDENTD 返回的任何信息;WebLogic Server 不支持用户标识

auth_user

如果远程客户端用户发送了一个用户 ID 进行身份验证,则为用户名;否则为“-”

day/month/year:hour:minute:second UTC_offset

日、阳历月份、年和时刻(24 小时形式),以及当地时间和 GMT 之间的时差(括在方括号内)

"request"

远程客户端提交的 HTTP 请求的第一行(括在双引号中)

status

服务器返回的 HTTP 状态代码(如果存在);如果不存在则为“-”

bytes

如果已知,则为 HTTP 头中内容长度的字节数(不包括 HTTP 头);如果未知,则为“-”

使用扩展日志格式设置 HTTP 访问日志

WebLogic Server 还支持扩展日志文件格式(版本 1.0,是由draft specification from W3C 定义的新兴标准)。当前的权威性参考位于W3C Technical Reports and Publications page

使用扩展日志格式,您可以指定所记录的关于每次 HTTP 通信的信息的类型和顺序。要启用此格式,请在管理控制台中,将“HTTP”选项卡上的“格式”特性设置为Extended。(请参阅创建自定义字段标识符。)

可使用指令(包含在实际日志文件自身中)指定应记录在日志文件中的信息。指令开始于新行,并以 # 号开头。如果日志文件不存在,则将新建一个带有默认指令的日志文件。但是,如果在服务器启动时,日志文件已存在,则该文件必须在其开头位置包含合法指令。

创建 Fields 指令

日志文件的第一行必须包含用于声明日志文件格式的版本号的指令。还必须在文件的开头附近包含Fields 指令:

  #Version: 1.0  #Fields: xxxx xxxx xxxx ...

其中,每个xxxx 描述了要记录的数据字段。字段类型可指定为简单标识符,或采用前缀标识符格式(在 W3C 规范中定义)。示例如下:

  #Fields: date time cs-method cs-uri

此标识符会指示服务器记录事务的日期和时间、客户端使用的请求方法和每个 HTTP 访问请求的 URI。每个字段都以空格进行分隔,并且每条记录都会写入一个新行(追加到日志文件)。

注意:在日志文件中,#Fields 指令后面必须为一个新行,以便第一条日志文件消息不会追加到同一行。

支持的字段标识符

以下标识符是受支持的,不需要前缀。

date

完成事务的日期,字段类型为 <date>(在 W3C 规范中定义)。

time

完成事务的时间,字段类型为 <time>(在 W3C 规范中定义)。

time-taken

完成事务所需的时间,以秒为单位,字段类型为 <fixed>(在 W3C 规范中定义)。

bytes

已传输的字节数,字段类型为 <integer>。

请注意,WebLogic Server 不支持 W3C 规范中定义的cached 字段。

以下标识符需要前缀,不能单独使用。对于受支持的前缀组合,将单独进行介绍。

IP 地址相关字段:
这些字段将提供正在进行请求的客户端或正在进行响应的服务器的 IP 地址或端口。这些字段的类型为 <address>(在 W3C 规范中定义)。受支持的前缀如下:

c-ip

客户端的 IP 地址。

s-ip

服务器的 IP 地址。
DNS 相关字段
这些字段提供客户端或服务器的域名,字段类型为 <name>(在 W3C 规范中定义)。受支持的前缀如下:

c-dns

正在进行请求的客户端的域名。

s-dns

被请求的服务器的域名。

sc-status

响应的状态代码,如表示“找不到文件”状态的 (404)。此字段的类型为 <integer>(在 W3C 规范中定义)。

sc-comment

随状态代码返回的注释,如“找不到文件”。此字段的类型为 <text>。

cs-method

请求方法,例如 GET 或 POST。此字段的类型为 <name>(在 W3C 规范中定义)。

cs-uri

完整的被请求 URI。此字段的类型为 <uri>(在 W3C 规范中定义)。

cs-uri-stem

仅为 URI 的资源部分(忽略查询)。此字段的类型为 <uri>(在 W3C 规范中定义)。

cs-uri-query

仅为 URI 的查询部分。此字段的类型为 <uri>(在 W3C 规范中定义)。

创建自定义字段标识符

还可以创建将包含在使用扩展日志格式的 HTTP 访问日志文件中的用户定义的字段。要创建自定义字段,请使用Fields 指令标识 ELF 日志文件中的字段,然后创建一个可生成所需输出的匹配 Java 类。可为每个字段创建单独的 Java 类,或创建可输出多个字段的 Java 类。有关这样一个类的 Java 源代码示例,请参阅用于创建自定义 ELF 字段的 Java 类

要创建自定义字段,请执行下列操作:

  1. 使用以下形式,将字段名包含在Fields 指令中:
    x-myCustomField.

    其中,myCustomField 是完全限定的类名。

    有关Fields 指令的详细信息,请参阅创建 Fields 指令

  2. 创建一个与使用 Fields 指令定义的自定义字段具有相同完全限定类名的 Java 类(例如 myCustomField)。此类会定义要记录在自定义字段中的信息。该 Java 类必须实现以下接口:
    weblogic.servlet.logging.CustomELFLogger

    在您的 Java 类中,必须实现logField() 方法,该方法将HttpAccountingInfo 对象和FormatStringBuffer 对象作为其参数:

    • 使用 HttpAccountingInfo 对象可访问那些可在自定义字段中输出的 HTTP 请求和响应数据。已提供了 Getter 方法来访问此信息。有关这些 get 方法的完整列表,请参阅HttpAccountingInfo 对象的 Get 方法
    • 使用 FormatStringBuffer 类可创建自定义字段的内容。已提供了相应的方法来创建合适的输出。有关这些方法的详细信息,请参阅FormatStringBuffer 的 Javadocs
  3. 编译该 Java 类并将该类添加到用于启动 WebLogic Server 的CLASSPATH 语句。您可能需要在用于启动 WebLogic Server 的脚本中修改CLASSPATH 语句。注意:请不要将此类放入展开格式或 jar 格式的 Web 应用程序或企业应用程序内部。
  4. 将 WebLogic Server 配置为使用扩展日志格式。有关详细信息,请参阅使用扩展日志格式设置 HTTP 访问日志
注意:编写用于定义自定义字段的 Java 类时,请不要执行可能会降低系统运行速度的任何代码(例如,访问 DBMS 或执行大量的 I/O 或网络调用)。请记住,HTTP 访问日志文件条目是针对每一个 HTTP 请求创建的。注意:如果要输出多个字段,请使用制表符分隔这些字段。有关分隔字段和其他 ELF 格式问题的详细信息,请参阅 Extended Log Format
HttpAccountingInfo 对象的 Get 方法

以下方法可返回有关 HTTP 请求的各种数据。这些方法类似于javax.servlet.ServletRequestjavax.servlet.http.Http.ServletRequestjavax.servlet.http.HttpServletResponse 的各种方法。

有关这些方法的详细信息,请参阅下表中列出的 Java 接口中的相应方法,或参阅该表中包含的特定信息。

表 5-2 HttpAccountingInfo 的 Getter 方法
HttpAccountingInfo 方法
方法信息
Object getAttribute(String name);
javax.servlet.ServletRequest
Enumeration getAttributeNames();
javax.servlet.ServletRequest
String getCharacterEncoding();
javax.servlet.ServletRequest
int getResponseContentLength();
javax.servlet.ServletResponse.
setContentLength()
此方法会获取响应的内容长度(使用setContentLength()方法设置)。
String getContentType();
javax.servlet.ServletRequest
Locale getLocale();
javax.servlet.ServletRequest
Enumeration getLocales();
javax.servlet.ServletRequest
String getParameter(String name);
javax.servlet.ServletRequest
Enumeration getParameterNames();
javax.servlet.ServletRequest
String[] getParameterValues(String name);
javax.servlet.ServletRequest
String getProtocol();
javax.servlet.ServletRequest
String getRemoteAddr();
javax.servlet.ServletRequest
String getRemoteHost();
javax.servlet.ServletRequest
String getScheme();
javax.servlet.ServletRequest
String getServerName();
javax.servlet.ServletRequest
int getServerPort();
javax.servlet.ServletRequest
boolean isSecure();
javax.servlet.ServletRequest
String getAuthType();
javax.servlet.http.HttpServletRequest
String getContextPath();
javax.servlet.http.HttpServletRequest
Cookie[] getCookies();
javax.servlet.http.HttpServletRequest
long getDateHeader(String name);
javax.servlet.http.HttpServletRequest
String getHeader(String name);
javax.servlet.http.HttpServletRequest
Enumeration getHeaderNames();
javax.servlet.http.HttpServletRequest
Enumeration getHeaders(String name);
javax.servlet.http.HttpServletRequest
int getIntHeader(String name);
javax.servlet.http.HttpServletRequest
String getMethod();
javax.servlet.http.HttpServletRequest
String getPathInfo();
javax.servlet.http.HttpServletRequest
String getPathTranslated();
javax.servlet.http.HttpServletRequest
String getQueryString();
javax.servlet.http.HttpServletRequest
String getRemoteUser();
javax.servlet.http.HttpServletRequest
String getRequestURI();
javax.servlet.http.HttpServletRequest
String getRequestedSessionId();
javax.servlet.http.HttpServletRequest
String getServletPath();
javax.servlet.http.HttpServletRequest
Principal getUserPrincipal();
javax.servlet.http.HttpServletRequest
boolean isRequestedSessionIdFromCookie();
javax.servlet.http.HttpServletRequest
boolean isRequestedSessionIdFromURL();
javax.servlet.http.HttpServletRequest
boolean isRequestedSessionIdFromUrl();
javax.servlet.http.HttpServletRequest
boolean isRequestedSessionIdValid();
javax.servlet.http.HttpServletRequest
byte[] getURIAsBytes();
以字节数组的形式返回 HTTP 请求的 URI,例如,如果 GET /index.html HTTP/1.0 是 HTTP 请求的第一行,则将以字节数组的形式返回 /index.html。
long getInvokeTime();
返回 Servlet 的服务方法将数据写回客户端所需的时间。
int getResponseStatusCode();
javax.servlet.http.HttpServletResponse
String
getResponseHeader(String name);
javax.servlet.http.HttpServletResponse

清单 5-1 用于创建自定义 ELF 字段的 Java 类
import weblogic.servlet.logging.CustomELFLogger;import weblogic.servlet.logging.FormatStringBuffer;import weblogic.servlet.logging.HttpAccountingInfo;
/* 此示例将 User-Agent 字段输出到名为 MyCustomField 的自定义字段*/
public class MyCustomField implements CustomELFLogger{
public void logField(HttpAccountingInfo metrics,  FormatStringBuffer buff) {  buff.appendValueOrDash(metrics.getHeader("User-Agent"));  }}

 


防止 POST 拒绝服务攻击

拒绝服务攻击是一种使用假冒请求使服务器过载的恶意尝试。一种常见类型的攻击就是在 HTTPPOST 方法中发送大量数据。可在 WebLogic Server 中设置三个特性,以防此类型的攻击。这些特性可在控制台中的“服务器”或“虚拟主机”下设置。如果为某个虚拟主机定义了这些特性,则为该主机设置的值会替换在“服务器”下设置的那些对应的值。

PostTimeoutSecs

WebLogic Server 在接收 HTTP POST 中的数据块之间等待的时间量。
PostTimeoutSecs 的默认值为 30。

MaxPostTimeSecs

WebLogic Server 接收 post 数据所需的最长时间。如果触发了此限制,则会引发一个PostTimeoutException,并且以下消息将发送到服务器日志:
Post time exceeded MaxPostTimeSecs.MaxPostTimeSecs 的默认值为 30。

MaxPostSize

在来自单个请求的 POST 中接收的最大数据字节数。如果触发了此限制,则会引发一个MaxPostSizeExceeded 异常,并且以下消息将发送到服务器日志:
POST size exceeded the parameter MaxPostSize.HTTP 错误代码 413 (Request Entity Too Large) 会发送回客户端。如果客户端处于监听模式,则它会收到这些消息。如果服务器不处于监听状态,则连接将会中断。MaxPostSize 的默认值为 -1。

 


设置 WebLogic Server 以使用 HTTP 隧道

HTTP 隧道提供了一种方法,可用于在只能使用 HTTP 协议的情况下模拟 WebLogic Server 和 Java 客户端之间的有状态套接口连接。它通常用于以隧道方式通过安全防火墙中的 HTTP 端口。HTTP 是一种无状态协议,但 WebLogic Server 提供了隧道功能,可使连接看上去似乎为常规的 T3Connection。但是,可以预料到,与正常的套接口连接相比,它会有某些性能损失。

配置 HTTP 隧道连接

使用 HTTP 协议时,客户端可能只是做出一个请求,然后接收来自一台服务器的一个答复。服务器可能不会自动与该客户端进行通信,并且该协议是无状态的,这意味着不可能建立连续的双向连接。

WebLogic HTTP 隧道通过 HTTP 协议来模拟 T3Connection,从而越过了这些限制。有两个可在管理控制台中配置的特性,可用于调整隧道连接以获得更好的性能。建议将其保留为其默认设置(除非遇到了连接问题)。服务器会使用这些属性来确定客户端连接是否有效或客户端是否仍处于活动状态。

Enable Tunneling

启用或禁用 HTTP 隧道。默认情况下,HTTP 隧道处于禁用状态。
请注意,要使用 HTTP 隧道,服务器必须同时支持 HTTP 协议和 T3 协议。

Tunneling Client Ping

设置了 HTTP 隧道连接之后,客户端会自动将一个请求发送到服务器,以便该服务器可自动向客户端发送一个响应。客户端还可以在请求中包含指令,但无论客户端应用程序是否需要与服务器进行通信,此行为都可以发生。如果服务器未在此特性中设置的秒数内对客户端做出响应(作为应用程序代码的一部分),那么它也会这样做。客户端会接受响应并立即自动发送另一个请求。
默认值为 45 秒,有效范围为 20 秒到 900 秒。

Tunneling Client Timeout

如果自客户端上次将一个请求发送到服务器(以响应一个答复)以来,已经过了在此特性中设置的秒数,则服务器会将客户端视为不可用,并会中断该 HTTP 隧道连接。服务器会以此特性指定的间隔检查已经过的时间,如果未超过设置的秒数,则它会响应客户端的请求。
默认值为 40 秒,有效范围为 10 秒到 900 秒。

从客户端连接到 WebLogic Server

当您的客户端请求与 WebLogic Server 进行连接时,要使用 HTTP 隧道,您需要执行的全部操作就是在 URL 中指定 HTTP 协议。例如:

  Hashtable env = new Hashtable();  env.put(Context.PROVIDER_URL, "http://wlhost:80");  Context ctx = new InitialContext(env);

在客户端,一个特定标记会附加到http 协议,以便 WebLogic Server 知道这是一个隧道连接而不是一个常规的 HTTP 请求。您的应用程序代码不需要执行额外的工作来实现上述功能。

客户端必须在 URL 中指定端口,即使端口为 80,也是如此。虽然最常见的选择是端口 80 (因为通常会允许发送到端口 80 的请求通过防火墙),但是您也可设置您的 WebLogic Server 实例,以便在任意端口监听 HTTP 请求。

可以在管理控制台中“服务器”节点下的“网络”选项卡下,指定用于 WebLogic Server 的监听端口。

 


使用本地 I/O 提供静态文件服务(仅适用于 Windows)

在 Windows NT/2000/XP 上运行 WebLogic Server 时,可指定 WebLogic Server 使用本地操作系统调用 TransmitFile(而不是使用 Java 方法)来提供静态文件(如 HTML 文件、文本文件和图像文件)服务。当对较大的静态文件提供服务时,使用本地 I/O 可提高性能。

要使用本地 I/O,请将两个参数添加到 Web 应用程序(该 Web 应用程序包含要使用本地 I/O 来对其提供服务的文件)的 web.xml 部署描述符。要启用本地 I/O 文件服务,应将第一个参数 weblogic.http.nativeIOEnabled 设置为 TRUE。第二个参数 weblogic.http.minimumNativeFileSize 会设置用于使用本地 I/O 的最小文件大小。如果所服务的文件的大小大于该值,则会使用本地 I/O。如果不指定此参数,则将使用为 4K 的值。

通常,在对较大的文件提供服务时,本地 I/O 会提供更大的性能增益;但是,当运行 WebLogic Server 的计算机上的负载增加时,这些增益会减少。要找到合适的 weblogic.http.minimumNativeFileSize 值,您可能需要进行试验。

以下示例显示了应添加到 web.xml 部署描述符中的完整条目。这些条目必须放在 web.xml 文件中的 <distributable> 元素之后、<servlet> 元素之前。

<context-param>  <param-name>weblogic.http.nativeIOEnabled</param-name>  <param-value>TRUE</param-value></context-param><context-param>  <param-name>weblogic.http.minimumNativeFileSize</param-name>  <param-value>500</param-value></context-param>

weblogic.http.nativeIOEnabled 也可设置为 FileServlet 中的上下文参数。

0 0
原创粉丝点击