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

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

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

好!话不多说,进入正题

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

https://struts.apache.org/

关于struts2升级2.5版本的详细过程,及容易踩的坑_第1张图片
注意: 请下载完整依赖,不要下mini版的,里面的包不全

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

关于struts2升级2.5版本的详细过程,及容易踩的坑_第2张图片

关于struts2升级2.5版本的详细过程,及容易踩的坑_第3张图片

关于struts2升级2.5版本的详细过程,及容易踩的坑_第4张图片

关于struts2升级2.5版本的详细过程,及容易踩的坑_第5张图片

关于struts2升级2.5版本的详细过程,及容易踩的坑_第6张图片

关于struts2升级2.5版本的详细过程,及容易踩的坑_第7张图片

还有一个需要删除的包:
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设置动态访问
关于struts2升级2.5版本的详细过程,及容易踩的坑_第8张图片

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

3.package后面加一个strict-method-invocation=“false”
关于struts2升级2.5版本的详细过程,及容易踩的坑_第9张图片

strict-method-invocation="false"

4.方法不被允许
如果url中带有方法名,如index.action!getList,在struts2.5.2中,会报错误Method xxx for action xxx is not allowed!然后出现404的情况
关于struts2升级2.5版本的详细过程,及容易踩的坑_第10张图片

<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()方法
关于struts2升级2.5版本的详细过程,及容易踩的坑_第11张图片

    @Override
    public void cleanUp() {
     
    }

2.修改getFile方法
因为新版里面的getFile的返回值类型由File[ ] 变成了UploadFile[ ] 所以,我们把原有的getFile方法注释掉,重新写这个方法
关于struts2升级2.5版本的详细过程,及容易踩的坑_第12张图片
具体代码如下:

  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()]);
    }

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

你可能感兴趣的:(Struts2,struts2,升级,struts2升级,struts2.5)