Struts 1.x
ActionMapping
ActionForward
绝大多数实现类继承 AbstractHandlerMapping
包含多个有序 interceptors
- HandlerInterceptor(不带)
- MappedInterceptor(自带映射规则)
MappedInterceptor 会被适配成 HandlerInterceptor
- @RequestMapping 标注方法
- handleRequest 实现方法
- 包含多个 HandlerMapping 以及一个 Handler 对象
- 委派集合执行
- HandlerExecutionChain#applyPreHandle
- HandlerExecutionChain#applyPostHandle
- HandlerExecutionChain#triggerAfterCompletion
Filter 是拦截 Servlet,一旦被拦截(中断),后续 Servlet 不会被执行
Filter 前置和后置处理需要开发人员自己去管理
Filter 拦截请求形式 - DispatcherType:
- Request
- Forward
- Include
- Error
- Async
Filter 映射关系和 Servlet 无关,单独部署
Filter1 -> FIlter2 -> Filter3 -> Servlet
FilterChain -> N * Filter + 1 Servlet
HandlerExecutionChain -> N * HandlerInterceptor + 1 Handler
HandlerInterceptor 它的映射关系与 DispatcherServlet 有关系(子关系)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
<filter>
<filter-name>myFilter</servlet-name>
<filter-class>com.acme.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>dispatcher</filter-name>
<url-pattern>/myfilter/</url-pattern>
</filter-mapping>
<!-- SCWCD ->
MappedInterceptor 是存在自己的 URL 判断映射关系的,URL Pattern 属于特殊映射逻辑,默认 - AntPathMatcher,可以自定义 PathMatcher
WebRequestInterceptor 是通用拦截器,被拦截的请求对象是 WebRequest
Web 三种规范
- Servlet
- Portlet
- JSF
Web Reactive :
注册一到多个有序 HandlerInterceptor,它为 AbstractHandlerMapping 和 HandleExecutionChain 提供数据来源
- HandlerMethod
- Controller 实现类
Handler 来源于 HandlerMapping#getHandler(HttpServletRequest)
方法实现。