spring mvc 关键接口 HandlerMapping HandlerAdapter

HandlerMapping 
Spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。 
  
以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用 
  DefaultAnnotationHandlerMapping将扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联。

Handleradapter 
Spring MVC通过HandlerAdapter来实际调用处理函数。 
以AnnotationMethodHandlerAdapter为例 
DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。

detectAllHandlerMappings 
缺省情况下spring mvc 将加载 当前系统中所有实现了HandlerMapping接口的bean。如果只期望spring mvc加载指定的handlermapping时,可以修改web.xml中的DispatcherServlet的初始参数,将detectAllHandlerMappings的值设置为false

Xml代码  

  1. <init-param>
  2. <param-name>detectAllHandlerMappings</param-name>
  3. <param-value>false</param-value>
  4. </init-param>

此时spring mvc将查找名 为“handlerMapping”的bean并作为当前系统中唯一的handlermapping。 
如果没有定义handlerMapping的话,则spring mvc将按照org.springframework.web.servlet.DispatcherServlet所在目录下的DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerMapping的内容来加载缺省的handlerMapping(用户没有自定义Strategies的情况下)。

detectAllHandlerAdapters 
作用和detectAllHandlerMappings类似,只不过作用对象为handlerAdapter。亦可通过

Xml代码  

  1. <init-param>
  2. <param-name>detectAllHandlerAdapters</param-name>
  3. <param-value>false</param-value>
  4. </init-param>

来强制系统只加载bean name 为” handlerAdapter”handlerAdapter。加载不到的情况下将按照DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerAdapter的内容来加载缺省的handlerAdapter。

时间: 2024-08-28 01:52:58

spring mvc 关键接口 HandlerMapping HandlerAdapter的相关文章

Spring MVC 学习笔记 handlerMapping和handlerAdapter

HandlerMapping Spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系.   以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用   DefaultAnnotationHandlerMapping将扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联. Handlera

Spring mvc Controller接口

Spring MVC 1. 继承该接口 Controller接口,重写对应方法,或者采用注解Controller,自定义映射文件 1 @Controller 2 @RequestMapping("/flight") 3 public class ControlFlight /*implements Controller*/ { 4 5 6 } 需要注意的是: SimpleUrlHandlerMapping 决定使用哪一个控制器. 其中对于prexf-servlet-.xml文件中使重定

Spring mvc之源码 handlerMapping和handlerAdapter分析

Spring mvc之源码 handlerMapping和handlerAdapter分析 本篇并不是具体分析Spring mvc,所以好多细节都是一笔带过,主要是带大家梳理一下整个Spring mvc的执行流程,以及如何根据URL查找处理器Controller的实现 (适合那些刚阅读源码不知道如何下手的人) http://www.guojinbao.com/borrow/borrowDetail/GETadLPjnf0[d].do 如何根据URL地址---->找到正确处理器Controller

Spring MVC 梳理 - handlerMapping和handlerAdapter分析

参考图片 综上所述我们来猜测一下spring mvc 中根据URL找到处理器Controller中相应方法的流程 ①:获取Request的URL ②:从UrlLookup这个map中找到相应的requestMappingInfo ③:如果没找到则遍历所有requestMappingInfo的信息直到找到匹配的requestMappingInfo ④:根据requestMappingInfo到mappingLookup中找到handlerMethod Spring mvc是如何通过URL查找到对应

Spring MVC 体系结构和处理请求控制器

①MVC小结: 1.MVC处理过程 对于MVC的三部分(模型Model.视图View.控制器Controller)功能职责分别进行了相应的阐述,并描述了各部分之间的调用关系. MVC整体的处理过程: (1)首先视图提供系统与用户交互的界面,并发送用户输入给控制器. (2)控制器接受用户的请求,并决定应该调用那个模型来进行处理. (3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据). (4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果. 2

Spring MVC异常统一处理(异常信息的国际化,日志记录)

JAVA EE项目中,不管是对底层的数据操作,还是业务层的处理过程,还是控制层的处理,都不可避免的会遇到各种可预知的(业务异常主动抛出).不可预知的异常需要处理.一般dao层.service层的异常都会直接抛出,最后由controller统一进行处理,每个过程都单独处理异常,且要考虑到异常信息和前端的反馈,代码的耦合度高,不统一,后期维护的工作也多. 同时还必须考虑异常模块和日志模块.国际化的支持. 因此需要一种异常处理机制将异常处理解耦出来,这样保证相关处理过程的功能单一,和系统其它模块解耦,

Spring mvc中自定义拦截器

一.要实现的一个功能: 1.打开特定的一些页面时必需强制用户进行登录. 2.登录后再返回到之前的页面. 二.先写一个service,实现从cookie中判断用户是否登录. 1.TT_TOKEN为登录成功时,响应给浏览器的Cookie的键. @Service public class UserServiceImpl implements UserService{ @Value("${SSO_BASE_URL}") private String SSO_BASE_URL; @Value(&

Spring学习总结(2.3)-Spring MVC:handlerAdapter

前面一篇博客介绍了HandlerMapping这个组件,它负责的是定位请求处理器Handler.这是SpringMvc处理流程的第二步.那么,当定位到Handler之后,DispatcherServlet会将得到的Handler告知HandlerAdapter,HandlerAdapter再根据请求去定位请求的具体处理方法是哪一个. 职责 在HandlerMapping返回处理请求的Controller实例后,需要一个帮助定位具体请求方法的处理类,这个类就是HandlerAdapter,Hand

Spring MVC:handlerAdapter

HandlerMapping这个组件,它负责的是定位请求处理器Handler.这是SpringMvc处理流程的第二步.那么,当定位到Handler之后,DispatcherServlet会将得到的Handler告知HandlerAdapter,HandlerAdapter再根据请求去定位请求的具体处理方法是哪一个. 职责 在HandlerMapping返回处理请求的Controller实例后,需要一个帮助定位具体请求方法的处理类,这个类就是HandlerAdapter,HandlerAdapte