spring 动态修改servlet参数_Spring开发中经常遇到的HandlerMapping与HandlerAdapter

一本书让你熟练使用Spring和SpringMVC

HandlerMapping:

Spring MVC使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。

以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用:

  1. DefaultAnnotationHandlerMapping将扫描当前所有已经注册的Spring Beans中的@RequestMapping标注以找出url和handler method处理函数的关系并予以关联。

HandlerAdapter:

Spring MVC通过HandlerAdapter来实际调用处理函数。

以AnnotationMethodHandlerAdapter为例:

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

detectAllHandlerMappings:

缺省情况下Spring MVC将加载当前系统中所有实现了HandlerMapping接口的bean。

如果只期望Spring MVC加载指定的handler mapping时,可以修改web.xml中的DispatcherServlet的初始参数,将detectAllHandlerMappings的值设置为false。此时Spring MVC将查找名为“handlerMapping”的bean并作为当前系统中唯一的handlerMapping。

如果没有定义handlerMapping的话,则Spring MVC将按照org.springframework.web.servlet.DispatcherServlet所在目录下的DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerMapping的内容来加载缺省的handlerMapping(用户没有自定义Strategies的情况下)。

cdd2b98fe5c35486465640016ece6a6c.png

detectAllHandlerAdapters:

作用和detectAllHandlerMappings类似,只不过作用对象为handlerAdapter。亦可通过将detectAllHandlerAdapters的值设置为false 来强制系统只加载bean name为“handlerAdapter”的handlerAdapter。加载不到的情况下将按照DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerAdapter的内容来加载缺省的handlerAdapter。

0ce4ac9c18e345a90fd99fce715df02d.png

EnableWebMvc

使用@EnableWebMvc(或者)可以为Spring注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter。为了@Controller方法能够正确地处理URL所映射的请求,必须要配置@EnableWebMvc或者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值