Spring实战读书笔记
第七章:Spring MVC的高级技术
利用Java配置在web应用中添加其他的Servlet和Filter
-
最简单的方式就是实现Spring的WebApplicationInitializer接口,实现onStartup方法。
-
在方法内利用javax.servlet.ServletRegistration.Dynamic来注册自定义的Servlet。
-
通过javax.servlet.FilterRegistration.Dynamic来注册自定义Filter。
实现文件上传
-
配置multipart解析器:
-
Spring从3.1版本开始内置了两个multipart解析器:CommonsMultipartResolver和StandardServletMultipartResolver,对于Servlet3.0之后的应用建议使用第二个,否则只能使用第一个了
-
CommonsMultipartResolver的配置比较简单直接在注入bean的时候配置就行了,而对于StandardServletMultipartResolver的配置要作为DispatcherServlet的一部分来配置。如果我们的初始类实现了WebApplicationInitializer我们可以在Servlet registration上调用setMultipartConfig方法即可。但是如果初始化类继承了AbstractAnnotationConfigDispatcherServletInitializer或AbstractDispatcherServletInitializer类,我们可以通过重载customizeRegistration方法来配置。
-
-
处理multipart请求
-
前端form表单的enctype要设置为multipart/form-data类型。
-
在Controller方法中通过MultipartFile类对象来接受form表单提交过来的数据。
-
如果使用的是Servlet3.0版本,也可以使用javax.servlet.http.Part代替MultipartFile作为控制器的参数,如果我们选择的这种方式那上一步配置的MultipartResolver就没有必要了。
-
处理异常
-
通过使用@ResponseStatus注解来将异常映射为HTTP状态码。Spring的很多异常默认会映射为HTTP状态码,我们可以利用这个注解将我们自定义的异常也映射,只需要在我们自定义的异常类上加上@ResponseStatus注解即可。使用注解的value指明要映射的HTTP状态,reason属性指明原因。
-
使用@ExceptionHandler注解修饰的方法处理异常。
-
使用@ControllerAdvice注解可以将所有的@ExceptionHandler修饰的方法收集到一个类中,这样所有的异常就会在一个类中统一的处理。
跨重定向请求传输数据
-
我们都知道可以使用"redirect:"前缀做请求的重定向,但这样却不能传输数据。下面我们看怎么传递数据到重定向方法中。
-
通过URL模板进行重定向:
-
在原方法中将数据添加至model中,我们重定向的URL如果有相应的占位符,它会自动填充至相应的占位符,如果没有它会以查询参数的形式附加到重定向URL中。
-
-
使用flash属性:
-
Spring3.1之后提供了一个通过RedirectAttributes的addFlashAttribute方法添加flash属性。它其实是Model的一个子接口。所以我们可以在原方法中通过model调用addFlashAttribute方法,然后重定向之后再从model中取出flash属性。
-
其实在重定向之前所有的flash属性会被复制到会话中,重定向完成后存在于会话中的flash属性会被立即取出,放入model中,所以我们重定向后仍然可以拿到数据。
-