开发者学堂课程【Java 面试疑难点串讲 3:开发工具及框架:Spring 拦截器】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/26/detail/562
Spring 拦截器
1、为什么 Spring MVC 没有像 Struts 2.x 那样的拦截器栈?
如果要从个人的角度来看,我认为不使用拦截器栈会更好。首先必须要明确一点,在 Spring 的设计之中,它实际上只是更加忠实于原始的 MVC 技术的提升。
如果要处理请求使用 DisptacherServlet 完成,这一点要比 Struts 2.x 使用 Filter 更好。
因为 Struts 2.x 占用了过滤器的过程,而这一过程对开发很不方便,因为在实际的开发里面过滤器需要完成可能许多的辅助功能,但是 Struts 2.x 做的时候考虑到与Struts 1.x 区分,所以没有使用 Servlet,那么如果用户要实现一些 AOP 有关的设计,该怎么办呢?所以在这样的情况下, Struts 2.x 提出了拦截器。
但是由于 Struts 2.x 拦截器里面所需要承载的内容过多,所以它提出拉拦截器栈。
如果在传统的 MVC 开发里面,需要进行拦截的操作控制,那么最简化的处理是使用多个过滤器完成。
所以,Spring MVC 也采用了同样的模式来进行处理,它的拦截器是基于配置的方式完成,按照过滤器的使用模式,所以你需要有多个拦截器那么就在配置里面编写多个拦截器的配置即可,因为所有的拦截器会按照路径拦截。
我们认为大家需要的主要部分是验证的处理上,而 Spring MVC 用大家熟悉的模式定义拦截器,这一点比 Struts 2.x 要强。
比较中会发现两者各有优势所在。
举例配置一下拦截器站:
这样我们就可以配置多个拦截器站。