Struts2升级出现的问题

摘要:
出于我们都理解的原因,涉及struts 2的项目需要将struts 2包升级到2.3.15.1。升级方法和常见问题解决方法总结如下。1、 基本升级操作1.获取Struts 2.3.15.1 jar包,从Struts官网下载Struts 2.3.15.1发布包:http://apache.fayea.com/apache-mirror//struts/library/struts-2.3.15.1-lib

由于大家都懂的原因,涉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.1jar包;

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.xmlActionContextCleanUp过滤器:

<!--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 下午035811 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':''}" name="prpCmainProp.quakeFlag"value="${prpCmainProp.quakeFlag}"

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

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

<rtexprvalue>true</rtexprvalue>

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

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

原因:struts2.3.15org.apache.struts2.dispatcher.Dispatcherprepare方法中新增了对于异步调用情况字符集强制转换为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,官方说明参见http://struts.apache.org/release/2.3.x/docs/textfield.html

解决办法:批量替换标签中的requiredrequiredLabel

7. OGNL表达式问题解决

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

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

三、其它注意事项

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

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

【转】http://blog.csdn.net/amosryan/article/details/10350481

免责声明:文章转载自《Struts2升级出现的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt封装QTcpServer参考资料--QT4中构建多线程的服务器unity3D 对话系统的制作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Apache 负载均衡 端口转发 配置

转载自:https://blog.csdn.net/snihcel/article/details/38844323 [端口转发配置] 通过http_proxy做tomcat的端口转发: 描述:将远程服务器映射到本地服务器的URL空间 语法:ProxyPass [路径] !|url [键=值 键=值 ...]] [nocanon] 上下文: server...

apache+php+mysql配置

---------------------------------------------------- ★软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>httpd-2.4.18-win64-VC14.zip下载地址:http://www.apachelounge.com/download/ 2>php-5.6.16...

linux文件属性软硬链接知识

链接的概念 在linux系统中,链接可分为两种:一种为硬链接,另一种为软链接或符号链接。在默认不带参数的情况下,执行ln命令创建的链接是硬链接。 如果使用ln  -s创建链接则为软链接,前面文件类型为l(字母L)的是软链接。 硬链接:ln  源文件  目标文件 软链接:ln  -s  源文件  目标文件(目标文件不能事先存在) 1.硬链接 硬链接是指通过索...

org.apache.commons.httpclient工具类

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.ap...

java web使用log4j无法写入到日志文件

项目环境 1.项目类型:java web 2.web容器:tomcat 3.框架:spring 4.调用代码:spring配置的定时任务,任务执行类用@Component注入(开始还以为是这里出了问题 ̄□ ̄||) 主要现象 1.启动tomcat后,发现日志无法写入 2.删除日志文件再次启动,日志文件没有新建 3.单独在类中执行main方法里的log操作可以...

如何在PHP5中通过PDO连接SQLite3数据库

  通过PHP跟PDO配置SQLite数据库是一件很繁琐的事情,经过一下午的研究,终于理清了里面的思路。现在拿出来跟大家共享。初学,错误请指出。 首先我们先选择要使用的web server 软件,由于从兼容性跟性能方面的需求,我选择了目前来说最新版的apache。 第二步,我们要使用目前最新版本的PHP zip package .这里提示大家一下,经过我痛...