关于struts2升级2.5版本的详细过程,及容易踩的坑

关于struts2升级2.5版本的详细过程,及容易踩的坑

因为老版本的struts2被爆出存在安全问题,所以公司以前的几个老项目要求将所有的strut2升级到最新版,目前我看到官网的最新版本是2.5.2,因为这些老项目没有使用Maven,所以在升级的过程中可以说是踩了不少坑的。这个升级成功了,下一个项目又会出现些奇怪的问题,所以,我把升级的完整过程给大家列出来,希望能够帮助到大家,如果觉得有用的话,欢迎留言,转载请注明出处!

好!话不多说,进入正题

第一步:首先从struts 官网下载最新的struts 依赖包

https://struts.apache.org/

在这里插入图片描述
注意: 请下载完整依赖,不要下mini版的,里面的包不全

第二步:替换jar包
因为我使用的是svn,而且项目升级好以后还没有提交,这里可以很直观的看出jar包的变化,绿色部分为需要替换的jar包

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

还有一个需要删除的包:
xwork-core-2.3.16.3.jar 这个包需要删除,最新版stuts-core包里面集成了该jar包

第三步:修改web.xml
老版本的

org.apache.struts2.dispatcher.gn.filter.StrutsPrepareAndExecuteFilter

改为新版本的

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

在这里插入图片描述第四步:修改struts.xml
1.将原本的头部改成新版本的头部信息:

<!DOCTYPE struts PUBLIC
		"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
		"http://struts.apache.org/dtds/struts-2.5.dtd">

2.将action设置动态访问
在这里插入图片描述

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

3.package后面加一个strict-method-invocation=“false”
在这里插入图片描述

strict-method-invocation="false"

4.方法不被允许
如果url中带有方法名,如index.action!getList,在struts2.5.2中,会报错误Method xxx for action xxx is not allowed!然后出现404的情况
在这里插入图片描述

<global-allowed-methods>regex:.*</global-allowed-methods>

注意:这条语句必须放在package里面的最后一行,不然报错

第五步:修改struts.property文件,在里面将默认方法指定为execute
在这里插入图片描述

struts.mapper.indexMethodName=execute
struts.mapper.postMethodName=execute

第六步:修改代码
IDEA里面全局搜索:

public class JakartaMultiPartRequest implements MultiPartRequest

1.在这个类中重写cleanUp()方法
在这里插入图片描述

    @Override
    public void cleanUp() {
    }

2.修改getFile方法
因为新版里面的getFile的返回值类型由File[ ] 变成了UploadFile[ ] 所以,我们把原有的getFile方法注释掉,重新写这个方法
在这里插入图片描述
具体代码如下:

  public UploadedFile[] getFile(String fieldName) {
        List<FileItem> items = files.get(fieldName);

        if (items == null) {
            return null;
        }

        List<UploadedFile> fileList = new ArrayList<>(items.size());
        for (FileItem fileItem : items) {
            File storeLocation = ((DiskFileItem) fileItem).getStoreLocation();
            if (fileItem.isInMemory() && storeLocation != null && !storeLocation.exists()) {
                try {
                    storeLocation.createNewFile();
                } catch (IOException e) {
                    LOG.error("Cannot write uploaded empty file to disk: {}", storeLocation.getAbsolutePath(), e);
                }
            }
            fileList.add(new StrutsUploadedFile(storeLocation));
        }

        return fileList.toArray(new UploadedFile[fileList.size()]);
    }

好了,那么到此为止,你就可以重新启动你的项目了!

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值