我原来看过一篇文章,可能是我修行不够,也可能他在关键部分说得太简单,说是打war之后就放到webapp目录中,下面我就不明白如何做了。
再者如何打成war我也不知只知jar.
再者如何打成war我也不知只知jar.
解决方案 »
- Hibernate的问题
- hibernate中session的关闭的创建
- java操作excel
- 如何借助Java语言和JNDI接口实现基于LDAP协议的分布式仿真资源目录管理系统?
- spring中集成quartz 集群2.1的版本报错,弄过quartz集群的大神请进!
- jsp数据库查询点击快了就不响应了,是tomcat的问题还是程序的问题?
- 用Java如何修改本地機子上指定文件的內容?
- 如何根据已知数据,使用java来生成柱状图、和曲线图啊
- 连接池配置错误!!!!!!!!!!!
- EJB中为什么不能通过参数进行回传?
- 哪有weblogic的中文配置文档?请告诉下载地址,谢谢!
- [討論]使用Struts框架,結合Jsp和標簽庫實現頁面多語言化
--------------------------------------------------------------------------------在resin-ee-2.1.5上构建j2ee应用服务
(100101)北京信息工程学院 蔡君 www.justhis.com ----如果要转载请注明来处和作者
一、所需软件
1.JDK
因为resin自己不带j2sdk,所以必须在安装resin之前要安装j2sdk,这样的话,我们可以使用任何版本的j2sdk, 与有些AppServer相比较,省去了千方百计修改jdk的苦恼。
Sun公司相关下载连接
http://java.sun.com/j2se/downloads.html 2.resin-ee
caucho公司的resin虽然现在没有多少人知晓,但是他的调试能力,他的执行速度实在让人惊叹,caucho 公司的resin对JSP、servlet的解析能力更是略胜一筹,国内许多大型网站都采用了resin的服务器(尽管许多 开发人员并未使用),象:http://www.163.com http://www.chinaren.com http://www.justhis.com.
resin-ee经过几次修订之后,已经越来越稳定了,他的CMP(容器管理)更是显示出强大的威力,可配置性、即使更新的功能更是让人瞠目结舌。
caucho相关下载
http://www.caucho.com/download/ PS:本人系统环境为win2kServerSP3+j2sdk1.4+resin-ee-2.1.5 二、构建环境
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中编译后的classpath的存放路径;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工具进行集成调试和打包,非常的方便。
3、打包成Ear发布
一个ear的发布带有就j2ee的一些文件,譬如一个jzjweb.ear他包涵有jzjwebEjb.jar和jzjweb.war,部署相当简单,就是把此文件拷贝到web-apps文件夹下面,这个时候您就可以看到resin的控制台显示有一些初始化的一些信息。这个时候可以通过浏览器进行浏览您的基于j2ee的应用服务器的webApplication了,呵呵,岂不很爽?
看到resin的这么多优点是不是已经迫不及待了?让我们进行深度探险吧。
1. 进行DataSource的配置 打开<resin_home>/confi/resin.conf,您可以看见里面已经有了这么一段
<resource-ref>
<res-ref-name>jdbc/test</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="root"/>
<init-param password=""/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>
这些东西我想您一看就知道是什么意思了吧,略作介绍:
<resource-ref> 为资源参引
<res-ref-name>就是资源引用的名字,这个您可要记好了,这是在程序中LookUp的标识哟。
<res-type>就是为引用的类型,在此为DataSource同样也可以为其他的类型。
<ini-param >为初始化的参数
driver-name:为数据库的驱动程序
url: 为数据库的连接URL
user: 为数据库的用户名字
password:为数据库的连接密码
max-connections为数据库的最大连接量
max-idle-time:为最长连接时间 如果我们相配置一个基于oracle的Datasource应该怎么作呢,我不作解释了,只给出相应的代码,我想您肯定能够知道的。^_^
<resource-ref>
<res-ref-name>jzjwebDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="oracle.jdbc.driver.OracleDriver"/>
<init-param url="jdbc:oracle:thin:@10.1.7.128:1521:ora817"/>
<init-param user="ecid"/>
<init-param password="ecid"/>
<init-param max-connections="120"/>
<init-param max-idle-time="30"/>
</resource-ref>
2. 进行web.xml的配置 Web.xml的配置可以说是关键的,不要听我这么一说感觉很难,其实resin自带一个例子cmp里面的配置说明已经相当经典,我们可以很容易的配置我们所需的webApp,其实有的时候在resin.conf里面的配置的东西,同样在web.xml也是适用,为了自动读取.ejb文件,并且观察ejb文件变化,我们先要引用一些资源文件,如下面的一段设置: <resource-ref>
<res-ref-name>java:comp/env/cmp</res-ref-name>
<class-name>com.caucho.ejb.EJBServer</class-name>
<init-param data-source="java:comp/env/jdbc/test"/>
<!-- sets the JDBC isolation level -->
<init-param jdbc-isolation="serializable"/>
</resource-ref>
此定义中引用一个CMP的引用,其他的引用也是大同小异,如果要是引用remote的Bean,我们可以通过定义下面的Servelet映射,此映射主要是用来调用远程的EJB,如果您使用一个CMP就不必使用下面的映射了,可以将其删掉
<servlet-mapping>
<url-pattern id=´/burlap/*´/>
<servlet-name id=´com.caucho.burlap.EJBServlet´/>
<init-param url-prefix="http://localhost:8080/hello/burlap"/>
</servlet-mapping> 我们还需要定义对于远程jndi的调用URL,这与前面定义的Servelet要对应的,一个例子:
<jndi-link>
<jndi-name>java:comp/env/ejb</jndi-name>
<jndi-factory>com.caucho.burlap.BurlapContextFactory</jndi-factory>
<init-param java.naming.provider.url="http://localhost:8080/hello/burlap"/>
</jndi-link>
此处hello为App的名称,您可以在不同的地方修改。
通过以上的配置我们就可以运行我们的j2ee程序了,在默认的情况下,文件的存放为:
<<web-App>>/--
|-----.jsp
|---web-inf/
| .ejb
|web.xml
|<<classes>>/XXX/XXX/XXX.class
|<<lib>>/.jar 目录结构完全是安j2ee规范的。 四.一个使用resin服务器的Hello程序。 现在一个<<resin_home>>\webapps目录下面建立一个目录hello
这个时候您要是通过浏览器浏览http://localhost:8080/hello 此时会在hello目录下面自动创建一个WEB-INF文件夹,然后在WEB-INF/目录下面建立web.xml文件 和 hello-stateless.ejb
在<<resin_home>>\webapps\hello\WEB-INF 目录下面创建两个目录分别为classes , lib
其中classes为您的class的文件,而lib为您的jar文件存放地。程序代码,见附件。
后记:自己花了一个下午地时间把一个oracle+iplanet的j2ee的程序移至resin服务器下面,虽然还有一些问题,但是个人认为,利用resin进行开发再好不过了,不用把大把大把的时间花在重新启动服务器的,resin对于web.xml 和 java class文件改变都会重载应用程序。
GOOK Luck!
在resin-ee-2.1.5上构建j2ee应用服务
(100101)北京信息工程学院 蔡君( 阿菜) www.justhis.com