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>
时间: 2024-10-23 09:30:32

SpringMVC处理器映射器和方法名称解析器的相关文章

SSM-SpringMVC-11:SpringMVC中ParameterMethodNameResolver参数方法名称解析器

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 或许曾经的我们也见过一种方式http://localhost:8080/项目名/后台servlet?actionName=login&uname=admin&upwd=123 这种方式调度servlet并且传参数,这里我要表达什么呢?就是?后面可以拼接内容, 所以,此处的ParameterMethodNameResolver就是通过这种方式来访问到的方法名的 说一下案例使用步骤 一,定义Paramet

SSM-SpringMVC-10:SpringMVC中PropertiesMethodNameResolver属性方法名称解析器

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上次的以继承MultiActionController可以实现一个处理器中多个处理方法,但是局限出来了,他们的url访问地址只能是与方法名称相同的,因为他默认的方法名称解析器是InternalPathMethodNameResolver 如果我们想为了程序的安全甚至更多考虑(从url简洁啊,同名啊,等等)所以引入了一个叫PropertiesMethodNameResolver属性方法名称解析器的这个东西 我

Spring MVC-控制器(Controller)-参数方法名称解析器(Parameter Method Name Resolver )示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parametermethodnameresolver.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何使用Spring Web MVC框架使用多操作控制器的参数方法名称解析器方法.MultiActionController类有助于分别在单个控制器中将多个URL与其方法映射. package com.tutorialspoint; import java

Spring MVC-控制器(Controller)-属性方法名称解析器(Properties Method Name Resolver )示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_propertiesmethodnameresolver.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何使用Spring Web MVC框架使用多操作控制器的属性方法名称解析方法.MultiActionController类有助于分别在单个控制器中将多个URL与其方法映射. package com.tutorialspoint; import java

7.SpringMVC 配置式开发-ModelAndView和视图解析器

ModelAndView 1.Model(模型) 1.model的本质就是HashMap,向模型中添加数据,就是往HashMap中去添加数据 2.HashMap 是一个单向查找数组,单向链表数组 3.LinkedHashMap,本质是一个HashMap,但其将Entry进行了扩展,变成双向的了 2.View(视图) ModelAndView 内部通过 setViewName() 指定视图名称 这个视图名称对应一个视图对象,这个视图对象会被封装在ModelAndView中,传给视图解析器来解析 视

SpringMVC ArgumentREsoler(方法参数解析器)

例: 先创建自定义注解 // @Target(ElementType.PARAMETER) //在运行时生效 //RetentionPolicy.RUNTIME 给方法使用 @Retention(RetentionPolicy.RUNTIME) public @interface CurrentUser { } 去定义自定义注解的规则 package com.lanou.demo.resolvers; import com.lanou.demo.annotation.CurrentUser; i

Spring映射器、适配器、解析器

1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映射器查找到的controller中的方法进行调用. 第一种:Controller适配 第二种:HttpRequestHandler适配 第三种:注解适配 不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAnd

SpringMVC自动封装List对象——自定义参数解析器

前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface at org.springframework.beans.B

PHP-XML基于流的解析器及其他常用解析器

PHP中有两种主要的XML解析器 1)基于树的解析器.它是把整个文档存储为树的数据结构中,即需要把整个文档都加载到内存中才能工作.所以,当处理大型XML文档时候,性能剧减.SimpleXML和DOM扩展属于此类型解析器. 2)基于流的解析器.它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互(当移向下一个节点时,上一个节点是被丢弃,但也设置为保留).很明显,其效率要高且占内存少,不便之处代码量大点. 所以,PHP中处理大型XML文档可以用XMLReader扩展方案