Spring实战之Spring MVC的高级技术

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中,所以我们重定向后仍然可以拿到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值