从DispatcherServlet到MultipartResolver

探讨了在SpringMVC框架中如何通过自定义MultipartResolver处理multipart/form-data类型的请求,详细介绍了DispatcherServlet如何利用MultipartResolver进行请求解析。

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

tomcat启动,DispatcherServlet初始化时调用initMultipartResolver方法初始化用户自己注入的MultipartResolver,springmvc并没有注入默认的Multipart解析器,用户未注入时,默认Multipart解析器则则为空。因此,当我们需要使用multipart/form-data方式向服务端传参时我们需要自已手动注入自己需要的MultipartResolver,一般我们用org.springframework.web.multipart.commons.CommonsMultipartResolver,使用如下方式注入:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="104857600"/>
        <property name="maxInMemorySize" value="4096"/>
    </bean>

可能是因为org.springframework.web.multipart.commons.CommonsMultipartResolver需要Apache Commons的 FileUpload文件上传包和Servlet 3支持的原因,所以spring-mvc并没有默认注入CommonsMultipartResolver为Multipart解析器。

DispatcherServlet接收客户端请求后在DispatcherServlet的doDispatch方法会调用checkMultipart(HttpServletRequest request)方法去检查处理请求。

如果请求方式是以"multipart/"开头的并且存在Multipart解析器时,

1.判断请求是否已经为MultipartHttpServletRequest类型对象,如果是直接返回原本的HttpServletRequest请求对象。

2.判断请求是否有Multipart解析异常,如果有则打印debug级日志"Multipart resolution previously failed for current request - skipping re-resolution for undisturbed error rendering",返回原本的HttpServletRequest请求对象。

3.不是以上两种情况时,直接用Multipart解析器去解析请求,将请求处理为MultipartHttpServletRequest对象。

如果不满足请求方式是以"multipart/"开头并且存在Multipart解析器两个条件,checkMultipart将直接返回原本的HttpServletRequest请求对象。

Multipart解析器的事情就做完了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游语

对你有帮助,可以请我喝杯奶哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值