设为首页 收藏本站
查看: 826|回复: 0

[经验分享] Struts2升级出现的问题

[复制链接]

尚未签到

发表于 2017-2-19 06:20:55 | 显示全部楼层 |阅读模式
  由于大家都懂的原因,涉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,官方说明参见http://struts.apache.org/release/2.3.x/docs/textfield.html。
  解决办法:批量替换标签中的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目录
  【转】http://blog.csdn.net/amosryan/article/details/10350481

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-343980-1-1.html 上篇帖子: [Java]JAVA获取相对路径问题的解决 下篇帖子: Java三大主流框架概述(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表