目标:
将Struts提供的例子部署到Apusic V5.1上,并且可以正确运行。
因为Struts 1.x与Struts 2.x有较大区别,因此本文对两个版本的例子都进行了部署。
术语:
Struts:使用最为广泛的MVC框架。
Apusic:完全支持J2EE规范的商业应用服务器产品,最新版本V5.1可以提供对Java EE 5.0的完整实现。
%APUSIC_HOME%:Apusic安装目录
准备:
在http://archive.apache.org/dist/struts/binaries/struts-2.0.9-all.zip下载Struts V2.0.9的压缩包;
在http://archive.apache.org/dist/struts/binaries/struts-1.3.9-all.zip下载Struts V1.3.9的压缩包;
在http://java.sun.com/javase/downloads/index_jdk5.jsp下载JDK V1.5以上的版本并安装,确认JAVA_HOME正确指向装好的JDK目录;
在http://www.apusic.com/dist/apusicAS/v5.1/Apusic-5.1-OS-Independent.zip下载Apusic V5.1并解压;
Struts 2.x的部署过程:
1. 执行%APUSIC_HOME%/domains/mydomain/bin/startapusic.cmd,访问主页:http://localhost:6888/,确认Apusic已经成功安装;
2. 打开Struts V2.0.9的例子包,如果下载的是完整的Struts则在APP目录下;
3. 将struts2-blank-2.0.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts2-blank-2.0.9/访问一下,已经OK了。(好棒好简单。。。)
4. 将struts2-mailreader-2.0.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用
http://localhost:6888/struts2-mailreader-2.0.9/访问一下,已经OK了。(好棒好简单。。。)
5. 将struts2-showcase-2.0.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),不会那么没创意吧,又成功啦?自动部署完成,但是后台部署过程报错:
javax.servlet.ServletException: java.lang.IllegalStateException: Application was not properly initialized at startup, co
uld not find Factory: javax.faces.context.FacesContextFactory
这个错误是跟JSF有关的,原因现在搞不懂,不管他。先用http://localhost:6888/struts2-showcase-2.0.9/访问一下,好像没啥问题,进入主页一看例子提供了不少使用Struts的方法很值得学习,一一点过都很正常,而且还看到了JavaServer Faces,看样子Struts也在追赶潮流啦,点进去→再点List available Employees (http://localhost:6888/struts2-showcase-2.0.9/jsf/employee/list.action)出错啦,去Apusic的后台看看。又有新的错误信息:
Unable to initialize jsf interceptors probably due missing JSF implementation libraries,说我没有提供实现库。不可能呀,Apusic已经提供了Operamasks的JSF实现呀,不过Struts肯定不会用Operamasks的,那是不是自带的JSF实现呢?打开WAR包进入WEB-INF/lib发现里面还有MyFaces的实现库。估计是两种JSF实现冲突了。看样子要动点脑筋了!
整个简单的办法,把Apusic的所有与JSF相关的JAR包都删除掉,让Apusic V5.1变成一个纯的WEB容器。与JSF相关的有三个文件:
● jsf-api.jar:%APUSIC_HOME%/common
● Operamasks-impl.jar:%APUSIC_HOME%/lib
● Operamasks-third-party.jar:%APUSIC_HOME%/lib/ext
停止应用服务器,把他们都删除掉,再重新启动后访问struts2-showcase-2.0.9.war的JSF例子,这下就行了。
7. 将struts2-portlet-2.0.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署也报错:
Could not load class org.apache.struts2.portlet.interceptor.PortletPreferencesInterceptor.看样子还需要加入Portal服务器才行,在网上搜了一下没有部署介绍,而且也说需要先部署好PortalServer支持,难度不小。尝试下了Pluto但是部署了没起作用,后来下了2.1.2版本,结果那个例子更成问题,只好先放弃。等到熟悉了Portal再回头补课。
Struts 1.x的部署过程:
1. 执行%APUSIC_HOME%/domains/mydomain/bin/startapusic.cmd,访问主页:http://localhost:6888/,确认Apusic已经成功安装;
2. 打开Struts V1.3.9的例子包,如果下载的是完整的Struts则在apps目录下;
3. 将struts-blank-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-blank-1.3.9/访问一下,已经OK了;
4. 将struts-cookbook-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-cookbook-1.3.9/访问一下,已经OK了,访问里面的内容也可以正确执行;
5. 将struts-el-example-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-el-example-1.3.9/访问一下,已经OK了,访问里面的内容也可以正确执行;
6. 将struts-examples-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-examples-1.3.9/访问一下,已经OK了,访问里面的内容也可以正确执行(这个例子其实是上面三个例子的集成);
7. 下面的两个例子都与myfaces有关,为了防止JSF实现冲突,先停止服务器,将Apusic的JSF实现删除(参考Struts 2.x中的6);
8. 将struts-faces-example1-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-faces-example1-1.3.9/访问一下,已经OK了,访问里面的内容也可以正确执行;
9. 将struts-faces-example2-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-faces-example2-1.3.9/访问一下,已经OK了,访问里面的内容也可以正确执行;
10. 将struts-mailreader-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-mailreader-1.3.9/访问一下,已经OK了(注意:我下载的这个例子图片无法正常显示,打开应用发现根本没有把图片文件打入WAR包),访问里面的内容也可以正确执行;
11. 将struts-scripting-mailreader-1.3.9.war拖入%APUSIC_HOME%/domains/mydomain/applications目录下(稍等一下),自动部署完成,用http://localhost:6888/struts-scripting-mailreader-1.3.9/访问一下,已经OK了(注意:我下载的这个例子图片无法正常显示,打开应用发现根本没有把图片文件打入WAR包),访问里面的内容也可以正确执行。
备注:
1. 删除了Operamasks的实现包,如果别的应用仍然想用Operamasks,最好的办法就是直接把这三个包加入到应用的WEB-INF/lib下面就可以了。