Apache Struts2 2.3.15升级2.5.30踩坑总结
-
升级内容
- 程序Struts2 2.5.30升级适配
-
版本要求
-
Apache Struts 框架的 2.5.x 系列最低要求以下规范版本:
Tomcat7、Servlet API 2.4、JSP API 2.0 和 Java 7
-
-
升级jar可参考官网,根据项目中用的jar包进行升级替换
https://struts.apache.org/download.cgi#struts-ga
注意:xwork-core*.jar包直接删除,struts2-core-2.5.30.jar中已包含xwork-core的内容
-
升级操作流程:
修改web.xml、struts.xml,替换新版本依赖jar包,使用新版本依赖jar重新编译action包下相关struts代码,上传服务器进行替换
- web.xml修改内容
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
struts.xml修改内容
- 修改头部内容,版本号改为2.5
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
- 增加访问权限配置regex:.*
<!--global-allowed-methods标签必须放置在global-results后面,否则启动会报错 --> <package name="default" extends="json-default" strict-method-invocation="false"> <global-allowed-methods>regex:.*</global-allowed-methods> </package>
-
jar包替换
根据项目中实际用到的jar进行版本升级,升级原则遵守,用到即升级,没用到不管,本项目Spring相关jar包没有升级,具体jar可参考Struts官网链接进行比对。
https://struts.apache.org/download.cgi#struts-ga
-
struts代码
Map parameterMap = mappingConfig.getParams(); invocation.getInvocationContext().setParameters(new HashMap(parameterMap)) 修改为: HttpParameters parameters = HttpParameters.create(mappingConfig.getParams()).build(); invocation.getInvocationContext().setParameters(parameters) 根据替换struts2 2.5.30后API变动进行修改,action包下相关代码无需改动,但需要jar包替换升级后,重新编译action相关代码,服务器上进行替换,启动程序。
如遇到如下问题:
(1)convention.annotation.Result.name()(Found data of type calss java.lang.String[index]) asm相关jar包从3.3.1升级至7.3.1后,可能是没有重新编译action相关代码导致。 (2)jar包缺失类问题: 建议jar升级进行追一替换,如使用rm -f asm*这种语法,jar包多加少加都可能会导致项目报错,细心逐一替换可避免很多问题。 (3)升级参考文档: 登录官网:https://struts.apache.org/ 查阅版本相关修改信息比网上乱七八糟博客更有用,官方文档更具有参考意义。