• SpringMVC处理器映射器和方法名称解析器


    所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式”

    1.处理器映射器HandlerMapping

    HandlerMapping接口负责根据request请求找到对应的Handler处理器即Interceptor拦截器,并将它们封装在HandlerExecutionChain对象中,返回给中央调度器。

      其常用的实现类有两种:

               01BeanNameUrlHandlerMapping

               02SimpleUrlHandlerMapping

    01BeanNameUrlHandlerMapping

       BeanNameUrlHandlerMapping处理器映射器,会根据请求的url与spring容器中所定义的处理器bean的name属性值进行匹配,从而在spring容器中找到处理器bean的实例

    1 <!--处理器 映射器-->
    2     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    3     <!--处理器-->
    4     <bean id="/hello.do" class="cn.happy.day01.FirstController"></bean>

    02.SimpleUrlHandlerMapping

       SimpleUrlHandlerMapping处理器映射器,不仅可以将url与处理器的定义分离,还可以对url进行统一的映射管理

       SimpleUrlHandlerMapping处理器映射器,会根据请求的url与Spring容器中定义的处理器映射器自标签的key属性进行匹配,匹配上后,再将该key的value值与处理器bean的id值进行匹配,从而在spring容器中找到处理器bean

       只需修改springmvc.xml文件即可

    第一种方式

     1 <!--处理器映射器-->
     2     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     3         <property name="urlMap">
     4            <map>
     5                <entry key="/*.do" value="multiActionController"></entry>
     6            </map>
     7         </property>
     8     </bean>
     9 <!--处理器-->
    10     <bean id="firstController" class="cn.happy.day02.MyAbstractController">
    11 </bean>

    第二种方式

     1 <bean id="propertyNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
     2         <property name="mappings">
     3             <props>
     4                 <prop key="/first.do">doFirst</prop>
     5                 <prop key="/second.do">doSecond</prop>
     6             </props>
     7         </property>
     8     </bean>
     9 
    10 <!--处理器-->
    11     <bean id="firstController" class="cn.happy.day02.MyAbstractController">
    12  </bean>

     三种方法名称解析器

    01.默认方法名称解析器 MultiActionController

    MyMultiActionController

    1 public class MyMultiActionController extends MultiActionController {
    2     public String doFirst(HttpServletRequest request, HttpServletResponse response){
    3         return "first";
    4     }
    5     public String doSecond(HttpServletRequest request, HttpServletResponse response){
    6         return "second";
    7     }
    8 }

    spring.mvc.xml

     1 <!--处理器映射器-->
     2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     3     <property name="urlMap">
     4        <map>
     5            <entry key="/*.do" value="multiActionController"></entry>
     6        </map>
     7     </property>
     8 </bean>
     9 <!--默认视图解析器的名称-->
    10 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    11     <property name="prefix" value="/"></property>
    12     <property name="suffix" value=".jsp"></property>
    13 </bean>
    14 
    15 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController"></bean>

    02属性方法名称解析器  PropertiesMethodNameResolver

    MyMultiActionController :与上一案例相同

    springmvc.xml

     1 <!--处理器映射器-->
     2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     3     <property name="urlMap">
     4        <map>
     5            <entry key="/*.do" value="multiActionController"></entry>
     6        </map>
     7     </property>
     8 </bean>
     9 
    10 <!--属性方法名称解析器  PropertiesMethodNameResolver
    11 访问格式:first.do   /   second.do
    12 -->
    13 <bean id="propertyNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    14     <property name="mappings">
    15         <props>
    16             <prop key="/first.do">doFirst</prop>
    17             <prop key="/second.do">doSecond</prop>
    18         </props>
    19     </property>
    20 </bean>
    21 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController">
    22     <property name="methodNameResolver" ref="propertyNameResolver" ></property>
    23 </bean>

    03参数方法名称解析器

    springmvc.xml

     1 <!--处理器映射器-->
     2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     3     <property name="urlMap">
     4        <map>
     5            <entry key="/hello.do" value="multiActionController"></entry>
     6        </map>
     7     </property>
     8 </bean>
     9 <!--参数方法名称解析器  ParameterMethodNameResolver
    10  访问格式: /hello.do?actionName=doFirst/doSecond   value不写默认为action-->
    11 <bean id="parameterNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    12     <property name="paramName" value="actionName"[value不写默认为action]></property>   
    13 </bean>
    14 <!--默认视图解析器的名称-->
    15 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    16     <property name="prefix" value="/"></property>
    17     <property name="suffix" value=".jsp"></property>
    18 </bean>
    19 
    20 <bean id="multiActionController" class="cn.happy.day03.MyMultiActionController">
    21     <property name="methodNameResolver" ref="parameterNameResolver" ></property>
    22 </bean>

    value不写默认为action 源码解析

     三种视图解析器

    01视图解析器  InternalResourceViewResolver

    1 <!--默认视图解析器的名称-->
    2 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    3     <property name="prefix" value="/"></property>
    4     <property name="suffix" value=".jsp"></property>
    5 </bean>

    02视图解析器  BeanNameViewResolver

    RedirectView:定义外部资源视图对象
    JstlView:定义内部资源视图对象

     1 <!--内部视图对象-->
     2 <bean id="innerView" class="org.springframework.web.servlet.view.JstlView">
     3     <property name="url" value="/index.jsp"></property>
     4 </bean>
     5 <!--外部视图对象-->
     6 <bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
     7     <property name="url" value="https://www.jd.com/"></property>
     8 </bean>
     9 <!--BeanNameViewResolver视图解析器-->
    10 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>

    03视图解析器  XMLViewResolver

    可以将部分配置信息提取到另一个配置文件中

    myview.xml

    1 <!--内部视图对象-->
    2 <bean id="innerView" class="org.springframework.web.servlet.view.JstlView">
    3     <property name="url" value="/index.jsp"></property>
    4 </bean>
    5 <!--外部视图对象-->
    6 <bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
    7     <property name="url" value="https://www.jd.com/"></property>
    8 </bean>

    在原位配置文件(springmvc.xml)引入

    1 <bean class="org.springframework.web.servlet.view.XmlViewResolver">
    2     <property name="location" value="classpath:myview.xml"></property>
    3 </bean>
  • 相关阅读:
    以太坊学习笔记
    linux找不到动态链接库
    centos7 firewall指定IP与端口访问
    VMware Fusion 序列号
    mysql pxc无法启动
    vmware workstation许可证密钥
    Gradle上传依赖到私服(nexus)
    Java对象操作工具
    Java获取不到请求的真实IP
    java8+ Lambda表达式基本用法
  • 原文地址:https://www.cnblogs.com/liutao1122/p/7778588.html
Copyright © 2020-2023  润新知