Struts2版本升级到struts2 2.3.15.1操作说明
Struts2的官网公布了一个远程命令执行漏洞,官方强烈建议升级到2.3.15.1或者以上版本,该版本包含校正过的struts2核心库。
我们之前开发项目主要采用的Struts2版本是2.2.1,本文介绍下Struts2从2.2.1升级到2.3.15.1的过程。
首先自Struts官方网站下载struts-2.3.15.1-all.zip,里面包含所需要的jar。
删除项目中如下jar文件:

将struts-2.3.15.1-all.zip中的如下jar文件加到项目中:


升级jar之后,测试项目,发现2个问题,第一个问题,控制台会经常输出如下信息:
***********************************************************************
*
WARNING!!!
*
*
*
* >>> ActionContextCleanUp<<<
is deprecated! Please use the new filters! *
*
*
*
This can be a source of unpredictable
problems! *
*
*
*
Please refer to the docs for more
details!
*
*
http://struts.apache.org/2.x/docs/webxml.html
*
*
*
***********************************************************************
意思是说ActionContextCleanUp过期,不建议使用,查看了
http://struts.apache.org/2.x/docs/webxml.html,没有看出所以然,后来在论坛中有人说Struts的过滤器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter包含了ActionContextCleanUp功能,所以注释掉web.XML文件中的ActionContextCleanUp过滤器即可。
注意如果struts2过滤器不是
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter的话,要修改成这个。
当然上述问题是个警告,如果说警告不予理睬的话,第二个问题是控制台抛出错误,这个就要解决了。
抛出错误的情况是:代码在执行某些数据保存的时候,会抛出异常,但是数据依然能保存,从前台功能上看没有任何问题。
后台异常堆栈信息:
16-04-01
02:33:49.017 ERROR [CommonsLogger.java:38]
Developer Notification (set struts.devMode to false to disable this
message):
Unexpected
Exception caught setting 'formName' on 'class net.jqsoft.XXXX.manager.XXXX.QuestionAnswer:
Error setting expression 'formName' with value ['dataListForm', ]
Error
setting expression 'formName' with value ['dataListForm', ] - [unknown
location]
at
com.opensymphony.xwork2.ognl.OgnlValueStack.handleRuntimeException(OgnlValueStack.java:197)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:148)
at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)
at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Parameters
异常信息说的很清楚,只要关闭struts.devMode(开发模式)就不会抛出这些信息,尝试设置struts.devMode=false,果然不再抛出异常。
但是还是不放心,想知道到底为什么?参考论坛上的说法,Action中的所有属性都要加上seter、geter方法,检查下,都加上了,还是不行。
然后在action中添加private
string formName,并生成seter、geter,测试发现抛出下面的问题:
Unexpected Exception caught setting ' showNum ' on .........
然后在action中添加private
string showNum,并生成seter、geter,依次下去,最终问题解决。
总结下,原来Struts2.3.15.1检查的比较严格,凡在前端界面form中所有的name=’xxx’,action中都要有对应的属性,哪怕action端不需要使用这个name,也要加上。
搞明白了,可以放心的把struts.devMode=false,或者把代码写的严谨点,不需要的<input name=’xxx’>不要写。
最后总结下升级过程:
1、
替换jar
2、
注释web.xml文件中的
<filter>
<filter-name>struts2CleanUpFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2CleanUpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、
修改struts.properties文件中的struts.devMode = false
Struts2版本升级到struts2 2.3.15.1操作说明的更多相关文章
- Struts2入门2 Struts2深入
Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- Struts2笔记02——Struts2 概述(转)
原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Struts2是基于MVC设计模式的一种流行.成熟的We ...
- Struts2学习一----------Struts2的工作原理及HelloWorld简单实现
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2工作原理 一个请求在Struts2框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2.这个请求 ...
- Struts2 Convention Plugin ( struts2 零配置 )
Struts2 Convention Plugin ( struts2 零配置 ) convention-plugin 可以用来实现 struts2 的零配置.零配置的意思并不是说没有配置,而是通过约 ...
- 1.Struts2简介和Struts2开发环境搭建
一.Struts2简介: 1.什么是Struts2? 著名的SSH三大框架分别为:表现层(Struts).业务逻辑层(Spring),持久化层(Hibernate). Struts2是在WebWork ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- Struts2框架(8)---Struts2的输入校验
Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
随机推荐
- n进制转化成十进制
一个字节是8位二进制. 我的天啊.我发现char特别厉害: char类型能够输入整形常量.不能超过-128~127. 只能是整数类型,且范围一般不能超出-128~127.超出会溢出的.
- 实现断点续传的FTP下载类(支持多线程多任务下载)
using System; using System.Collections.Generic; using System.Text; using System.Threading; using Sys ...
- Linux内核原子(1) - spinlock的实现
spinlock的数据结构spinlock_t定义在头文件linux/spinlock_types.h里面: typedef struct { raw_spinlock_t raw_lock; #if ...
- Node.js EventEmitter(事件队列)
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.read ...
- 判断整数是否能被n整除
(1)1与0的特性: 1是任何整数的约数,即对于任何整数a,总有1|a. 0是任何非零整数的倍数,a≠0,a为整数,则a|0. (2)若一个整数的末位是0.2.4.6或 ...
- BZOJ3000 Big Number
由Stirling公式: $$n! \approx \sqrt{2 \pi n} (\frac{n}{e})^n$$ 故:$$\begin{align} ans &= log_k n! + 1 ...
- F2工作流引擎这工作流引擎体系架构(二)
F2工作流体系架构概览图 为了能更好的了解F2工作流引擎的架构体系,花了些时间画了整个架构的体系图.F2工作流引擎遵循参考WFCM规范,目标是实现轻量级的工作流引擎,支持多种数据库及快速应用到任何基于 ...
- C#关于winforms窗体大小、边框、移动、动画等属性
1.窗体的边框设置为无: 2.把窗体高度调整为25,发现跑的时候总在40左右,这时需要改改属性, 把MinimumSize(0, 0)改成不为0的,最好改成和自己想要一样的大小, 最大高宽也应该这么调 ...
- c# DataGridView 的一些属性设置,序号,合并头
this.dataGridView1.DataSource = this.dISASTERBindingSource; this.dataGridView1.Locatio ...
- 在CentOS 6.7中安装NVIDIA GT730显卡驱动的手记
主机: Dell OptiPlex 390 MT (i5) 系列: 主机原配独显,型号未知,运转三年半,常有异响,关机之后过一阵再开机,可以解决.最近,风扇的声音实在不正常,重启也无解,判定它挂了.风 ...