dispatchServlet根据用户请求到handleMappering
在HandlerExecutionChain执行链中,返回具体的handle处理
之后到达适配器handleadapter 处理业务,返回modelAndview到达dispatchServlet
再通过dispatchServlet到达视图解析器viewResolve 然后再返回具体view 之后通过dispatchServlet
到达渲染到达view视图 然后返回dispatchServlet 响应给用户
springmvc拦截器是什么:
HandlerExecutionChain是一个执行链,
当请求到达DispatchServlet时,DispatchServlet根据请求路径到HandlerMapping
查询具体的Handler,从HandlerMapping返回给DispatcherServlet,
其中包含了一个具体的Handler对象和Interceptors(拦截器集合)。
如何自定义拦截器:
springmvc的拦截器接口(HandlerInterceptor)定义了三个方法:
1.preHandle调用Handler之前执行,
称为前置方法
返回值:true表示放行,后续业务逻辑继续执行
false表示被拦截,后续业务逻辑不再执行,
但之前返回true的拦截器的完成方法会倒叙执行
2.postHandle调用Handler之后执行,称为后置方法
3.afterCompletion视图渲染完成之后执行
springmvc的三种映射器:
1、BeanNameUrlHandlerMapping 根据对象的名字来进行处理器映射,此时该对象要继承AbstractController 实现handlerRequestInternal方法;对请求的处理主要在该方法中完成
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
注意:使用 对象名映射 时,对象配置时的name属性必须为 “/xxx.action” 的形式,即 对象名 即为访问的 URL名
2、SimpleUrlHandlerMapping
SimpleUrlHandlerMapping的配置
复制代码
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/a.action">indexController</prop>
<prop key="/b.action">indexController</prop>
<prop key="/c.action">indexController</prop>
</props>
</property>
</bean>
复制代码
3、ControllerClassNameHandlerMapping 控制器类名映射
控制器类名处理器映射对象配置
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>