概述
tomcat启动的时候DispatcherServlet加载默认资源DispatcherServlet.properties就会去加载默认的HandlerMapping,包括org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping和 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping及自定义HandlerMapping。先分析一下
BeanNameUrlHandlerMapping
先翻译注释的意思:
实现@link org.springframework.web.servlet.handlermapping的接口,该接口使用以斜线“/”开头的名称从URL映射到bean,类似于Struts如何将URL映射到操作名称。
这是@link org.springframework.web.servlet.DispatcherServlet 使用的默认实现,以及@link org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping(在Java 5和更高版本上)。或者,@link simpleurlhandlermapping允许以声明方式自定义处理程序映射。
映射是从URL到bean名称。因此,如果多个映射到单个处理程序,则传入的URL“/foo”将映射到名为“/foo”的处理程序,或者映射到“/foo/foo2”。注意:在XML定义中,需要在bean定义中使用别名name=“/foo”,因为XML ID可能不包含斜杠。
支持直接匹配(给定的“/test”->注册的“/test”)和“*”匹配(给定的“/test”->注册的“/t*”)。请注意,默认值是在当前servlet映射中进行映射(如果适用);有关详细信息,请参见@link setalwayssusefullpath“alwayssusefullpath”属性。有关模式选项的详细信息,请参见@link org.springframework.util.antpathmatcher javadoc。
理解一下,就是这是个实现org.springframework.web.servlet.handlermapping的类,这个类做了什么呢?就是把带“/”的url名称或别名映射到对应的bean,就像下面一样:
<bean name="/admin" class="com.squid.admin/AdminController"/>
RequestMappingHandlerMapping
先翻译注释的意思:
实现org.springframework.web.servlet.handlermapping接口,该接口基于通过类或方法级别的@requestmapping注释表示的HTTP路径映射处理程序。
默认情况下,org.springframework.web.servlet.DispatcherServlet 在Java 5 +上的版本注册RequestMappingHandlerMapping。如果在DispatcherServlet上下文中定义自定义handlerMapping bean,则需要显式添加一个defaultAnnotationhandlerMapping bean,因为自定义handlerMapping bean替换了默认的映射策略。
定义DefaultAnnotationHandlerMapping还允许注册自定义拦截器:带注释的控制器通常在类型级别用@link controller构造型标记。
在类级别应用@requestmapping时,这不是严格必要的(因为此类处理程序通常实现@org.springframework.web.servlet.mvc.controller接口)。但是,如果类型级别不存在@requestmapping,则在方法级别检测@requestmapping注解需要@controller。
方法级映射只允许缩小在类级(如果有)表示的映射。HTTP路径需要唯一地映射到特定的处理程序bean上,任何给定的HTTP路径只允许映射到一个特定的处理程序bean上(而不是跨多个处理程序bean分布)。强烈建议将相关的处理程序方法共同定位到同一个bean中。
@annotationmethodhandleradapter负责处理由该handlerMapping映射的带注释的处理程序方法。对于类型级别的@requestmapping,应用特定的handlerAdapters,如@org.springframework.web.servlet.mvc.simpleControllerhandlerAdapter。
那就是通过类或方法级别的@requestmapping注解,处理url到程序映射关系。
如下:
@Controller
@RequestMapping("/admin")
public class InviteGradeController {
@RequestMapping(value = "ok")
public String ok() {
return "ok";
}
}
BeanNameUrlHandlerMapping和RequestMappingHandlerMapping就是两种不同的url映射处理方式。
最后
以上就是陶醉向日葵为你收集整理的从DispatcherServlet到HandlerMapping的全部内容,希望文章能够帮你解决从DispatcherServlet到HandlerMapping所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复