[摘要]Weblogic服务器如何解释HTTP请求当Weblogic服务器收到HTTP请求,它是这样解释这个请求的:通过分解URL的各个部分,然后根据这些信息来决定是哪一个WEB应用程序或服务器应处理这个请求。下面示例演示了对WEB应用程序,虚拟主机,servlets,JSPs和静态文件的请求的不同组合以...
Weblogic服务器如何解释HTTP请求
当Weblogic服务器收到HTTP请求,它是这样解释这个请求的:通过分解URL的各个部分,然后根据这些信息来决定是哪一个WEB应用程序或服务器应处理这个请求。下面示例演示了对WEB应用程序,虚拟主机,servlets,JSPs和静态文件的请求的不同组合以及响应结果。
注意:如果将WEB应用程序打包成企业应用程序的一部分,可为WEB应用程序提供一个预定的名字,用这个名字解释对这个WEB应用程序的请求。更多信息,参考部署WEB应用程序成为企业应用程序的一部分。
下表提供一些URLs例子和Weblogic服务器提供服务的文件。Index Directories Checked列是指索引目录属性,该属性在没有特定的文件请求时控制是否显示目录列表。用管理控制台在Web Applications节点的Configuration/Files标签下来设定索引目录。
Table 8-2 WebLogic 服务器解释URLs示例URLIndex Directories Checked?响应的文件
http://host:port/applesno定义在WEB应用程序apples中的初始页面*
http://host:port/applesyesWEB应用程序apples顶层目录的文件列表
http://host:port/oranges/naval无关在WEB应用程序apples里映射为(<url-pattern> )/naval的servlet还有一些关于servlet 映射的需考虑的事项,更多信息,参考配置Servlets
http://host:port/naval无关当WEB应用程序apples定义成默认的WEB应用程序时,在WEB应用程序apples里映射为(<url-pattern> )/naval的servlet更多信息参考配置Servlets
http://host:port/apples/pie.jsp无关WEB应用程序apples顶层目录里的pie.jsp
http://host:portyes默认WEB应用程序的顶层目录文件列表
http://host:portno默认WEB应用程序的初始文件
http://host:port/apples/myfile.html无关WEB应用程序apples顶层目录里的myfile.html
http://host:port/myfile.html无关默认WEB应用程序apples顶层目录里的myfile.html
http://host:port/apples/images/red.gif无关WEB应用程序apples顶层目录下的images子目录里的red.gif,
http://host:port/myFile.htmlmyfile.html在WEB应用程序apples中不存在,并且没有定义默认servlet无关Error 404更多信息参考定制HTTP错误响应
http://www.fruit.com/no虚拟主机名是www.fruit.com的默认WEB应用程序的初始文件
http://www.fruit.com/yes虚拟主机名是www.fruit.com的默认WEB应用程序的顶层目录文件列表
http://www.fruit.com/oranges/myfile.html无关r虚拟主机名是www.fruit.com上WEB应用程序oranges的myfile.html
*更多信息参考配置初始页面。
定制HTTP错误响应
可以配置Weblogic服务器在特殊HTTP错误或Java异常的发生时使用自己定制的WEB页面或其它HTTP资源来响应,而不是Weblogic服务器标准错误响应页面。
在WEB应用程序部署描述符web.xml中的<error-page>元素中定义定制的错误页面。有关错误页面的更多信息,参考error-page元素。
在Weblogic服务器中使用CGI
Weblogic服务器提供支持公共网关接口(CGI)脚本的功能。在新项目中,建议使用HTTP servlets或JSPs。
Weblogic服务器支持所有通过一个名为CGIServlet的内部Weblogic servlet的CGI脚本。要使用CGI,在WEB应用程序部署描述符中注册CGIServlet(参考注册CGIServlet时要包含在WEB应用程序部署描述符的条目示例)。更多信息参考配置Servlets。
配置Weblogic服务器使用CGI
要在Weblogic服务器中配置CGI:
1.通过使用<servlet> 和 <servlet-mapping>元素在WEB应用程序中声明CGIServlet。
CGIServlet的类名是weblogic.servlet.CGIServlet。
2.定义以下<init-param>元素来注册下列初始化参数:
cgiDir
包含CGI脚本的目录路径。可定义多个目录,用“ ;”(Windows)或”:”(Unix)分隔。如未定义cgiDir,目录默认为WEB应用程序根目录下名为cgi-bin的目录。
extension mapping
将文件扩展名映射到解释器或执行脚本的运行器(executable)。如脚本不要求运行器,将忽略这个初始化参数。扩展名映射的<param-name>必须以星号开头,后跟小数点,然后是文件扩展名,如*.pl。
The <param-value> contains the path to the interpreter or executable that runs the script You can create multiple mappings by creating a separate <init-param> element for each mapping.
<param-value>包含解释器或可执行脚本的运行器的路径,通过为每个映射建立单独的<init-param>元素,可以建立多个映射。
Listing 8-3注册CGIServlet时包含在WEB应用程序部署符里的条目示例
<servlet>
<servlet-name>CGIServlet</servlet-name>
<servlet-class>weblogic.servlet.CGIServlet</servlet-class>
<init-param>
<param-name>cgiDir</param-name>
<param-value>
/bea/wlserver6.0/config/mydomain/applications/myWebApp/cgi-bin
</param-value>
</init-param>
<init-param>
<param-name>*.pl</param-name>
<param-value>/bin/perl.exe</param-value>
</init-param>
</servlet>
...
<servlet-mapping>
<servlet-name>CGIServlet</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
请求CGI脚本
用来请求perl脚本的URL必须象如下模式:
http://host:port/myWebApp/cgi-bin/myscript.pl
其中
host:port
Weblogic服务器的主机名和端口名。
cgi-bin
映射到CGIServlet的url-pattern名。
myWebApp
WEB应用程序名。
myscript.pl
Perl脚本名,位于cgiDir初始化参数指定的目录中。
用ClasspathServlet提供CLASSPATH里的资源服务
如需提供系统CLASSPATH或WEB应用程序的WEB-INF/classes目录中的类或其它资源服务,就要使用一个名为ClasspathServlet的特殊servlet。ClasspathServlet对于使用applets或RMI客户和请求访问服务器端类的应用程序特别有用。隐含地,ClasspathServlet已被注册,可用于任何应用程序。
使用ClasspathServlet的两种方法:
·要提供系统CLASSPATH的资源服务,用如下URL调用资源:
http://server:port/classes/my/resource/myClass.class
·要提供WEB应用程序的WEB-INF/classes中的资源服务,用如下URL调用资源:
http://server:port/myWebApp/classes/my/resource/myClass.class
在这种情况下,资源位于相对于WEB应用程序根目录中的如下目录:
WEB-INF/classes/my/resource/myClass.class
警告:由于ClasspathServlet提供位于系统CLASSPATH中的任何资源服务,不要把不应公开的资源放在系统CLASSPATH中。
将请求代理给另一个HTTP服务器
当将Weblogic服务器作为主WEB服务器时,也可能要配置Weblogic服务器传递,或代理某个请求给二级HTTP服务器,如Netscape Enterprise Server,Apache,Microsoft Internet Information Server,或Weblogic服务器的另一个实例。任何需要代理的请求被重定向到一个特定的URL。甚至能代理到不同机器上的另一个WEB服务器。代理请求基于进入的请求URL。
HttpProxyServlet(发行版的一部分)接受HTTP请求,并把它重定向到代理URL,后台通过Weblogic服务器将响应送回客户端的浏览器。要使用代理,必须在WEB应用程序中配置它,并部署重定向请求的Weblogic服务器上的WEB应用程序。
建立到二级HTTP服务器的代理
要建立到二级HTTP服务器的代理:
1.在WEB应用程序部署描述符中注册代理servlet(参考使用ProxyServlet的web.xml示例)。这个WEB应用程序必须是响应请求的服务器的默认应用程序。代理servlet的类名为weblogic.t3.srvr.HttpProxyServlet。更多信息参考部署和配置WEB应用程序。
2.定义ProxyServlet的初始化参数,<param-name>是redirectURL,<param-value>包含被代理请求定向至的服务器的URL。
3.映射ProxyServlet到一个<url-pattern>。特别地,映射希望代理的文件扩展名,如*.jsp,或*.html。使用WEB应用程序部署描述符web.xml中的<servlet-mapping>元素。
如将<url-pattern>设置为“/”,不能由Weblogic服务器解释的任何请求将被代理到远程服务器。但是,也必须特别映射以下扩展名*.jsp,*.htm,*.html,如要代理以这些扩展名结尾的文件。
4.在重定向请求的Weblogic服务器上部署WEB应用程序。
代理servlet的部署描述符示例
以下是使用代理Servlet的WEB应用程序部署描述符的示例:
Listing 8-4使用ProxyServlet的web.xml示例
<!-- DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 1.2//EN"
"file:///weblogic/dev/myserver/servlet2.2/WEB-INF/web-jar.dtd"
-->
<web-app>
<servlet>
<servlet-name>ProxyServlet</servlet-name>
<servlet-class>weblogic.t3.srvr.HttpProxyServlet</servlet-class>
<init-param>
<param-name>redirectURL</param-name>
<param-value>
http://tehama:7001
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
代理请求给Weblogic集群
HttpClusterServlet(Weblogic服务器发行版的一部分)将请求从Weblogic服务器代理到Weblogic集群中的其它Weblogic服务器。HttpClusterServlet提供负载平衡和被代理的HTTP请求的failover.有关servlets和Weblogic集群的另外信息,参考理解HTTP会话状态复制。
设置HttpClusterServlet
要设置HttpClusterServlet:
1.配置Weblogic服务器实例,它将请求代理给一个Weblogic服务器集群。使用Weblogic服务器管理控制台:
a.在域中建立一新WEB应用程序。
b.在域中建立一新服务器,或用默认的。
c.将步骤a建立的WEB应用程序指定为刚建立的服务器的默认WEB应用程序。
2.在步骤1建立的WEB应用程序的部署描述符中注册HttpClusterServlet(参考HttpClusterServlet部署描述符示例)。WEB应用程序必须是响应请求的服务器的默认WEB应用程序。更多信息参考指定默认WEB应用程序。
HttpClusterServlet的类名是eblogic.servlet.internal.HttpClusterServlet。一个HttpClusterServlet部署描述符示例如下。
3.为HttpClusterServlet定义适当的初始化参数。用WEB应用程序部署描述符web.xml中的<init-param>元素定义初始化参数。必须定义defaultServers参数,适当的、附加的参数在表8-3HttpClusterServlet Parameters中描述。
4.映射代理servlet到一<url-pattern>。特别地,映射想要代理的文件扩展名,如 *.jsp或*.html。
如设置url-pattern为“/”,Weblogic服务器不能解释的任何请求将被代理到远程服务器。但是,也必须特别映射以下扩展名 *.jsp ,*.htm 和*.html,如想代理以这些扩展名结尾的文件的话。
另一个设置url-pattern的方法就是映射如/foo一样的url-pattern,然后设置foo的pathTrim参数,它从代理URL移除foo。
Table 8-3 HttpClusterServlet Parameters
<param-name><param-value>默认值
defaultServers(必须的)以下形式的代理请求的目标服务器的主机名和端口号列表:host1:HTTP_Port:HTTPS_Port host2:HTTP_Port:HTTPS_Port(其中host1 和 host2是集群里的服务器的主机名,HTTP_Port是监听HTTP请求的端口,HTTP_Ports是监听HTTP SSL请求的端口)用字符 分隔每个主机。如将secureProxy参数设为ON(参考secureProxy条目),HTTPS端口在运行HttpClusterServlet的Weblogic服务器和集群里的Weblogic服务器之间使用SSL。即使将secureProxy设为OFF,也必须定义一个HTTPS端口。None
secureProxyON/OFF. 如为ON,HttpClusterServlet和Weblogic服务器集群的成员间使用SSLOFF
DebugConfigInfoON/OFF. 如为ON,an query the HttpClusterServlet for debugging information by adding a request parameter of ?_WebLogicBridgeConfig to any request. 由于安全方面的原因,在产品级环境推荐将此参数设为OFF。OFF
connectionTimeout一个套接字在读取数据块之间等待的时间量,以秒为单位。如超时,就会抛出java.io.InterruptedIOException异常。0 = 无限时间
numOfRetriesHttpClusterServlet试图重新连接失败连接的次数5
pathTrimString to be trimmed from the beginning of the original URI. 原始URI开头要删去的字符串None
trimExtThe file extension to be trimmed from the end of the URI.URI结尾要删去的文件扩展名None
pathPrependString to be prepended to the beginning of the original URL, after pathTrim has been trimmed, and before the request is forwarded to a WebLogic Server cluster member.在请求被传递到一个Weblogic服务器集群成员之前,pathTrim已被删去之后,原始URL开头在添加的字符串。None
HttpClusterServlet部署描述符示例
以下是使用HttpClusterServlet的WEB应用程序部署描述符web.xml示例:
Listing 8-5使用HttpClusterServlet的web.xml 示例
<!-- DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 1.2//EN"
"file:///weblogic/dev/myserver/servlet2.2/WEB-INF/web-jar.dtd"
-->
<web-app>
<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class>
weblogic.servlet.internal.HttpClusterServlet
</servlet-class>
<init-param>
<param-name>defaultServers</param-name>
<param-value>
myserver1:7736:7737 myserver2:7736:7737 myserver:7736:7737
</param-value>
</init-param>
<init-param>
<param-name>DebugConfigInfo</param-name>
<param-value>ON</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
……