Structs2.0.11.1升级到2.5.30

本文档详细介绍了将Structs从2.0.11.1升级到2.5.30的过程中,涉及的pom.xml配置变化,包括Log4j的升级、Spring依赖的更新、Structs插件的修改以及相关XML配置的调整。同时,还解决了升级过程中可能出现的报错和问题,例如JSON插件的替换、OGNL的导入变更、Struts XML约束更新等。此外,还提到了web.xml中过滤器的更新,并提供了处理遗留报红问题的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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修改
  1. 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这两句

  2. 给每个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">
    
  3. <s:iterator中的id会报红,将id改为var
    修改前:

    <s:iterator id="trunk" status="st_trunk">
    

    修改后:

    <s:iterator var="trunk" status="st_trunk">
    
  4. <s:property中的escape会报红,将escape改为escapeHtml
    修改前:

    <s:property value="url" escape="false"/>
    

    修改后:

    <s:property value="url" escapeHtml="false"/>
    
  5. 还有<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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值