欢迎光临
我们一直在努力

WEBLOGIC6.0的一些使用经验(转载)-JSP教程,J2EE/EJB/服务器

建站超值云服务器,限时71元/月

感觉写的很好,所以转载与大家共享!
前 言
weblogic是一个性能卓越的j2ee服务器,在我国的使用者在快速增长。但现在有关它的中文资料基本没有,更没有介绍使用经验方面的。下面是本人在学习使用weblogic6.0中得到的一些经验,写出来与大家分享。
一、weblogic6.0的安装
weblogic6.0自带了jdk1.3,所以不用预先安装jdk就可以直接安装它,在win2000平台是一个exe文件,直接运行它即可;在unix平台上的安装包是一个*.bin文件,用sh运行它就可以了,最好是加 -i console的控制台选项(如果不加,可能会报classnofound等错误)如下所示:
sh weblogic60_sol.bin -i console的控制台
注意:
1、unix系统的tmp目录(环境变量tmpdir或tmp_dir所指的路径)应有足够的空间,因为weblogic6.0安装时先解压文件到系统的tmp目录下,然后再进行安装。如果tmp目录空间不够安装会出错,这时你可以把tmpdir设到要足够空间的目录下。
2、如果用普通用户安装出错,可试着用root用户安装。一般是环境变量及权限的问题。
3、安装软件可到http://commerce.bea.com/downloads/products.jsp下载,联机文档可到http://edocs.bea.com/wls/docs61/index.html下载。

二、与oracle数据库的连接
weblogic6.0通过oracle客户端访问oracle,所以在weblogic6.0所在的机器上要正确安装oracle客户端才行。weblogic6.0对oracle提供type2的jdbc driver支持,是一些动态连接库(nt 是.dll,unix是.so)文件,在$wl_home\bin下,以oci开头的几个目录中。具体采用哪个目录下库文件,与oracle server端及client端的版本及oracle api的版本有关,可参考weblogic6.0的联机文档。要把这些库所在的路径加到系统的环境变量中,否则访问数据库时,weblogic6.0会报以下错误:
java.sql.sqlexception: system.loadlibrary threw java.lang.unsatisfiedlinkerror
with the message no weblogicoci37 in java.library.path…..
在win2000中要加到path环境变量中,如:
set path= d:\weblogic6.0\wlserver6.0\bin\oci816_7;c:\orant816\bin;%path%
在nix平台,要到系统的library path中,如在sun上,要加到ld_library_path环境变量中,方法如下:
export ld_library_path=/bea/weblogic6.0/oci816_8:$oracle_home/lib
在hp平台上,要加到shlib_path环境变量中,如:
export shlib_path=/bea/ weblogic6.0/lib/hpux11/oci816_8:$oracle_home/lib

三、在weblogic6.0中设置资源的访问权限
weblogic6.0几乎可以对它所管理的所有资源设置访问控制表,包括ejb、jsp、servlet、pool、jms、rmi、jndi、jdbc等等。当用户第一次访问设置了访问控制表的资源时,weblogic6.0会弹出一个对话框要求输入口令及密码,如果连输3次都不对,会返回以下错误:
error 401–unauthorized xxx  
from rfc 2068 hypertext transfer protocol — http/1.1:
10.4.2 401 unauthorized

对访问权限的设置有两种方式:
1、 在weblogic6.o的控制台中设置,把结果保存到filerealm.properties中,即采用weblogic6.0的file realm.感觉对database pool,ejb等比较好用,对jsp,server及某个目录设置访问控制表比较难。我试了很多次都没成功。它可对web用户(通过浏览器访问)和普通用户(通过java客户端等访问)起作用。
2、在web.xml,weblogic.xml中设置,只能对web用户起作用。下面举个例子说明这种方式。
如:在一个名为orderwebapp的web application中,客户的定单文件都放到/orders目录下,只有manager能浏览该目录下的文件。其web.xml及weblogic.xml可设置如下:

*************************web.xml*************************  
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 1.2//en" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<security-constraint>

