SpringMVC之处理器映射
2017-02-12 11:18
183 查看
介绍
先大致了解SpringMVC的核心开发步骤:① 在web.xml中部署DispaterServlet,并配置springmvc.xml等文件;
② 将映射文件请求到处理器HandlerMapping;
③ HandlerMapping会把请求映射为HandlerExecutionChain类型的handler对象;
④ 将handler对象作为参数传递给HandlerAdapter的实例化对象,调用其handler方法会生成一个ModelAndView对象;
⑤ 通过ViewResolver视图解析器,将上一步骤中生成的ModelAndView解析为View;
⑥ DispatcherServlet根据获取到View,将视图返回给用户。
Spring的分发器(DispatcherServlet)使用定义什么样的请求被接收到控制器(Controller)处理,在具体的某个请求被某个具体的控制器处理,这需要通过处理器映射来进行
映射原理
首先可以明确HandlerExecutionChain与HanderMapping关系非常紧密,HandlerExecutionChain只能通过HanderMapping接口中的唯一方法来获得HandlerMapping接口的代码示例
public interface HandlerMapping { ////该方法是HandlerMapping接口中的唯一方法,此方法可以利用用户请求request中的信息来生成HandlerExecutionChain对象 HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; }
实现把对*.do的请求转换给配置文件中设定的相应处理器,则依赖DispatcherServlet的getHandler()方法,代码如下
protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { //根据给定的request查找handler for (HandlerMapping hm : this.handlerMappings) { //调试时使用的日志信息 if (logger.isTraceEnabled()) { logger.trace( "Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'"); } //获取handler HandlerExecutionChain handler = hm.getHandler(request); //如果获取的handler不是null就返回handler if (handler != null) { return han 4000 dler; } } return null; }
添加拦截器
有了处理器映射,就可以在映射请求时添加一个拦截器,以做某种动作或检查。要在映射请求时添加一个拦截器,自定义的拦截器就必须实现HandlerInterceptor接口public interface HandlerInterceptor { //在处理器执行前被调用 default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } //在处理器执行后被调用 default void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } //在整个请求处理完后调用 default void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
代码说明: 当preHandle()方法返回true时,处理器将继续执行,当返回false时,DispatcherServlet认为拦截器本身将处理请求,而不继续执行处理器
相关文章推荐
- springmvc(二)非注解的处理器映射器和适配器
- 【SpringMVC框架】非注解的处理器映射器和适配器
- springmvc入门之映射处理器(一)
- springmvc学习笔记(2)-非注解的处理器映射器和适配器
- SpringMVC_非注解(注解)的处理器映射器和适配器
- JavaEE_Mybatis_SpringMVC_Spring_lesson3_注解处理器映射器与适配器以及处理器(Controller)
- springMVC例子之Hello world(“非BeanNameUrlHandlerMapping 映射处理器”)
- springmvc入门之映射处理器(二)
- SpringMVC - 非注解的处理器映射器和适配器
- SpringMVC-02_SpringMVC的三种映射处理器
- springmvc(3)--非注解的处理器映射器和适配器
- SpringMVC 处理器映射器、处理器适配器
- SpringMVC处理器映射问题( 错误:包含了项目名 )
- springMVC--4种映射处理器handlerMapping
- 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
- SpringMVC实战(三种映射处理器)
- springMvc的自定义处理器映射器
- SpringMVC三种映射处理器的用法
- SpringMVC 三种处理器映射器配置方式
- springmvc中常见的非注解开发的处理器映射器