众所周知,发布一个由JSP/SERVLET开发的网站,除了需要相应的WEB服务器来响应普通网页的请求外还需要专门的应用服务器来响应动态网页JSP/SERVLET的请求。对于商业用户来说,目前最流行的应用服务器软件要数BEA公司开发的WebLogic,下面介绍的是WebLogic5.1的版本。
先将WebLogic解压到/usr目录下,需要修改WebLogic安装目录下的StartWebLogic.sh脚本文件来来设置你的CLASSPATH和JAVA_HOME,最后也是通过这个脚本文件来启动服务。现在启动的服务还不支持JSP/EJB/Servlet等技术,所以还需要修改WebLogic安装目录下的weblogic.properties文件。下面就详细介绍如何来配置这个文件。
------------------------------------------------------------------------------------------
第98行:
weblogic.system.listenPort=80
设置HTTP端口,默认是7001
第114行:
weblogic.password.system=11111111
设置启动Console的密码,默认密码长度为8位
第139行:
weblogic.system.SSLListenPort=7002
设置SSL端口,默认是7002
第236行:
weblogic.system.minPasswordLen=8
设置最小密码长度,默认为8位
第495行-第508行:
设置你自己的RMI,命令格式如下:
weblogic.system.startupClass.[virtualName]=[fullPackageName]
例如:
weblogic.system.startupClass.hello=examples.rmi.hello.HelloImpl
第524行:
#weblogic.ejb.deploy=
# /usr/WebLogic/myserver/Your_Ejb.jar,
默认情况是不允许使用EJB,如果要使用可以把前面的注释去掉,再设置你的EJB的路径
第539行-第543行:
增加用户列表,命令格式如下:
weblogic.password.[username]=XXX
例如:
weblogic.password.xxx=11111111
第604行:
weblogic.httpd.session.enable=true
允许在服务器端使用session;session在开发电子商务程序时非常有用
第663行-第674行:
663行:#weblogic.jdbc.connectionPool.db2Pool=
664行:# url=jdbc:db2//localhost/database,
665行:# driver=COM.ibm.db2.jdbc.net.DB2Driver,
666行:# loginDelaySecs=1,
667行:# initialCapacity=4,
668行:# maxCapacity=10,
669行:# capacityIncrement=2,
670行:# allowShrinking=true,
671行:# shrinkPeriodMins=15,
672行:# refreshMinutes=10,
673行:# testTable=table,
674行:# props=user=db2admin;password=db2admin
设置你要使用到的JDBC POOL,默认情况是不允许使用,如果要使用JDBC POOL可以将前面的注释去掉,不过首先你的JDBC驱动程序必须是在StartWebLogic.sh的CLASSPATH中已经存在的。其中663行是设置JDBC POOL的名字(如db2Pool);664和665行是注册JDBC驱动程序以及连接的数据库;667行为缺省的连接数;668行为连接池中最大连接数;674行为连接数据库的用户名和密码
第767行:
weblogic.httpd.register.*.shtml=weblogic.servlet.ServerSideIncludeServlet
允许使用SSI,即允许使用.shtml为后缀的扩展名
第790行:
weblogic.httpd.register.servlets=weblogic.servlet.ServletServlet
允许使用Servlet,例如URL:
http://localhost/servlets/foo/hello
则实际路径为:
/home/servlet/foo/hello.class
第814行:
weblogic.httpd.documentRoot=/home/www/
此行为设定WEB页面的发布目录
第831行:
weblogic.httpd.servlet.classpath=/home/servlet
此行用来设置放置Servlet等class文件的目录,当然这个目录还必须在StartWebLogic.sh的CLASSPATH中已经存在的
第861行-第868行:
861行:#weblogic.httpd.register.*.jhtml=
862行:# weblogic.servlet.jhtmlc.PageCompileServlet
863行:#weblogic.httpd.initArgs.*.jhtml=
864行:# pageCheckSeconds=1,
865行:# packagePrefix=examples.jhtml,
866行:# compileCommand=/usr/java/bin/javac,
867行:# workingDir=/home,
868行:# verbose=true
这几行是用来支持JHTML技术的,默认是不能使用JHTML扩展名,如果想使用JHTML,将前面的注释去掉即可。861行后面的*.jhtml用来注册使用扩展名为jhtml的任意文件;866行设置javac的目录
第878行-第884行:
878行:#weblogic.httpd.register.*.jsp=
879行:# weblogic.servlet.JSPServlet
880行:#weblogic.httpd.initArgs.*.jsp=
881行:# pageCheckSeconds=1,
882行:# compileCommand=/usr/java/bin/javac,
883行:# workingDir=/home,
884行:# verbose=true
这几行是用来支持JSP的,默认是不能使用JSP扩展名,如果想使用JSP,将前面的注释去掉即可。878行后面的*.jsp用来注册使用扩展名为jsp的任意文件;882行设置javac的目录;在WebLogic中如果要运行test.jsp文件,是先将这个文件编译成_test.class后在运行的,所以第883行设置的目录就是用来放编译后的.class文件用的
先将WebLogic解压到/usr目录下,需要修改WebLogic安装目录下的StartWebLogic.sh脚本文件来来设置你的CLASSPATH和JAVA_HOME,最后也是通过这个脚本文件来启动服务。现在启动的服务还不支持JSP/EJB/Servlet等技术,所以还需要修改WebLogic安装目录下的weblogic.properties文件。下面就详细介绍如何来配置这个文件。
------------------------------------------------------------------------------------------
第98行:
weblogic.system.listenPort=80
设置HTTP端口,默认是7001
第114行:
weblogic.password.system=11111111
设置启动Console的密码,默认密码长度为8位
第139行:
weblogic.system.SSLListenPort=7002
设置SSL端口,默认是7002
第236行:
weblogic.system.minPasswordLen=8
设置最小密码长度,默认为8位
第495行-第508行:
设置你自己的RMI,命令格式如下:
weblogic.system.startupClass.[virtualName]=[fullPackageName]
例如:
weblogic.system.startupClass.hello=examples.rmi.hello.HelloImpl
第524行:
#weblogic.ejb.deploy=
# /usr/WebLogic/myserver/Your_Ejb.jar,
默认情况是不允许使用EJB,如果要使用可以把前面的注释去掉,再设置你的EJB的路径
第539行-第543行:
增加用户列表,命令格式如下:
weblogic.password.[username]=XXX
例如:
weblogic.password.xxx=11111111
第604行:
weblogic.httpd.session.enable=true
允许在服务器端使用session;session在开发电子商务程序时非常有用
第663行-第674行:
663行:#weblogic.jdbc.connectionPool.db2Pool=
664行:# url=jdbc:db2//localhost/database,
665行:# driver=COM.ibm.db2.jdbc.net.DB2Driver,
666行:# loginDelaySecs=1,
667行:# initialCapacity=4,
668行:# maxCapacity=10,
669行:# capacityIncrement=2,
670行:# allowShrinking=true,
671行:# shrinkPeriodMins=15,
672行:# refreshMinutes=10,
673行:# testTable=table,
674行:# props=user=db2admin;password=db2admin
设置你要使用到的JDBC POOL,默认情况是不允许使用,如果要使用JDBC POOL可以将前面的注释去掉,不过首先你的JDBC驱动程序必须是在StartWebLogic.sh的CLASSPATH中已经存在的。其中663行是设置JDBC POOL的名字(如db2Pool);664和665行是注册JDBC驱动程序以及连接的数据库;667行为缺省的连接数;668行为连接池中最大连接数;674行为连接数据库的用户名和密码
第767行:
weblogic.httpd.register.*.shtml=weblogic.servlet.ServerSideIncludeServlet
允许使用SSI,即允许使用.shtml为后缀的扩展名
第790行:
weblogic.httpd.register.servlets=weblogic.servlet.ServletServlet
允许使用Servlet,例如URL:
http://localhost/servlets/foo/hello
则实际路径为:
/home/servlet/foo/hello.class
第814行:
weblogic.httpd.documentRoot=/home/www/
此行为设定WEB页面的发布目录
第831行:
weblogic.httpd.servlet.classpath=/home/servlet
此行用来设置放置Servlet等class文件的目录,当然这个目录还必须在StartWebLogic.sh的CLASSPATH中已经存在的
第861行-第868行:
861行:#weblogic.httpd.register.*.jhtml=
862行:# weblogic.servlet.jhtmlc.PageCompileServlet
863行:#weblogic.httpd.initArgs.*.jhtml=
864行:# pageCheckSeconds=1,
865行:# packagePrefix=examples.jhtml,
866行:# compileCommand=/usr/java/bin/javac,
867行:# workingDir=/home,
868行:# verbose=true
这几行是用来支持JHTML技术的,默认是不能使用JHTML扩展名,如果想使用JHTML,将前面的注释去掉即可。861行后面的*.jhtml用来注册使用扩展名为jhtml的任意文件;866行设置javac的目录
第878行-第884行:
878行:#weblogic.httpd.register.*.jsp=
879行:# weblogic.servlet.JSPServlet
880行:#weblogic.httpd.initArgs.*.jsp=
881行:# pageCheckSeconds=1,
882行:# compileCommand=/usr/java/bin/javac,
883行:# workingDir=/home,
884行:# verbose=true
这几行是用来支持JSP的,默认是不能使用JSP扩展名,如果想使用JSP,将前面的注释去掉即可。878行后面的*.jsp用来注册使用扩展名为jsp的任意文件;882行设置javac的目录;在WebLogic中如果要运行test.jsp文件,是先将这个文件编译成_test.class后在运行的,所以第883行设置的目录就是用来放编译后的.class文件用的
定制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
secureProxy ON/OFF. 如为ON,HttpClusterServlet和Weblogic服务器集群的成员间使用SSL OFF
DebugConfigInfo ON/OFF. 如为ON,an query the HttpClusterServlet for debugging information by adding a request parameter of ?_WebLogicBridgeConfig to any request. 由于安全方面的原因,在产品级环境推荐将此参数设为OFF。 OFF
connectionTimeout 一个套接字在读取数据块之间等待的时间量,以秒为
为方便起见,请先完成相应的修改后,再启动Weblogic
以下操作有些是本来可以在console中完成的,但是由于目前console有些问题,故我们这里直接改动相关文件,以config/mydomain为例子。
1.首先,新建一个Web Application,方法如下
打开mydomain下的config.xml,在最后的</Domain>语句之前追加入如下语句
<Application Deployed="true" Name="WebApp" Path=".\config\mydomain\applications">
<WebAppComponent
Name="WebApp "
Targets="myserver"
URI="WebApp"
/>
</Application>
保存。
2.在mydomain/applications目录下新建目录WebApp
在WebApp目录下建WEB-INF目录
在WEB-INF目录下新建classes
3.将附件中的web.xml拷贝到WebApp\WEB-INF下
对web.xml部分语句的介绍
<web-app>
<display-name>sglzhh</display-name>
<servlet>定义Servlet
<servlet-name>hhh</servlet-name>
<servlet-class>hwe</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hhh</servlet-name>
<url-pattern>/sglzhh/*</url-pattern>注意这里的“*”,下面会用到的
</servlet-mapping>
</web-app>4.将附件中的hwe.class拷贝到mydomain/applications/ WebApp/WEB-INF/classes目录下
5.启动Weblogic6.0的default Server
6.访问我们的小例子
http://127.0.0.1:7001/WebApp/bluebenben
注意,这里的WebApp是我们新建的web application.
sglzhh是我们的servlet所被映射的名字
映射时加了/*,则访问时,不管我们在http://127.0.0.1:7001/WebApp/sglzhh后面加什么文件名,都显示该servlet的内容
例如:
http://127.0.0.1:7001/WebApp/sglzhh
http://127.0.0.1:7001/WebApp/sglzhh/kkk.jsp
http://127.0.0.1:7001/WebApp/sglzhh/mm.html
输出结果都是一样的
如果个人想根据自己的爱好对设置做相应改动,请先调通此文档的例子
此例子经本人在win2k下调试成功
我用的是Weblogic 6.1。另外,二、三问题有人知道吗?
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.5.1 500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.
不知是我的weblogic有问题,还是权限设置有问题。
zxhong(红透半边天) 的回复对我也很有启发。