Spring 6 的主要变化
-
Jakarta EE 9+ 支持:
- Spring 6完全迁移到了Jakarta EE 9+,这意味着所有的包名都从
javax
前缀改为了jakarta
前缀。例如,javax.servlet
变为jakarta.servlet
。 - 因此,如果你在Spring 6中使用文件上传,必须确保依赖库和配置都使用了新的Jakarta命名空间。
- Spring 6完全迁移到了Jakarta EE 9+,这意味着所有的包名都从
-
Java 17+ 支持:
- Spring 6要求至少Java 17作为运行环境。这带来了对Java语言特性的更好支持和优化。
教程如下:
这里给大家粘贴一段spring文档的原文:
MultipartResolver
from the package is a strategy for parsing multipart requests including file uploads. There is a container-based implementation for Servlet multipart request parsing. Note that the outdated based on Apache Commons FileUpload is not available anymore, as of Spring Framework 6.0 with its new Servlet 5.0+ baseline.org.springframework.web.multipart
StandardServletMultipartResolver
CommonsMultipartResolver
Multipart Resolver :: Spring 框架
简单来说就是Spring 6.0已经不再使用基于Apache Commons FileUpload的CommonsMultipartResolver
,而是推荐使用基于Servlet标准的StandardServletMultipartResolver
。
MultipartResolver 概述
MultipartResolver
是一个接口,定义了解析multipart请求(包括文件上传)的策略。Spring提供了多种实现,包括基于Servlet容器的实现和过去常用的基于Apache Commons FileUpload的实现。
主要实现
- StandardServletMultipartResolver
- CommonsMultipartResolver (过时的实现,不再推荐)
1. StandardServletMultipartResolver
这是基于Servlet 3.0+规范的实现,利用Servlet容器本身的multipart解析功能。它不依赖于外部库,而是直接使用Servlet API提供的multipart支持。
配置示例: 在Spring 6中,你应该使用StandardServletMultipartResolver
,这也是推荐的方式。
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
在web.xml
中配置<multipart-config>
这种方式适用于使用XML配置的传统Spring MVC项目。
1. 在web.xml
中添加<multipart-config>
编辑你的web.xml
文件,找到你定义的DispatcherServlet
,然后添加<multipart-config>
元素。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!-- Max file size: 5MB -->
<max-file-size>5242880</max-file-size>
<!-- Max request size: 5MB -->
<max-request-size>5242880</max-request-size>
<!-- File size threshold after which files will be written to disk: 0 -->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2. CommonsMultipartResolver
这是基于Apache Commons FileUpload库的实现,曾经是处理文件上传的主要方式。但是在Spring 6.0中,这个实现已经被废弃,因为它依赖的Apache Commons FileUpload库已经过时,不再推荐使用。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5242880"/> <!-- 5MB -->
</bean>
在Spring 6中,使用基于Servlet标准的MultipartResolver确保了更好的兼容性和性能,同时减少了对外部库的依赖。