本篇主要介绍利用Spring MVC处理文件上传,异常处理,为控制器添加通知以及跨重定向请求传递数据。
1.Spring MVC处理文件上传
1.1使用multipart格式提交表单
在有文件上传的表单中,我们需要使用multipart格式的数据来上传,multipart格式的数据会将一个表单拆分成多个部分(part),每个部分对应一个输入域。在一半的表单输入域中,它所对应的部分会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制。下面是前段页面表单部分:
<form action="${ctx}/register" enctype="multipart/form-data" method="post">
<label>用户名:</label>
<input type="text" name="username"><br/>
<label>密码:</label>
<input type="password" name="password"><br/>
<label>邮箱:</label>
<input type="text" name="email"><br/>
<label>头像:</label>
<input type="file" name="image" accept="image/jpeg,image/png,image/gif"><br/>
<input type="submit" value="注册">
</form>
form表单现在将enctype属性设置为multipart/form-data,这会告诉浏览器以multipart数据的形式提交表单,而不是以表单数据的形式进行提交。在multipart中,每个输入域都会对应一个part。而文件上传输入域中的accept属性用来将文件类型限制为JPEG、PNG和GIF图片。
1.2配置multipart解析器
DispatcherServlet将解析multipart请求数据的任务委托给了Spring中MultipartResolver策略接口的实现。Spring内置了两个MultipartResolver的实现供我们选择:
- CommonsMultipartResolver:使用Jakarta Commons FileUpload解析multipart请求
- StandardServletMultipartResolver:依赖于Servlet3.0对multipart请求的支持。
使用Servlet 3.0解析multipart请求:
在Spring MVC上下文中将其声明为bean:
@Configuration
@EnableWebMvc //启用Spring MVC
@ComponentScan("spittr.web") //启用组件扫描
public class WebConfig
extends WebMvcConfigurerAdapter{
/**
* 配置multipart解析器
* @return
*/
@Bean
public MultipartResolver multipartResolver(){
return new StandardServletMultipartResolver();
}
}
StandardServletMultipartResolver的配置是在Servlet中通过传入一个MultipartConfigElement实例来指定:
如果是自定义的Servlet,即(自己实现WebApplicationInitializer),这样做:
public class myServletIntializer implements WebApplicationIni