转载网址:http://blog.csdn.net/amosryan/article/details/10350481

由于大家都懂的原因,涉struts2的项目需要将struts2相关包升级至2.3.15.1。今将升级方法和常见问题解决简单总结如下。

一、基本升级操作

1. 获取Struts2.3.15.1jar包

从Struts官网下载struts2.3.15.1发布包:

http://apache.fayea.com/apache-mirror//struts/library/struts-2.3.15.1-lib.zip

2.工程中的jar包替换

以下清单为示例,请根据工程实际情况参照替换成struts-2.3.15.1-lib.zip包中的版本:

原始版本(版本号为示例)

升级后版本

commons-lang-2.*.jar

commons-lang-2.4.jar

commons-lang3-3.1.jar (新增)

commons-logging-1.*.jar

commons-logging-1.1.3.jar

commons-fileupload-1.*.*.jar

commons-fileupload-1.3.jar

freemarker-2.3.*.jar

freemarker-2.3.19.jar

ognl-*.*.*.jar

ognl-3.0.6.jar

struts2-core-2.*.*.*.jar

struts2-core-2.3.15.1.jar

struts2-spring-plugin-2.*.*.*.jar

struts2-spring-plugin-2.3.15.1.jar

struts2-dojo-plugin-2. *.*.*.jar

struts2-dojo-plugin-2.3.15.1.jar

struts2-dwr-plugin-2. *.*.*.jar

struts2-dwr-plugin-2.3.15.1.jar

xwork-core-2.3.*.*.jar或者xwork-2.*.*.jar

xwork-core-2.3.15.1.jar

javassist-3.*.*.GA.jar

javassist-3.11.0.GA.jar

aspectjrt-1.5.2a.jar(见附件3.其它jar包)

aspectjweaver-1.5.2a.jar(见附件3.其它jar包)

(这三个文件若没有则需添加)

注1:工程中以struts2打头的jar包均需替换为2.3.15.1版本;

注2:除非表格中另有说明,则原始版本中若不存在相应jar包,则也不需要添加相应的2.3.15.1版jar包;

3.web.xml可能的修改

注意:如文件中原本已是调整后的配置,则请忽略本部分内容。

3.1修改struts2dispatcher过滤器

原始内容:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

修改后内容:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

3.2去掉或注掉ActionContextCleanUp过滤器

请去掉或注掉web.xml中ActionContextCleanUp过滤器:

<!--filter>

<filter-name>struts-cleanup</filter-name>

<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

</filter-->

<!--filter-mapping>

<filter-name>struts-cleanup</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping-->

注意:不修改可能导致第二节中问题5。

4.所有*validators.xml可能的修改

注意:如文件中原本已是调整后的配置,则请忽略本部分内容。

4.1标签头的调整

原始内容:

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator Config 1.0//EN"

"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

修改后内容:

<!DOCTYPEvalidatorsPUBLIC

"-//ApacheStruts//XWork Validator Config 1.0//EN"

"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">

注意:不修改可能导致第二节中问题2。

二、常见问题及解决方案

1. NoClassDefFoundError:com/opensymphony/xwork2/util/TextUtils问题解决

现象:启动报出以下错误

<2013-7-30 下午03时58分11秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext@13341578[app:piccallweb module:piccallweb path:/piccallweb spec-version:2.5]] Servlet failed with Exception

java.lang.NoClassDefFoundError:com/opensymphony/xwork2/util/TextUtils 

at com.googlecode.jsonplugin.SerializationParams.<init>(SerializationParams.java:38)

at com.googlecode.jsonplugin.JSONResult.writeToResponse(JSONResult.java:194)

at com.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:184)

at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)

Truncated. see log file for complete stacktrace

>

原因:xwork-core-2.3.15.1.jar中由于升级现已去除com.opensymphony.xwork2.util.TextUtils。

解决方案:

1.替换jar包

原始版本

修改后版本

jsonplugin-0.**.jar

json-lib-1.1-jdk13.jar

struts2-json-plugin-2.3.15.1.jar

json-lib-2.3-jdk15.jar

struts2-junit-plugin--2.3.15.1.jar

2.所有*struts*.xml配置的extends="struts-default"改成extends="json-default"

2.启动报 com.opensymphony.xwork2.config.ConfigurationException问题解决

现象:启动报出以下错误(仅截取了最上面和最下面的异常信息)

com.opensymphony.xwork2.config.ConfigurationException:Caught Exception while registering Interceptor classorg.apache.struts2.interceptor.validation.AnnotationValidationInterceptor

atcom.opensymphony.xwork2.ObjectFactory.buildInterceptor(ObjectFactory.java:214) ~[xwork-core-2.3.15.1.jar:2.3.15.1]

……

Caused by:java.net.UnknownHostException:www.opensymphony.com 

atjava.net.InetAddress.getAllByName0(InetAddress.java:1157) ~[na:1.6.0_29]

atjava.net.InetAddress.getAllByName(InetAddress.java:1083) ~[na:1.6.0_29]

atjava.net.InetAddress.getAllByName(InetAddress.java:1019) ~[na:1.6.0_29]

原因:由于xwork升级,validator.xml的文件头dtd配置需要做相应更新。

解决办法:参见第四节中第(1)部分内容。

3. struts2的标签报错问题解决

现象:显示页面报错:struts2的标签使用出现问题,标签中不支持表达式,如:EL表达式

 This attribute does not supportrequest time values.

<s:select list="#{'':'','0':'否','1':'是'}"id="prpCmainProp.quakeFlag" name="prpCmainProp.quakeFlag"value="${prpCmainProp.quakeFlag}"

