Structs2.0.11.1升级到2.5.30
pom.xml修改
log4j
<!-- log -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.7</version>
</dependency>
spring
这里只列出了一部分的spring的jar包,我用的是4.3.26.RELEASE版本的,和structs里的spring的jar包一致
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.26.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.26.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.26.RELEASE</version>
</dependency>
structs
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.30</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.30</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.30</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.30</version>
<exclusions>
<exclusion>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
ognl
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.1.29</version>
<exclusions>
<exclusion>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
去掉xwork的jar包
如下,去掉:
<dependency>
<groupId>com.opensymphony</groupId>
<artifactId>xwork</artifactId>
<version>2.0.4</version>
</dependency>
去掉
这个jar包的功能,被struts2-json-plugin替换掉了
如下,去掉:
<dependency>
<groupId>com.googlecode</groupId>
<artifactId>jsonplugin</artifactId>
<version>0.31</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jsonplugin-0.31.jar</systemPath>
</dependency>
这个包是用来:访问action返回json格式的
注意:如果你和我一样,jsonplugin-0.31.jar这个jar包也是从项目lib中获取的,记得删除lib,否则项目还是有可能调用到这个jar包,产生如下报错:
java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/String;)Ljava/lang /Object;
代码中的JSON导入
json的jar包替换后,JSON的import修改:
修改前:
import com.googlecode.jsonplugin.annotations.JSON;
修改后:
import org.apache.struts2.json.annotations.JSON;
spring和structs的xml
spring
约束修改
修改前:
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
修改后:
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
xml修改
可以看到local报红,改为bean即可(不报红就不用改,和spring版本有关)
修改前:
<ref local="nativeJdbcExtractor"/>
修改后:
<ref bean="nativeJdbcExtractor"/>
structs
约束修改
修改前:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
修改后:
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"
xml修改
-
structs.xml文件配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <include file="struts-default.xml"/> <include file="config/struts/hzgoveg_struts.xml" /> <!-- 开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 指定需要Struts处理的请求后缀,默认是action,如需指定多个后缀,以逗号隔开 --> <constant name="struts.action.extension" value="action"/> </struts>
hzgoveg_struts.xml是我自己的文件,不用管,主要是constant这两句
-
给每个package加上strict-method-invocation=“false”
修改前:<struts> <package name="api" extends="json-default" namespace="/api">
修改后:
<struts> <package name="api" extends="json-default" namespace="/api" strict-method-invocation="false">
-
<s:iterator中的id会报红,将id改为var
修改前:<s:iterator id="trunk" status="st_trunk">
修改后:
<s:iterator var="trunk" status="st_trunk">
-
<s:property中的escape会报红,将escape改为escapeHtml
修改前:<s:property value="url" escape="false"/>
修改后:
<s:property value="url" escapeHtml="false"/>
-
还有<s:set name= 改为:<s:set var= 等等,自己去网上搜一下
web.xml修改
删除ActionContextCleanUp、FilterDispatcher的配置,添加如下配置:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果项目中原本有:StrutsPrepareAndExecuteFilter,查看是否是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter(注意,不能有ng!!!)
如果你的struct的xml文件中很多报红
比如:
解决方法:
Project Structure—>Modules—>Web右键Add—>Structs 2
添加成功后,点击加号:
选中所有的xml文件
点击Apply后退出,会发现报红少了很多,但是还是依然存在一些报红,不影响项目运行,不用管
可能存在result下的下划线,不影响项目运行,也不用管:
上传文件
如果有使用:File[] _files = ((MultiPartRequestWrapper) request).getFiles(_field);
报红,可以参考这个博主的这篇文章:StrutsUploadedFile转File
https://bbs.youkuaiyun.com/topics/392283493