Resin服务器的使用
2008-01-05 08:54:56 来源:WEB开发网核心提示:一、java Web服务器选择简介在实际进行java Web项目实施的时候,我们可以采用的商业java Web服务器有Ibm WebSphere,Bea Web Logic,Resin服务器的使用,这两种服务器功能齐全而强大,支持所有的java 服务容器标准,Resin个人认为比Tomcat要好很多,况且Resin还有
一、java Web服务器选择简介
在实际进行java Web项目实施的时候,我们可以采用的商业java Web服务器有Ibm WebSphere,Bea Web Logic
。这两种服务器功能齐全而强大,支持所有的java 服务容器标准,适合成品商业java Web应用的发布。但是
这两种服务器是商业服务器,价格昂贵,而且对系统资源要求极高。非凡是Websphere 配置复杂,假如不配合
采用ibm Websphere Studio application非常不适合开发。而且他们不同的版本对servlet.jar等javax组件和
jdk的要求不同。如Websphere 3.5所要求的servlet.jar 支持的是旧版本的javax.servlet.http.Httpsession
操作,不支持session.setAttribute() session.getAttribute()。
在开发或者学习过程中,有许多免费的轻型的Java Web服务器可以供我们选用,如Tomcat,Resin,Orion等等。
他们使用都很方便,占用资源也很少,适合开发中不断的调试;还可以和Jbuilder这样的集成开发工具集成使
用。根据实际开发中的情况来看,Jakata Tomcat 和Sun Java结合的最好,和其他应用服务器配合使用可支持
完整的j2ee标准,应用也很广泛。但是从Java 普遍存在的编码问题来看,还是Resin 解决的最好。还有从使
用的角度讲,个人认为Resin比Tomcat方便,而且Resin也可以结合Jbuilder6等ide使用。Resin强调使用xml技
术,从Resin自己的HomePage使用xtp就可以看出来。
二、Resin的安装和配置
Resin 可以在 http://www.caUCho.com/download/index.xtp 免费下载和使用。使用Resin开发或者学习是免
费的,但是假如把Resin作为收费产品发布是需要付费的。目前的版本是2.10。
下载Resin 时选择Archive Versions 中的 windows.zip的普通安装包resin-2.1.0.zip。
把该zip包解压到任何目录下面,如d:\resin。以下介绍都假设Resin安装在d:\resin下。进入d:\resin\bin,
键入httpd,可以在命令行控制台下运行Resin服务器。此时弹出一个有start 和stop两个Radio按纽和一close
按纽的对话框。在这里可以看到Resin的运行信息。这些信息同时Resin可以在d:\resin\log目录下面的
stdout.log 日志文件中察看到。如:
Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)
Copyright(c) 1998-2001 Caucho Technology. All rights reserved.
Starting Resin on Wed, 23 Jan 2002 14:41:47 +0800 (CST)
http listening to *:80
srun listening to haitaiserver:6802
点选stop,可以停止当前的Resin服务器进程;再点选start,又可以开启新的Resin服务器进程。关闭该对话
框,则回到Command 控制台的盘符提示状态下。假如在nt4或者win2k环境下,需要把Resin当成服务,只需要
在Command控制台的该目录下,键入 httpd ?install,就可以在治理工具的服务下面看到新增了一条Resin
Web Server的自动的服务。以后只要进入nt 4或者win2k,就可以启动Resin服务。该服务也可以像其他服务一
样设置成手动或者禁用状态。注重有的时候在安装完服务后,启动Resin,并不能看到自己写的Resin例程可以
被解析,浏览器显示服务器找不到错误。只要重新启动win2k或者nt,就能解决该问题。
下面简要介绍一下Resin服务器的配置。Resin服务器和大多数Java Web服务器一样,通过一个Xml文件配置。
进入d:\resin\conf目录,打开resin.conf,这是一个xml格式的文本。
这里面有很多标记,先查找到:<http-server>。在<http-server></http-server>标记对中的配置和resin的
Java Web 服务器有关。找到<app-dir>,在<app-dir></app-dir>标记对中的表示resin的根,相当于Apache的
htdocs 或者 IIS 的wwwroot。Resin自带http服务器,但是也可以不使用它,采用Apache 或者 IIS做http服
务器。这个在下面段落中会提到。
再查找<http port='8080'/>标记,它可以这样配置<http host='localhost' port='80'/>。host参数指定的
是服务器,port指定的是http端口,默认是localhost和8080。还有<srun host='localhost' port='6802'/>
标记。这个是jsp和java Servlet的引擎配置。一般默认就可以了,除非6802端口已经被别的程序占用了。然
后,配置jdk。这个需要在classpath中设置。右键点击我的电脑,在系统特性的高级标签中,点击环境变量,
在系统变量中新建一个环境变量,变量名为classpath,值为jdk所在的目录;再新建另外一个环境变量,变量
名为path,值为javac.exe和java.exe所在的目录(在jdk所在的目录下面的bin目录下)。一般这样子配置以
后,Resin就可以使用了。在d:\resin\doc中(假设你的<appdir></appdir>对中的名称是doc,也就是根是
d:/resin/doc,而且你的<http host='localhost' port='80'/>如左配置),随便写一个jsp文件,如可以写
个test.jsp文件,内容为<%=1+2+3%>。然后,在浏览器中,键入http://localhost/test.jsp。假如你可以看
到浏览器显示6,则表示Resin服务器已经可以正常运行了。注重,修改配置后,一般重新启动resin才能看到
变化。
三、Resin使用简介
使用Resin开发Java Web项目时,需要建立自己的WebApp。这里不介绍Resin Cmp/Ejb的开发和使用,只介绍用
Resin开发普通的jsp\java servlet项目。在这里还要谈到resin.conf的配置。Resin中的应用可以有2种方式
发布:一是在Resin的目录下发布;二是打包成War发布。
1、在Resin的目录下发布
在resin.conf中查找<web-app>标签,该标签表示一个web应用。
标签中,id属性表示该应用的Web路径。如<web-app id='/test'>,表示该应用在Web上访问的时候应该用
http://hostname/test/来访问。app-dir属性表示该应用的实际路径。如
<app-dir>d:\resin\doc\test</app-dir>表示该应用在d:\resin\doc\test目录下面。默认值为根下面的和id
同名的目录。Resin可以配置3种error-page:404错误也就是文件找不到错误页;Exception违例页;不能连接
java引擎页。他们分别可以这样子设置。
404文件找不到页
<web-app id='/app1'>
<error-page error-code='404' location='/file_not_found.jsp'/>
</web-app>
Exception 违例页
<web-app id='/foo'>
<error-page exception-type='java.lang.NullPointerException'
location='/nullpointer.jsp'/>
</web-app>
不能连接到srun Servlet引擎错误页
该页设置和应用无关,属于服务器的设置。
<http-server>
<error-page exception-type='connection'
location='/missing_file.Html'/>
</http-server>
classpath的设置
参见下面的语句:
<classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>
id参数的值表示classpath中编译后的class的存放路径;source参数的值表示classpath中java源代码的存放
路径;compile中的值可能是true或者false,表示是否由Resin的srun自动编译java源代码。Classpath的设置
一般和javaBean或者Servlet的使用有关。id的值表示javaBean的编译好的包存放的根,source的值表示
javaBean的java源代码存放的根。Servlet相同。
Servlet的设置
参见下面的语句:
<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
<servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>
一般就是指定那些需要通过srun的解析。比如在这里,把*.jsp改成*.jss,其他不变,那么只要在访问时碰到
*.jss的文件就和原来碰到*.jsp一样处理。通过这个可以指定解析的引擎,如以下的配置:
<servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
在Servlet中,也可以指定servlet。如
<servlet servlet-name='hello' servlet-class='test.HelloWorld'/>
<servlet-mapping url-pattern='/hello.html' servlet-name='hello'/>
在servlet-mapping中有个重要的参数case-sensitive 假如在windows上,最好配置成false,忽略大小写,从
而和windows的约定一致。
Session的配置
参见如下的配置语句:
<session-config>
<session-max>4096</session-max>
<session-timeout>30</session-timeout>
<enable-cookies>true</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
<file-store>WEB-INF/sessions</file-store>
</session-config>
session-max :最大 session数量
session-timeout :session过期时间,以分钟为单位。
是否答应cookie :指session是否采用cookies。假如采用cookies,浏览器必须支持session才能使用,发布
时建议改成false。enable-url-rewriting和enable-cookies一般配合使用。假如enable-cookies是false,
enable-url-rewriting应该设成true比较合适。
file-store :该配置指示服务器是否把session作为文件存放在服务器上。假如把该项注释掉,则在你的
web-app目录下的WEB-Inf/sessions目录不保存序列化后的session对象。Session还有jdbc-store配置,对应
着把session通过jdbc永久保存在数据库中。其实也就是会话变量的序列化后的保存和重新载入的物理实现。
在这里session还支持了多服务器的设置问题,
通过tcp-store参数设置。由于涉及到负载平衡的问题,在这里不具体叙述,只简单写一个例子:
<http-server>
<http id='a' port='80'/>
<srun id='a' host='host-a' port='6802'/>
<http id='b' port='80'/>
<srun id='b' host='host-b' port='6802'/>
<host id=''>
<web-app id=''>
<session-config>
<tcp-store/>
<always-load-session/>
</session-config>
</web-app>
</host>
</http-server>
这个例子表示session是按照tcp ring的方式传递。
temp-dir 的设置
temp-dir指的是应用的临时目录。也就是在javax.servlet.context.tempdir中用到的目录。模认是应用目录
下的WEB-INF\tmp目录。
以上的设置都可以在<web-app>标签对中设置,控制某个web应用的设置。
2、打包成War发布
以下是介绍对如何在resin下使用已经打包成War的java Web应用进行发布。
其实这个是最简单也是最清楚的良好方法。在j2ee中,所有的项目都打包成ear发布。其中,Web应用打包成
war,ejb应用打包成jar。在resin中,这些都可以直接部署。这里我只对打包成war的Web应用的部署做介绍。
在resin.conf中,查找这个:<war-dir id='webapps'/>。他表示war文件应该被拷贝的路径。这里指的是相对
于resin的安装路径,如以上的设置表示d:\resin\webapps。只要重新启动Resin就可以了。Resin会把该war自
动解包到webapps目录下。你可以在command控制台或者stdout.log中看到类似于
[2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的语句。这个
表示该Web应用是自动安装的。只要这个应用是符合j2ee标准的Web应用,应该不会有问题。通过如上显示的路
径就可以访问到这个应用。假如你到d:\resin\webapps\rwtest中浏览,你会看到Resin已经为你生成了rwtest
目录,下面是META-INF和WEB-INF还有你自己的JSP\servlet 文件和目录。是完全符合j2ee的结构的。你可以
在rwtest目录下建立新的jsp\servlet,一样可以被编译和解析并运行的。在实际操作中,可以使用Jbuilder
或者 WebSphere等Ide工具进行集成调试和打包,非常的方便。
四、使用Resin进行java Web项目的开发和调试
这里篇幅有限,不可能讲太多,我只对实际中最有用的部分做介绍。
Resin中假如定义了错误页,则出错后最常见的一大串Exception不会被看到,直接跳转到错误页。所以建议开
发中先不设置错误页。jsp错误中最常见的就是Nullpoint Exception,其次是名称的拼写错误。错误也可以在
Resin安装目录下的log目录下的stderr.log中找到。通过对该log文件的分析可以看到很多有用的错误信息。
在调试jsp的时候,假如定义了compile为true,jsp先被翻译成Servlet的java文件,再被编译成class文件。
可以在你自己的work目录中找到该文件。java的名称在Resin中是这样子定义的:原先的jsp文件名前加下划线
,再加上_jsp这个字样。所以在java 应用中的命名不要以_jsp结尾,也不要出现中文名称等字符;其实名称
以_jsp为开头也是不合法的。
关于java对多国语言的支持问题,在Resin中得到了很好的解决。以jsp为例,参考Resin自动生成的java
Servlet文件。只要在任何的jsp文件的最开始处增加:
<% @page contentType="text/html;charset=gb2312" %>
中文问题就解决了。察看生成的Servlet源文件片断:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("GB2312");
以上为设置字符集
PRivate static byte[] _jsp_string26;
private static byte[] _jsp_string27;
_jsp_string26 = "\r\n</table>\r\n<table class=\"type\">\r\n<tr>\r\n <td>".getBytes("GB2312");
_jsp_string27 = "\r\n</td><td>\r\n</tr>\r\n<!--\r\n<tr>\r\n<td>\r\".getBytes("GB2312");
以上是对页面的显示的编码。其中,getBytes("gb2312")是静态编码,这是Resin为了解决某些环境下还是不
能正常显示而设置的。在Resin的配置文件(/conf/resin.conf)中,可以通过设置<jsp precompile='true'
static-encoding='false' recompile-on-error='true'/>中的static-encoding属性为true或者false,来控
制是否静态编码。其实在Resin容器的内部,所有的字符都是按照iso-8859-1来处理的。iso-8859-1是一个大
字符集,虽然中文的gb2312和8859在字的定义上有不同,但是编码是包容了gb2312的。按照解决多国语言的方
法,在纯英文平台上用iso-8859-1处理内部编码,而把字符的显示推向客户端的机器。所以这样只要编码是正
确的,在页面上显示中文就不存在问题。Tomcat3.2不方便的地方是Tomcat对数据库的操作中文支持不好,需
要手动在java Bean或者Servlet中硬编码。通过测试,在Resin中完全没有这个问题。Tomcat4.0解决了这个问
题。不过个人习惯来讲还是觉得resin在配置方面方便一些。
在Resin中可以自动解决引入的jar。这个在使用非凡的类或者第三方提供的开发包非常有用。方法非常简单:
只要把该jar或者是zip拷贝到Resin安装目录下的lib目录下面,重新启动Resin,就可以了。如db2用到的
db2java.zip文件,只要轻松拷贝到d:\resin\lib中就可以了。
Resin提供了对Jbuilder的集成调试。可以到:
http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免费下载到resin的jbuilder的ide扩展包。
然后,把该包该名成:resin-jbuilder.jar,拷贝到jbuilder6\lib\ext目录下。然后,把Resin2.1解包安装
在jbuilder6\resin-2.1目录下,就可以了。打开任何的War项目,在project上点右键,选择properties,选
择Servers标签。在原来的选择框上,就可以看到多了一项Resin2.1。这样子就可以象原来用tomcat一样调试
jsp\servlet了,而且比Tomcat更方便。调试方法和用Tomcat调试一样。
五、其他问题
使用Resin可以和apache结合使用。也就是利用apache做http服务器,而Resin做srun服务器。可以参考
resin\conf\samples目录下的apache.conf。主要就是把 app-dir 设成 /usr/local/apache/htdocs(也就是
apache的root)。同时在apache 中的http.conf也做了相应的设置。Resin还提供了对该过程的自动安装程式
,运行resin\bin\setup,你可以在弹处的对话框中选择apache,这样子就可以了。只要你曾经安装过apache
,resin可以自己找到httpd.conf文件所在的路径。
使用命令行方式启动Resin,假如改动了Resin.conf,Resin会自己重新启动适应新的配置。这个很适合初期安
装时使用。
Resin对数据库缓冲池的支持很好。在这里,它提供了DBPool对缓冲池做了封装。实际使用时,只要在
resin.conf这样配置:
<dbpool.sql>
<id>ORCL</id>
<driver>Oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:SMTH</url>
<!-- <url>jdbc:oracle:oci8:@SMTH</url> -->
<user>scott</user>
<passWord>tiger</password>
<max-connections>5</max-connections>
</dbpool.sql>
然后,在你的jsp或者servlet中就可以这样子使用了:
先导入 com.caucho.sql.*包,然后如下直接得到连接:
Connection conn = DBPool.getPool("ORCL").getConnection();
个人建议不要如上使用连接池,还是按照ejb的方法用从Context中直接找到的DataSource对象中得到连接通用
性比较好。代码也很简单:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);
Connection conn = ds.getConnection();
在Resin中如下配置jdbc就可以了:
<resource-ref>
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.caucho.jdbc.MySQL.Driver"/>
<init-param url="jdbc:mysql_caucho://localhost:3306/test"/>
<init-param user="name"/>
<init-param password="password"/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>
用Resin Web Server开发还是比较愉快的。只是没有像Weblogic 或者WebSphere那样子提供现成的治理控制台而已。但是从稳定性和方便性来讲,Resin个人认为比Tomcat要好很多。况且Resin还有提供了resin-cmp 和 resin-ejb,功能更强大。
更多精彩
赞助商链接