写在之前:
升级到2.5以上版本需要注意:jdk版本必须是1.7或者以上
开始升级
一: 准备jar包,可以直接去官网下,或者maven仓库下,都可以
二:替换jar包(以下为替换后,每个项目不同,或多或少的会有偏差)
jar包说明:
1、struts2 2.5版本struts2-core包包含了xwork-core,所以此处删除了2.3版本中的xwork-core
2、log4j升级后需要重新新增配置文件log4j2.xml(见文末)
3、注意cglib的版本2.1和2.2会报不同的错
当出现:org.objectweb.asm.ClassWriter.<init>(I)V和org.objectweb.asm.ClassWriter.<init>(Z)V
解决办法:
出现<init>(Z)V将cglib.jar 由2.1版本 改为 2.2
出现<init>(I)V将cglib.jar 由2.2版本 改为 2.1.
4、当出现ClassNotFoundException: org.apache.struts2.dispatcher.ChartResult,你就知道struts2-jfreechart-plugin.jar存在的重要性了
三:修改web.xml,去除.ng(因为2.5的目录变了)
将<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
修改后为 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
三、修改struts.xml及相关struts文件
1、头部信息改为:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
2、如果出现动态方法绑定失败
还需要加配置 <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
3、为提高安全性,2.5还需要在struts.xml中配置
<global-allowed-methods>regex:.*</global-allowed-methods>
四、修改jsp标签(dtd)
1、将<s:set name 改为<s:set var
2、<s:property escape改为<s:property escapeHtml
以上基本就是我遇到的坑了,都已经解决。
附件:简单的log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<configuration status="warn">
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<RollingFile name="RollingFileInfo" fileName="../logs/guanli/info.log"
filePattern="../logs/guanli/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="../logs/guanli/warn.log"
filePattern="../logs/guanli/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="WARN"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="../logs/guanli/error.log"
filePattern="../logs/guanli/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="ERROR"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<logger name = "org.springframework" level = "INFO" ></logger>
<logger name = "com.opensymphony" level = "INFO"></logger>
<logger name="org.apache.struts2" level="INFO"></logger>
<root level = "all">
<appender-ref ref = "Console"/>
<appender-ref ref = "RollingFileInfo"/>
<appender-ref ref = "RollingFileWarn"/>
<appender-ref ref = "RollingFileError"/>
</root>
</loggers>
</configuration>