原因:struts2.3.15中使用s标签,默认不支持表达式。

解决办法:修改struts-tags.tld中所有的rtexprvalue标签属性为true。

<rtexprvalue>true</rtexprvalue>

4. ajax异步调用中文参数后台变乱码问题解决

现象:前台通过POST往后台传值时中文字符为乱码

原因:struts2.3.15中org.apache.struts2.dispatcher.Dispatcher类prepare方法中新增了对于异步调用情况字符集强制转换为UTF-8(见下方代码),因此如果工程中jsp指定的字符集不是UTF-8,则中文传至后台会变成乱码。

 if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {

     encoding = "UTF-8";

}

解决办法:改写org.apache.struts2.dispatcher.Dispatcher类注掉上面三行内容

后直接放在工程源码中

5. ActionContextCleanUp is deprecatedWARNING问题解决

现象:系统启动报“>>>ActionContextCleanUp<<< is deprecated! Pleaseuse the new filters!”WARNING

原因:从Struts2.1.3起废弃了ActionContextCleanUp过滤器,其相关功能在StrutsPrepareAndExecuteFilter实现。

解决办法:参见第三节中第(2)部分内容。

6. struts2TextFieldTagSelectTag等标签required属性报错问题解决

现象:JSP报“contains no methods named setRequired”错误

原因:2.3.X版本中required属性已替换为requiredLabel 解决办法:批量替换标签中的required为requiredLabel。

7. OGNL表达式问题解决

现象:部分系统中对com.opensymphony.xwork2.util.OgnlUtils.java和ognl.OgnlRuntime.java有单独覆盖,升级后存在不兼容现象

解决办法:新的Ognl中已经修复了历史OgnlUtils中存在的问题,所以删除系统中OgnlUtils.java即可,ognl.OgnlRuntime.java这个文件按照新版本Ognl进行覆盖修改

三、其它注意事项

为保证更新成功,请注意删除工程在中间件中产生的临时文件,以weblogic为例,WebLogicDomain下工程的缓存文件所在目录可能包括但不限于以下位置:

    • [domain所在目录]\servers\[server名]\tmp
    • weblogic.xml中配置的working-dir目录

转载:Struts2.3.15.1升级总结的更多相关文章

  1. Struts2漏洞拉响网站安全红色警报以及把Struts2更新为最新版本Struts2.3.15.1步骤

    360网站安全检测平台今日发布红色警报称,广泛应用在国内大型网站系统的Struts2框架正在遭到黑客猛烈攻击.利用Struts2“命令执行漏洞”,黑客可轻易获得网站服务器ROOT权限.执行任意命令,从 ...

  2. 将Ubuntu 15.10升级到Ubuntu 16.04

    Ubuntu 16.04 LTS 代号为 Xenial Xerus,其最终版将于 2016 年 4 月 21 日正式发布,Ubuntu16.04 将是非常受欢迎的开源操作系统 Ubuntu 的第 6 ...

  3. struts2.3.15.3中动态方法调用默认是关闭的

    初学ssh,用的struts2.3.15.3,使用了如下表单: <form action="/spring3/index/login.action" method=" ...

  4. 由 15.01升级到 16.04之后,无法启动mysql

    参考 16.04 Distribution Upgrade - cannot start MySQL server,然后找到了16.04 upgrade broke mysql-server 我由 1 ...

  5. iOS 15 Beta升级卡死在更新进程,无法启动怎么办?

    2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...

  6. 转载——Struts2中的constant详解

    http://bhw1015.iteye.com/blog/1258441 通过对这些属性的配置,可以改变Struts 2 框架的一些默认行为,这些配置可以在struts.xml文件中完成,也可以在s ...

  7. [转载]Struts2.1.6+Spring2.5.6+Hibernate3.3.

    原文地址:Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(转载大象)作者:沉睡森林  在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大 ...

  8. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  9. 【转载】STM32 IAP 在线升级详解

      (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“STM32 IAP+APP ==>双剑合一”链接稍后 ...

随机推荐

  1. Gold Balanced Lineup

    #include<cstdio> #include<cstring> #include<cmath> #include <cstdlib> #defin ...

  2. 2014年基于Raspberry Pi的5大项目

    2014年基于Raspberry Pi的5大项目   Raspberry Pi(即树莓派)是一款基于Linux系统(Debian.ArchLinux)的单板机计算机,它只有一张信用卡大小,可用于电子表 ...

  3. 【转】第 02 天:在 Windows 平台必裝的三套 Git 工具

    原文网址:https://github.com/doggy8088/Learn-Git-in-30-days/blob/master/docs/02%20%E5%9C%A8%20Windows%20% ...

  4. 2015第30周三Spring常用工具类

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  5. 【二分】【高精度】Vijos P1472 教主的集合序列

    题目链接: https://vijos.org/p/1472 题目大意: S1={1,2,3…n}.当i>1时,Si为集合Si-1中任意两个不相同数之和的集合. 将每个集合中所有元素取出,集合S ...

  6. HDOJ 2092 整数解(2次方程整数解公式)

    Problem Description 有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程. ...

  7. [Design Pattern] Observer Pattern 简单案例

    Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer ...

  8. 针对苹果最新审核要求:应用兼容IPv6

    在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...

  9. 修改上一篇文章的node.js代码,支持默认页及支持中文

    服务端 app.js var app = require('http').createServer(handler) var io = require('socket.io')(app); var f ...

  10. java的 IO流之缓冲流(转载)

    java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装.当对文件或其他目标频繁读写或操作效率低,效能差.这时使用缓冲流能够更高效的读写信息.因为缓冲流先将数据缓存起来 ...