handlerMapping目前三种常用的实现

转载来源:https://www.jianshu.com/p/e4f1c9326223

我们在进行SSM框架开发过程中涉及到映射处理配置时,会使用HandlerMapping接口的各种实现类(如下图所示),本文主要介绍默认加载的三个handlerMapping,今后工作学习中遇到更适合某种业务场景的HandlerMapping会慢慢补充。

正文开始

说道目前最长用的handlerMapping,我们可以先看下配置文档里边提供给我们的handlerMapping的默认配置

    org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
        org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

我测试了一下,发觉DefaultAnnotationHandlerMapping已经被弃用了

 

image.png

 

转而替换成了以下这个类,也就是我们最常用的handlerMapping
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

在调试过程中,我们可以看到,默认加载的是这三个handlerMapping

 

image.png

 

今天主要讲解的也是这三种
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中的代码图如下:

 

image.png

下面介绍第二种,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接口,代码如下所示:

 

image.png

第三种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

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值