转载网址: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. poj 1066 Treasure Hunt

    http://poj.org/problem?id=1066 #include <cstdio> #include <cstring> #include <cmath&g ...

  2. 替代 yunio , 推荐一个国外的云存储(同步盘) wuala(这个网站也挂了)——功能评测非常全面

    替代 yunio , 推荐一个国外的云存储(同步盘) wuala 话说自从云诺开始收费后,我的文件便再没同步或备份过,前天没事便找了一下,发现一个国外的网盘,注册送 5 G 空间(对我来说同步日常文件 ...

  3. Delphi实现AnsiString与WideString的转换函数 转

    Delphi实现AnsiString与WideString的转换函数 分类: Delphi2013-01-26 16:23 460人阅读 评论(0) 收藏 举报 [delphi] view plain ...

  4. Xamarin Crack

    Inspired by http://www.cnblogs.com/portal/p/4666252.html#undefined To 'crack' VS Xamarin, take VS201 ...

  5. HDOJ(HDU) 2103 Family planning(需要注意范围)

    Problem Description As far as we known,there are so many people in this world,expecially in china.Bu ...

  6. .net 安装remoting服务

    程序->vs2008->vs tools->vs2008 命令提示 D:\QidianWorkShop\Develop\Source\Services\Snda.Qidian.Hon ...

  7. Linux下遍历目录及文件,更改权限

    Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...

  8. HBase技术介绍

    HBase简介 HBase - Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HB ...

  9. linux内核--中断处理程序

    一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码.中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断 ...

  10. html表格合并(行,一排)

    <table> <tr> <td colspan="2">失败的例子:</td> </tr> {% for ip , j ...