1、背景
项目使用jdk1.7、tomcat7,在升级struts2.5.30版本中jar包出现不少问题
2、升级步骤
2.1、删除项目中旧jar包
其中xwork-2.0.5.jar被整合进struts2-core中
2.2、替换jar包
2.3、更改web.xml文件
修改路径:tomcat\webapps\ceims\WEB-INF
原先的路径为<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
修改为 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
2.4、修改struts.xml文件
修改路径:Tomcat\webapps\ceims\WEB-INF\classes
2.4.1、原头文件如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
将2.0修改成2.5即可
2.4.2、struts2从2.5版本开始,为了提升安全性,默认开启了严格的方法调用
如果要使用通配符*,必须在package中设置 strict-method-invocation="false",修改如下
<package name="" namespace="/" extends="json-default" strict-method-invocation="false"><!-- 启用通配符 -->
<global-results>
<result name="" type="json">
<param name=""> </param>
</result>
</global-results>
<action name="" class="" method=""> </action>
</package>
2.4.3、新增constant配置
<!--action设置动态访问-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<!--该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理-->
<constant name="struts.action.extension" value="action"/>
2.5 、新增log4j2.xml文件
保存路径:Tomcat\webapps\ceims\WEB-INF\classes
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!--全局参数-->
<Properties>
<!-- <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</Property> -->
<Property name="pattern">%d %p [%c] - %m%n</Property>
<Property name="logDir">../logs</Property>
</Properties>
<Loggers>
<Root level="INFO">
<AppenderRef ref="console"/>
<AppenderRef ref="rolling_file"/>
</Root>
</Loggers>
<Appenders>
<!-- 定义输出到控制台 -->
<Console name="console" target="SYSTEM_OUT" follow="true">
<!--控制台只输出level及以上级别的信息-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>${pattern}</Pattern>
</PatternLayout>
</Console>
<!-- 同一来源的Appender可以定义多个RollingFile,定义按天存储日志 -->
<RollingFile name="rolling_file"
fileName="${logDir}/ceims.log"
filePattern="${logDir}/ceims_%d{yyyy-MM-dd}.log">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>${pattern}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<!-- 日志保留策略,配置只保留七天
<DefaultRolloverStrategy>
<Delete basePath="${logDir}/" maxDepth="1">
<IfFileName glob="dust-server_*.log" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy> -->
</RollingFile>
</Appenders>
</Configuration>
3、遇到的问题
报错
java.lang.NoSuchMethodError: org.apache.commons.lang3.text.StrSubstitutor.setValueDelimit
解决方法:删除掉冲突的artemis-http-client-1.0.1-SNAPSHOT.jar