<web-resource-collection>
<web-resource-name>secureorderseast</web-resource-name>
<description>security constraint for resources in the orders directory</description>
<url-pattern>/orders/*</url-pattern>
<http-method>post</http-method>
<http-method>get</http-method>
</web-resource-collection>

<auth-constraint>
<description>constraint for orders</description>
<role-name>manager</role-name>
</auth-constraint>

<user-data-constraint>
<description>ssl not required</description>
<transport-guarantee>none</transport-guarantee>
</user-data-constraint>

</security-constraint>

<security-role>
<description>managers</description>
<role-name>manager</role-name>
</security-role>

</web-app>

说明:<security-constraint>中定义资源的访问控制表。在<web-resource-collection>中定义资源及其存取方式;在<auth-constraint>中定义可访问该资源的角色;在 <user-data-constraint>中定义weblogic server与client之间的开始通讯时,是否采用ssl建立连接。在<security-role>中定义角色名。

*************************weblogic.xml*************************
<!doctype weblogic6.0-web-app public "-//bea systems, inc.//dtd web application 6.0//en" "http://www.bea.com/servers/wls600/dtd/weblogic6.0-web-jar.dtd">
<weblogic6.0-web-app>
<security-role-assignment>
<security-role-assignment>
<role-name> manager </role-name>
<principal-name>peter</principal-name>
<principal-name>bill</principal-name>
</security-role-assignment>
</weblogic6.0-web-app>

说明:在<security-role-assignment>定义与web.xml中定义的角色所对应的用户。这些用户必须已在weblogic6.0的控制台中定义才行。

当在浏览器中输入http://localhost:7001/orderwebapp/orders/order100.html时,weblogic6.0要求输入用户名及口令.只有peter,bill能够访问该文件。
我发现:如果没有在weblogic.xml中设置<security-role-assignment>,并在weblogic6.o的控制台中定义的用户名与web.xml中<security-role>中角色的名字一样。则该用户可以访问受保护的资源。如果在在weblogic.xml中设置了<security-role-assignment>,则与<security-role>中的角色名字一样的用户也不能访问受保护的资源,只有在<security-role-assignment>中定义的用户才可以访问受保护的资源。

四、jsp的设置及调试
在weblogic6.0中,jsp要放到一个web application 中才能对它进行访问,对jsp的配置在weblogic.xml中,如下所示:
<!doctype weblogic6.0-web-app public "-//bea systems, inc.//dtd web application 6.0//en" "http://www.bea.com/servers/wls600/dtd/weblogic6.0-web-jar.dtd">
<weblogic6.0-web-app>
<jsp-descriptor>
<jsp-param>
<param-name>
pagecheckseconds
</param-name>
<param-value>
1
</param-value>
</jsp-param>
<jsp-param>
<param-name>
verbose
</param-name>
<param-value>
true
</param-value>
</jsp-param>
</jsp-descriptor>
</weblogic6.0-web-app>

比较重要的有pagecheckseconds,设置weblogic6.0每隔多长时间检测一次jsp文件的内容是否改变,并需要重新编译,等于0,每次调用都重新编译(一般用于调试环境中),等于-1从不重新编译(一般用于运行环境中)。当第一次访问某个web application下的一个jsp文件时,weblogic6.0把它编译成一个class文件并放到相应的目录下:
1、 如果是以目录结构形式发布的web application,放到该web application的
web-inf\_tmp_war_examplesserver_examplesserver_*目录下。
2、如果该web applicaton是以一个war文件布置的,则放到:
…\applications\.wl_temp_do_not_delete\web-inf\_tmp_war_examplesserver_examplesserver_*目录下。
在调试jsp时,为了使每次总是访问最新的页面,除了设置pagecheckseconds=0外,应该让ie不缓存该页面。设置如下:
把/工具/internet选项/常规/设置/的检察所存页面的较新版本,设为每次访问该页时都检查。如果还是不能看到最新的页面,可以到以上介绍的目录下把与该jsp对应的class文件删除,强制weblogic6.0重编译。

五、password的管理
weblogic6.0每次启动时都会提示请输入密码,如果不想每次启动时都输入密码,可创建一个paddword.ini文件,并把密码保存在该文件中即可。也可以用-dpassword=password 把密码加到启动脚本中。密码可在weblogic6.o的控制台中的security中修改。

六、weblogic6.o控制台的使用
weblogic6.o的控制台要在ie5.0以上的版本中才能启动,如果ie设置了代理服务器,weblogic6.o的控制台有可能无法启动,应把代理服务器的设置去掉在/工具/internet选项/连接/局域网设置中。在weblogic6.0的控制台能完成几乎所有的配置,不象weblogic5.1有时候要直接修改配置文件。

七、config.xml文件
每次weblogic6.0启动成功,会自动把config.xml文件备份成config.xml.booted(在相同的目录下)。如果config.xml中的内容被改动,
导致weblogic6.0无法启动成功,可用它覆盖被破坏的config.xml。如果在config.xml中登记的资源(如某个ejb,war文件)被删除,weblogic6.0每次启动都会给出错误提示,可手工把该ejb或war在config.xml中的登记项删除,以后就不会提示。要注意经常对该文件备份。

八、对默认web application的访问
weblogig有一个默认的web application,如果某一个http(https)请求,所指定的web application都无法处理时,会自动让default application 来处理,如果default application也处理不了,则报错。如要访问 http://localhost:7001/myweb/my.jsp。当myweb中没有my.jsp,如果default application中有my.jsp,则由它把结果返回给浏览器。默认web application就是applications下的defaultwebapp_examplesserver,它只能是以目录结构形式布置,不能是一个war文件,如果把该目录删除,weblogic6.0启动时也会自动生成该目录。访问它时,不用加上该web application的名字,加在反而会访问不到。如在defaultwebapp目录下有一个test.jsp: http://localhost:7001/test.jsp能访问到该jsp,但http://localhost:7001/defaultwebapp_examplesserver/test.jsp访问不到。
注意:访问其他的web application中的文件。要加上该web application的名字才行。

九、配置cluster应注意的问题
1、要设置网关
配置cluster时,每台服务器都要配置默认网关,如果没有配置,manager server会无法连接到administrator server上。在win2000中,可在控制面板中直接加,在unix下,用router add ip address设置,ip address 可用该服务器的ip地址,并把最后一节改为1,如192.168.1.111可用192.168.1.1做默认网关。unix下可用netstat -rn 查看系统的默认网关。
2、weblogic6.0以cluster方式运行,所采用包含cluster许可的license才行。
3、multicastaddress不合法
有效的multicastaddress是从224.0.0.0 到 239.255.255.255。
可用weblogic6.0带的utils.multicasttest 测试所用的multicastaddress是不是正常。如:
java utils.multicasttest -n test -a 237.0.0.1
-n 指定一个名字标识该进程,可随便起。
-a 要测的ip地址
4、在一个cluster中的weblogic6.0 server的版本要一致,监听的端口也要一样。
5、最好不要在administrator sever中布置任何的应用,把应用放大managed server上。

十、在weblogic6.0在布置应用
1、weblogic6.0中应用可分三种,分别对应不同的描述文件及扩展名或目录结构:
(1)*.jar: 是ejb的压缩包(有3个描述文件ejb-jar.xml,weblogic6.0-ejb-jar.xml,weblogic6.0-cmp-rdbms-jar.xml)
(2)*.war: 是只包含jsp和servlet的web application压缩包(有2个描述文件web.xml,webloigc.xml)
(3)*.ear: 是包含ejb和web application 的j2ee enterprise application压缩包(有1 个描述文件,application.xml)

注意:它们不能混用,如web applicatoin不能打包成.ear文件。

2、weblogic6.0的应用用两种发布方式:
(1)以目录形式存放在weblogic6.0的applications目录下,适用于开发阶段
(2)以一个压缩包形式存放在weblogic6.0的applications目录下,适用于运行阶段,可用jar 打包,如d:\test>jar cf testwar.war *
把test目录下的所有文件打包成一个testwar.war文件。

3、weblogic6.0应用的布置方式有2种
(1)静态布置:即把应用在config.xml中登记,可通过weblogic6.o的控制台进行添加,weblogic6.0会自动把该应用对应的压缩包拷到applicaitons目录下,如果对该应用修改,需要重新布置才行。
(2)动态布置:没有在config.xml中登记,可直接把压缩包或目录拷到applications目录下,weblogic6.0会自动检测到.weblogic6.0每次启动时会自动对applications目录下没有进行静态布置的应用,进行动态布置。

4、一个例子:
如果一个应用中有ejb,jsp,servlet,其布置步骤如下:
(1)生成ejb的jar文件,最好一个jar文件对应一个ejb
(2)生成web application的war文件,在web.xml,weblogic.xml中登记,配置servlet,jsp等。
(3)创建一个application.xml文件,设置该应用的属性.把application.xml,*.jar, *.war,打包成一个*.ear
(4)weblogic6.o的控制台中登记该应用或把该ear文件拷到applicaiton目录下。到处就完成。

十一、weblogic6.0 6.0中的classpath问题
weblogic6.0 6.0中的classpath比5.1要简单的多,下面对其做一个小结:
1、weblogic6.0 6.0启动所需的classpath只要如下设置就可以了  
set %wl_home%\lib\weblogic6.0_sp.jar; %wl_home%\lib\weblogic6.0.jar
如果要用到它带的cloudscape数据库,则加上:
%wl_home%\samples\eval\cloudscape\lib\cloudscape.jar
2、ejb中引用的class要在系统的classpath中,才能访问到。
3、如果是一个web applicatoin中的某个servlet,jsp引用了其他的class,把他们放到该web applicatoin的\web-inf\classes目录下weblogic6.0可以访问到。当然,如果在系统的classpath中设置这些类的路径,weblogic6.0也可以访问到。在调用时,weblogic6.0会把web-inf/classes/下的类都copy到../applications/.wl_temp_do_not_delete/…../web-inf下,不管是打包的ear,war文件还是没打包的目录方式。
4、如果一个web application中的jsp中调用到ejb,即jsp是ejb的client,只要在该jsp中import一下就可以,如某个jsp调用到ejb: com.test.bbs.jar,其import格式如下:
<%@ page import="
javax.naming.*,
javax.ejb.*,
java.rmi.remoteexception,
java.rmi.remote,
java.util.*,
java.sql.*,
com.test.bbs.*
"%>
当然,该com.test.bbs.jar必须已正确布置。
当该web application是以war文件布置时,com.test.bbs.jar不用在系统的classpath或该web application的web-inf/classes中,该jsp能调用到。但如果一个web application是以一个目录的方式放在applications下时,该ejb中的类要在系统的classpath中才能访问到。放到该web application的web-inf/classes/下,该jsp是访问访问不到这个ejb的。可以把com.test.bbs.jar加到系统的classpath中,如weblogic6.0启动时的classpath可如下设置:
set classpath=.;.\lib\weblogic6.0_sp.jar;.\lib\weblogic6.0.jar;d:\weblogic6.0\wlserver6.0\config\examples\applications\xcjing_ejb_bbsok.jar
也可以把bbshome.class.bbsbean.class,bbs.class拷贝到系统的classpath指定的某一路径下,如weblogic6.0启动的classpath如下:
classpath=.;.\lib\weblogic6.0_sp.jar;.\lib\weblogic6.0.jar;d:\weblogic6.0\wlserver6.0\config\examples\serverclasses
可以以上3个文件拷到d:\weblogic6.0\wlserver6.0\config\examples\serverclasses,该jsp也能访问到。
5、如果一个 application中的jsp中调用到ejb,classpath,设置同上。如果该application中的ejb中引用的其他的class,则这些class要在系统的classpath中,才能访问到。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » WEBLOGIC6.0的一些使用经验(转载)-JSP教程,J2EE/EJB/服务器
分享到: 更多 (0)