将pom.xml 文件修改为2.5.30版本
<properties>
<struts2-version>2.5.30struts2-version>
properties>
<dependencies>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-spring-pluginartifactId>
<version>${struts2-version}version>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-spring-pluginartifactId>
<version>${struts2-version}version>
dependency>
dependencies>
把org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 中的.ng 去掉 修改为
<filter>
<filter-name>struts2filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
filter>
把原先的头部信息修改为:
DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
需要在每个action配置文件中加上 strict-method-invocation=“false”
再加上
regex:.*
<package name="projectstruts" extends="struts-default" strict-method-invocation="false">
<global-allowed-methods>regex:.*global-allowed-methods>
package>
依赖冲突需要根据自己的项目引入的依赖来进行排除
举例:
版本问题:
我升级的时候有commons-lang3 版本问题
需要将版本升为3.8.1
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.8.1version>
dependency>
其他问题没遇到,遇到的小伙伴可以在下方评论,帮助他人快速解决问题。
2022/04/20补充
老版本的是:
Map<String, Object> params = ServletActionContext.getContext().getParameters();
新版本的是:
HttpParameters params = ServletActionContext.getContext().getParameters();
在新版本如果想将HttpParameters转为Map 可以调用 toMap();方法,如下:
Map<String, String[]> stringMap = params.toMap();
或者遍历存入map ,如下:(提倡)
HttpParameters fileMaps = ServletActionContext.getContext().getParameters();
Map<String, Object> fileMap = new HashMap<>();
fileMaps.keySet().stream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
fileMap.put(s, fileMaps.get(s));
}
});
File[] files = (File[]) fileMap.get(key);
2022/06/7 补充
我是在拦截器中处理的参数,通过继承AbstractInterceptor 来重写intercept方法处理参数,仅供参考。
/**
* 处理参数
*/
private void processRequestParamters(HttpServletRequest request) {
if (!(request instanceof MultiPartRequestWrapper)) {
return;
}
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
//从前端获取的文件
File fileIo = null;
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement();
// get the content type
String[] contentType = multiWrapper.getContentTypes(inputName);
if (contentType != null && contentType.length > 0) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName);
if (fileName != null && fileName.length > 0) {
// get a File object for the uploaded File
UploadedFile[] files = multiWrapper.getFiles(inputName);
Object obj;
if (files.getClass().isArray() && Array.getLength(files) == 1) {
obj = Array.get(files, 0);
} else {
obj = files;
}
if (obj instanceof UploadedFile) {
UploadedFile file = (UploadedFile) obj;
if (file.getContent() instanceof File) {
fileIo = (File) file.getContent();
} else {
fileIo = new File(file.getAbsolutePath());
}
} else {
fileIo = new File(obj.toString());
}
}
}
}
}
对你有帮助给点个再走呗。