Struts2版本2.0升2.3.37
项目环境: jdk1.6 + tomcat6 + orcale
框架: Struts2+Spring+ibatis
需求:Struts2 版本是2.0版 升级到2.3.37版本
第一步:下载struts-2.3.37.zip 全量版本
第二步:根据自己的需要替换自己需要的jar 包
这个过程有点耗时,因为这个项目是临时接手,不太敢大开大合的动并且项目本身依赖的jar 不是太多 ,因此采用的是步步为营的策略
先从替换struts-core-XXX.jar 核心包开始 然后根据编译报错一步步替换
这个工作已经做完,下面是我整理的最小依赖,大家可以直接用把
commons-lang3-3.2.jar
commons-logging-1.1.3.jar
freemarker-2.3.28.jar
javassist-3.11.0.GA.jar
ognl-3.0.21.jar
struts2-core-2.3.37.jar
struts2-spring-plugin-2.3.37.jar
xwork-core-2.3.37.jar
第三步:程序和配置文件的调整
1.struts2.xml 相关的
所有struts.xml文件的头标题
2.java文件 部分对依赖的jar有引用
例如:commons-lang3-3.2.jar包的引用上
旧的:org.apache.commons.lang.xxxx
新包:org.apache.commons.lang3.xxx
这一类的异常 需要手动调整了
3.web.xml中
这是2.3以后对过滤器的优化
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
修改为 filter-class 变动 ,filter-name 不变
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
4.特别注意
报下面异常时:
a.struts2 过滤器无法启动
严重: Exception starting filter struts2
原因有很多 基本上都是配置上的原因
我的就是有相同的jar包,但是版本号不一样。去lib下看是否存在相同的jar包,找到就删掉一个jar包,重新启动tomcat。
b.struts-tags.tld 标签库 问题 jsp上标签报错
According to TLD or attribute directive in tag file, attribute disabled does not accept any expressions
或者
test does not support runtime expression
原因是:Struts 2从 version 2.0.11开始已经不支持struts tag与JSP EL表达式混合使用了(不在struts tag里使用EL还是可以的),而只支持OGNL
因此像jsp 界面中各类混用的形式不能用了
<s:if test="${flag == 1}"> </s:if>
或者
<s:set name="name" value="<%= "'" + request.getParameter("name") + "'" %>" />
解决方法:
所有的地方都要改
${} 改成 #{} 或者%{} 用# 比较好点
例如:
<s:textfield name="%{cName}" id="%{cName}"/>
或者
<s:if test="#{flag == 1}"> </s:if>