6.SpringMVC 配置式开发-处理器

处理器除了实现Controller 接口外,还可以继承自一些其他的类,来完成一些特殊的功能

  1.继承自AbstractController类

  若处理器继承自AbstractController类,那么处理器可以通过属性 supportedMethods 来限制 HTTP 请求的提交方式

1 <!-- 若处理器继承自 AbstractController 类,该类具有 supportedMethods 属性,所以可以在这里 对 supportedMethods属性 进行赋值,来限制HTTP请求方式()-->
2     <bean id="myController" class="com.springmvc.handlers.MyController">
3         <property name="supportedMethods" value="POST"/>  <!-- POST 必须大写 --> <!-- 只能通过表单 和 AJAX 方式请求 -->
4
5     </bean>

  

  2.继承自 MultiActionController类

  MultiActionController 类继承自 AbstractController,所以继承自 MultiActionController 的子类也可以设置 HTTP 请求提交方式。

  除此之外,继承自该类的处理器中可以定义多个处理方法。这些方法的签名为公共的方法,

  返回值为 ModelAndView,包含参数 HttpServletRequest HttpServletResponse,抛出 Exception 异常,方法名随意。

  

 1 //继承 MultiActionController ,这个类是继承自 AbstractController的,所以它也可以限定提交方式
 2 //继承 MultiActionController ,可以定义多个处理方法,方法名随意,但其他(权限,参数,返回值,异常)必须保持一致
 3 public class MyController extends MultiActionController {
 4     
 5     public ModelAndView doFirst(HttpServletRequest request,HttpServletResponse response) throws Exception {
 6         
 7         ModelAndView mv = new ModelAndView();
 8         mv.addObject("message", "Hello doFirst Method!");
 9         mv.setViewName("/WEB-INF/jsp/hello.jsp");
10         return mv;
11         
12     }
13     
14     public ModelAndView doLast(HttpServletRequest request,HttpServletResponse response) throws Exception {
15         
16         ModelAndView mv = new ModelAndView();
17         mv.addObject("message", "Hello doLast Method!");
18         mv.setViewName("/WEB-INF/jsp/hello.jsp");
19         return mv;
20         
21     }
22 
23     
24 }

  A、InternalPathMethodNameResolver方法名解析器

    方法名以URI中资源名称的身份出现    /***/方法名

  

 1 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    
 2         <property name="urlMap">
 3             <map>
 4             <!-- 
 5                 MultiActionControllern 类具有一个属性 methodNameResolver,方法名解析器    
 6                 其具有默认值InternalPathMethodNameResolver,该解析器将方法名作为资源名称进行解析
 7                 那就意味着,我们提交请求时,要将方法名作为资源名称出现
 8              -->
 9                 <entry key="/my/*.do" value="myController"></entry>  <!-- 将方法名写在 url 地址中 ,SpringMVC_07_MultiActionController/my/doLast.do -->
10             </map>
11         </property>
12         
13     </bean>

  B、PropertiesMethodNameResover方法名解析器

    方法名作为URI资源名称中的一部分出现   /***_doFirst

  


 1 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 2         <property name="urlMap">
 3             <map>
 4             <!-- 
 5                 MultiActionControllern 类具有一个属性 methodNameResolver,方法名解析器    
 6                 其具有默认值InternalPathMethodNameResolver,该解析器将方法名作为资源名称进行解析
 7                 那就意味着,我们提交请求时,要将方法名作为资源名称出现
 8              -->
 9                 <entry key="/my_*.do" value="myController"></entry>  <!-- 将方法名写在 url 地址中 ,SpringMVC_07_MultiActionController/my/doLast.do -->
10             </map>
11         </property>
12         
13     </bean>



1
<!-- 配置方法名解析器 --> <!-- 如果是写成 /my/*.do 这种,不写这个方法名解析器也没什么区别--> 2 <!-- 因为 默认的InternalPathMethodNameResolver是根据 方法名 作为资源名称--> 3 <!-- 如果是写成 /my_*.do 就可以采用这种方式,因为这样写 找不到 找到的资源名称 和 方法名 是对应不上的--> 4 <bean id="propertiesMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> 5 <property name="mappings"> 6 <props> 7 <prop key="/my_doFirst.do">doFirst</prop> 8 <prop key="/my_doLast.do">doLast</prop> 9 </props> 10 </property> 11 </bean>

  C、ParameterMethodNameResover方法名解析器

    方法名作为请求参数的值出现    /***?action=doFirst

1 <!-- 配置 ParameterMethodNameResolver 方法名解析器 (方法名作为请求参数值出现) --> 
2     <!-- http://localhost:8080/SpringMVC_09_MultiActionController_3/my.do?method=doFirst -->
3     <bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
4         <!-- 如果 这里不配置 paramName 属性 ,该属性会有一个默认 值action  (?action=doFirst)--> 
5         <!-- <property name="paramName" value="method" /> -->
6     </bean>
原文地址:https://www.cnblogs.com/xuzekun/p/7405694.html