`

MultiActionController的映射

阅读更多
相对于其他控制器,SpringMVC的特点是"拥有多种控制器",虽说这种控制器照猫画虎的使用起来非常简单,但是如果是自己创建一个应用的话,如何选择Controller还是一个比较有深度的问题。所以掌握每个Controller将是使用好SpringMVC的重要重要前提。
下边的文章是我转载的:(源地址 http://ccbwm.spaces.live.com/blog/cns!41D66FDD19ED0FB!303.entry
        一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(MultiActionController),MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。
 
MultiActionController中的方法名解析器共有三个:
1、InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:
2、ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。
3、PropertiesMethodNameResolver——根据查询一个key/value列表来解析并执行方法名。
举个例子吧,比如说,有一个名为MAController的控制器,是MultiActionController的子类,
它有里边有三个方法分别是method01、method02、method03。其代码如下:
public class MAController extends MultiActionController {
 public MAController () {}
 public ModelAndView method01(HttpServletRequest request,   HttpServletResponse response) {
  ……
  return new ModelAndView("courseList", "courses", courses);
 }
 public ModelAndView method02(HttpServletRequest request, HttpServletResponse response) {
  ……
  return new ModelAndView("courseList", "courses", courses);
 }
 
 public ModelAndView method03(HttpServletRequest request, HttpServletResponse response) {
  ……
  return new ModelAndView("courseList", "courses", courses);
 }
 
 private CourseService courseService;
 public void setCourseService(CourseService courseService) {
  this.courseService = courseService;
 }
  ……
}
然后,在映射文件中,它被映射到一个id值为“maController”的Bean,
<bean id="maController" class="com.w3cs.vlar.training.mvc.MAController">
    <property name="methodNameResolver">
       <ref bean="methodNameResolver"/>
    </property>
</bean>

1、此时方法名解析器若用ParameterMethodNameResolver,这时就会根据请求中的一个参数决定选择哪个方法
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName">
       <value>action</value>
    </property>
</bean>
若maController这个Bean被URL为“test.go”所映射的话,这时就可以在URL中输入形如:
“http://192.168.0.21/abc/test.go?action=Method01”这时将由控制器MAController中的Method01来处理这个请求。这跟用HTML表单来表现用户的选择形式差不多,你来看
<form action="test.go">
 <select name="action">
  <option value="Method01"> method_01</option>
  <option value="Method02"> method_02</option>
  <option value="Method03"> method_03</option>
 </select>
</form>
这两种选择在形式上不同,但行为上和效果是相同的。
2、方法名解析器若用PropertiesMethodNameResolver,用
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    <property name="mappings">
       <props>
           <prop key="/methodA.go">Method01</prop>
           <prop key="/methodB.go">Method02</prop>
           <prop key="/methodC.go">Method03</prop>
       </props>
    </property>
</bean>
这时的URL就是如下的形式:
“http://192.168.0.21/abc/methodA.go”由此看来,PropertiesMethodNameResolver更先进一步,它是将URL直接映射到控制器的一个方法。通过这个映射文件,我们可以看到,PropertiesMethodNameResolver的用法和SimpleUrlHandlerMapping非常相似。

3、当然,映射文件中,在定义maController时,若没有提及methodNameResolver的话,就说明要使用缺省方式的解析器了,这时,要选择多动作控制器中的某一方法,就在URL中输入形如下面(假定maController映射到URL样式为“/method*.go”):
“http://192.168.0.21/abc/method01.go” 这个将被maController中的Method01方法处理。
分享到:
评论

相关推荐

    SpringMVC - MultiActionController

    MultiActionController的工作原理是基于方法名映射。它会将HTTP请求的URL与类中的方法进行匹配,如果方法名与请求路径匹配,那么该方法就会被调用。例如,一个名为`handleSave`的方法将会处理`/save`的请求。这种...

    spring mvc MultiActionController配置方法源码

    在Spring MVC中,`MultiActionController`是早期版本中的一个控制器类,它允许在一个控制器类中处理多个请求映射。然而,从Spring 3.0开始,`MultiActionController`已被废弃,取而代之的是更灵活、更面向注解的`@...

    spring mvc_04

    MultiActionController是Spring MVC中的一个抽象类,它是Controller接口的实现,设计用于处理多个请求映射。它通过方法名映射HTTP请求,即每个处理特定请求的方法名对应URL路径。例如,一个名为"handleRequest"的...

    spring mvc_03

    `MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController`,并提供了处理多个请求映射到同一控制器类中不同方法的能力。这个设计模式在Java Web开发中很常见,尤其是在面向过程编程思想...

    spring-ext-handler-mapping.rar_ext_spring ext_spring mvc

    本资源"spring-ext-handler-mapping"着重于扩展Spring的地址映射功能,使得开发者在使用Spring MVC进行Web开发时能够更加灵活和高效。 1. **扩展Spring HandlerMapping** Spring MVC默认提供了一些内置的...

    SpringMVC配置

    - 配置MultiActionController,它允许单个控制器处理多个请求方法,通过`ParameterMethodNameResolver`解析请求参数中的方法名。 - 配置ViewResolver,例如InternalResourceViewResolver,用于解析视图名称到具体...

    springMVC带上传文件

    首先,`MultiActionController`是Spring MVC早期版本中的一个控制器类,它可以处理多个请求映射到同一个控制器类的不同方法。在现代Spring MVC中,我们通常会使用`@Controller`注解和`@RequestMapping`注解来替代,...

    springmvcdemo

    3 URL Mapping: ControllerClassNameHandlerMapping 映射控制器 4 使用MultiActionController 5 所有service利用spring注入到controller中,利用注解 6 数据库连接串单独在properties文件配置 7 在spring中配置数据...

    Spring MVC 例子

    4. **MyBatis配置**:`mybatis-config.xml`文件定义了MyBatis的全局配置,而`.xml`映射文件则包含了具体的SQL语句。 5. **模型对象**:用于数据绑定和业务逻辑处理的Java类。 6. **服务接口和实现**:Spring的...

    外文翻译-Spring的web-MVC-构架模式 (2).pdf

    缺省控制器接口简单,可以支持多层控制结构,如AbstractController、AbstractCommandController、MultiActionController等。 - **模型与视图**:Spring的数据绑定机制允许灵活地操作和验证模型对象,而不局限于特定...

    spring_mvc注解入门

    在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...

    Spring MVC

    - **推荐使用**:建议每个请求对应一个控制器,对于复杂的流程可以考虑使用 `MultiActionController`。 #### 六、总结 Spring MVC 是一个高度灵活且功能强大的 Web 开发框架,它简化了 Web 应用程序的开发过程,...

    毕设外文文献翻译-Spring的webMVC构架模式 (3).docx

    Spring支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,它们提供了不同程度的抽象和灵活性。与Struts不同,Spring的控制器可以不需要继承特定的基础类,而是...

    SpringMVC教程及实现原理

    - 继承`MultiActionController`类以在单个控制器中实现多个方法处理不同的请求。 5. **配置控制器和URL映射**:在`spring-servlet.xml`文件中配置控制器和URL之间的映射关系。这一步类似于在Struts2中的`struts....

    (完整word版)SSM英文文献翻译.docx

    它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...

    springmvc注解详解

    在上面的例子中,@RequestMapping 注解定义了类级别的请求映射,所有的方法级别的请求映射都会加上"/departments"前缀。 3. @RequestParam 注解 @RequestParam 注解用来绑定请求参数,value:参数名,required:...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

Global site tag (gtag.js) - Google Analytics