美文网首页
handlerMapping目前三种常用的实现

handlerMapping目前三种常用的实现

作者: 代码potty | 来源:发表于2018-09-09 09:47 被阅读0次

    说道目前最长用的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

    相关文章

      网友评论

          本文标题:handlerMapping目前三种常用的实现

          本文链接:https://www.haomeiwen.com/subject/lmergftx.html