在同一应用中让struts1与struts2和平共处
2012-07-30 09:34 idkkk 阅读(897) 评论(2) 编辑 收藏 举报1 前言
本文档的目的是为了让CLAP同时支持struts1以及struts2,兼容两者在同一个app中共存,运行前端既可以使用struts1进行开发,又可以使用struts2进行开发。由于现有的大部分项目采用struts2进行开发,为了降低迁移成本以及提升CLAP平台的适用范围,故此文档的目的也源于此:让CLAP(内置struts1)支持struts2。Struts2源自webwork2,struts2与struts1不是师出同门,两者兼容在理论上应该完全没有问题。
集成主要包含两大部分:配置、jar包。
2 集成步骤
2.1 配置
>> web.xml配置:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
核心是保持struts1与struts2的请求处理分离,比如上面的将所有请求后缀为action的交由struts2处理,而所有请求后缀为do的交由struts1处理,这部分可以自行规划来进行相应配置。
>> struts.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.reload" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.configuration.xml.reload" value="false" /> <constant name="struts.custom.i18n.resources" value="globalMessages" /> <constant name="struts.action.extension" value="action,," /> <constant name="struts.enable.SlashesInActionNames" value="true" /> <package name="actions" namespace="/" extends="struts-default"> <action name="*/*" class="clap.sample.struts2.action.{1}Action" method="{2}"> <result>/WEB-INF/views/{1}/{2}.jsp</result> <result name="list">/index.jsp</result> </action> </package> </struts>
struts2配置只供参考(示例中集成的是struts2.3.4),可以根据实际项目使用struts2的方式来进行规范及约束,比如加入Convention插件解决配置文件问题。
2.2 jar包
由于jar包升级不同struts2版本,可能会稍有不同,请稍微注意一下,以下以struts2.3.4来进行集成过程描述:
>> 拷贝struts2.3.4-all.zip包里的struts2-blank.war里的lib目录到项目的lib目录下;
>> 删除所有同一类包的低版本jar包(比如common-lang);
>> 修正jar包更新后导致的java代码变更;
>> 将JSTL 1.2降为JSTL 1.1;