handlerMapping目前三种常用的实现
说道目前最长用的handlerMapping,我们可以先看下配置文档里边提供给我们的handlerMapping的默认配置
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
我测试了一下,发觉DefaultAnnotationHandlerMapping已经被弃用了

转而替换成了以下这个类,也就是我们最常用的handlerMapping
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
在调试过程中,我们可以看到,默认加载的是这三个handlerMapping

今天主要讲解的也是这三种
requestMappingHandlerMapping是三个中最常用的handlerMapping,因为注解方式比较通俗易懂,代码界面清晰,只需要在代码前加上@RequestMapping()的相关注释就可以了,所以我们首先讲解一下这个handlerMapping,首先在配置文件中的配置可以这样配置:
//配置springMVC的注解模式,首先会注册RequestMappingHandlerMapping与
//RequestMappingHandlerAdapter
<mvc:annotation-driven />
//静态资源的处理,可以采用restful风格的地址
<mvc:default-servlet-handler />
//配置视图依赖
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="suffix" value=".jsp" />
</bean>
//扫描Controller所在的包
<context:component-scan base-package="com.alipay.web" />
简单的配置就完成了RequestMappingHandlerMapping的配置工作,在Controller中的代码图如下:

下面介绍第二种,SimpleUrlHandlerMapping的配置
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index">TestController</prop>
</props>
</property>
</bean>
<bean id="TestController" class="com.alipay.web.TestController" />
<!-- <mvc:default-servlet-handler />-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="suffix" value=".jsp" />
</bean>
可以看到图中我直接注释掉了<mvc:default-servlet-handler />
原因在于如果多上这个标签,那么我将会出现两个SimpleUrlHandlerMapping,因为这个标签他同时注册了
SimpleUrlHandlerMapping和BeanNameUrlHandlerMapping两个处理器映射。
SimpleUrlHandlerMapping的Controller处理类需要实现Controller接口,代码如下所示:

第三种BeanNameUrlHandlerMapping,配置文件如下
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="/index" class="com.alipay.web.TestController" />
注意在bean的id中要加上斜杆
Controller方面的测试代码跟前面的SimpleUrlHandlerMapping一样,实现Controller,重写handlerRequest()方法即可。
handlerAdapter对应的是Controller,有三种最常用的HandlerAdapter,分别是:
1、RequestMappingHandlerAdapter
2、HttpRequestHandlerAdapter
3、SimpleControllerHandlerAdapter
RequestMappingHandlerAdapter主要是适配注解类处理器,注解类处理器就是我们经常使用的@Controller的这类处理器。
HttpRequestHandlerAdapter主要是适配静态资源处理器,静态资源处理器就是实现了HttpRequestHandler接口的处理器,这类处理器的作用是处理通过SpringMVC来访问的静态资源的请求。
SimpleControllerHandlerAdapter是Controller处理适配器,适配实现了Controller接口或Controller接口子类的处理器。
参考链接:
https://blog.csdn.net/wangbiao007/article/details/50547020
https://blog.csdn.net/u013828625/article/details/81383980
https://blog.csdn.net/gaoshan12345678910/article/details/81778587