`

Spring学习笔记----MultiActionController

阅读更多

文档: MultiActionController

Spring提供一个多动作控制器,使用它你可以将几个动作合并在一个控制器里,这样可以把功能组合在一起。多动作控制器存在在一个单独的包中——org.springframework.web.mvc.multiaction——它能够将请求映射到方法名,然后调用正确的方法。比如当你在一个控制器中有很多公共的功能,但是想多个入口到控制器使用不同的行为,使用多动作控制器就特别方便。

MultiActionController 提供的功能

功能 解释
delegate MultiActionController有两种使用方式。第一种是继承MultiActionController,并在子类中指定由MethodNameResolver解析的方法(这种情况下不需要这个配置参数),第二种是你定义了一个代理对象,由它调用Resolver解析的方法。如果你是这种情况,你必须使用这个配置参数定义代理对象
methodNameResolver 由于某种原因,MultiActionController需要基于收到的请求解析它必须调用的方法。你可以使用这个配置参数定义一个解析器

一个多动作控制器的方法需要符合下列格式:

				// actionName can be replaced by any methodname
ModelAndView actionName(HttpServletRequest, HttpServletResponse);
		

由于MultiActionController不能判断方法重载(overloading),所以方法重载是不允许的。此外,你可以定义exception handlers,它能够处理从你指定的方法中抛出的异常。包含异常处理的动作方法需要返回一个ModelAndView对象,就象其它动作方法一样,并符合下面的格式:

				// anyMeaningfulName can be replaced by any methodname
ModelAndView anyMeaningfulName(HttpServletRequest, HttpServletResponse, ExceptionClass);
		

ExceptionClass可以是任何异常,只要它是java.lang.Exceptionjava.lang.RuntimeException的子类。

MethodNameResolver 根据收到的请求解析方法名。有三种解析器可以供你选择,当然你可以自己实现解析器。

  • ParameterMethodNameResolver - 解析请求参数,并将它作为方法名(http://www.sf.net/index.view?testParam=testIt的请求就会调用testIt(HttpServletRequest,HttpServletResponse))。使用paramName配置参数可以调整所检查的参数

  • InternalPathMethodNameResolver - 从路径中获取文件名作为方法名(http://www.sf.net/testing.view的请求会调用testing(HttpServletRequest, HttpServletResponse)方法)

  • PropertiesMethodNameResolver - 使用用户定义的属性对象将请求的URL映射到方法名。当属性定义/index/welcome.html=doIt,并且收到/index/welcome.html的请求,就调用doIt(HttpServletRequest, HttpServletResponse)方法。这个方法名解析器需要使用PathMatcher 所以如果属性包含/**/welcom?.html,该方法也会被调用!

我们来看一组例子。首先是一个使用ParameterMethodNameResolver和代理属性<继承MultiActionController>的例子,它接受包含参数名的请求

例一:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;

public class ProductController{
 
  public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {

      response.getOutputStream().print("Viewing");
      return null;
  }

  public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception {
      
      response.getOutputStream().print("index");
      return null;
  }
}

*-servlet.xml配置:

<!--配置MultiActionController使用的方法对应策略ParameterMehtodNameResolver,用于解析请求中的特定参数的值,将该值作为方法名调用-->
<bean id="paramResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName" value="method"></property>
 </bean>
<!--配置MultiActionController,因为使用delegate,所以需要配置delegate和methodNameResolver两个属性,两个属性分别指明该MultiActionController的方法解析策略和delegate-->
 <bean name="/disp.sp" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
     <property name="methodNameResolver" ref="paramResolver"></property>
     <property name="delegate" ref="productController"></property>
 </bean>
<!--配置MultiActionController所依赖的delegate-->
   <bean id="productController" class="com.wz.xktj.controller.ProductController" />

测试URL:http://localhost:8080/xktj/disp.sp?method=view

例二:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class TestMultiactionController extends MultiActionController {

 public ModelAndView view(HttpServletRequest request,HttpServletResponse response) throws Exception{
  
  response.getOutputStream().println("this is test!!!");
  return null;
 }
 
 public ModelAndView add(HttpServletRequest request,HttpServletResponse response) throws Exception{
  
  response.getOutputStream().println("test add......");
  return null;
 }
}


*-servlet.xml配置:

<bean id="MethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName" value="method"></property>
    <property name="defaultMethodName" value="view"></property>
   </bean>
   <bean name="/muti.sp" class="com.wz.xktj.controller.TestMultiactionController">
    <property name="methodNameResolver" ref="MethodNameResolver"></property>
 </bean>

测试URL:http://localhost:8080/xktj/muti.sp?method=view

分享到:
评论

相关推荐

    Spring MVC MultiActionController---多动作控制器

    Spring MVC MultiActionController---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...

    springMVC3学习(五)--MultiActionController(源码)

    springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091

    spring-ext-handler-mapping.rar_ext_spring ext_spring mvc

    在早期Spring MVC版本中,MultiActionController是一个控制器基类,允许一个控制器类包含多个处理方法。PropertyMultiActionController可能是MultiActionController的一个变种,它可能通过属性(property)来决定...

    spring-framework-3.0.6.RELEASE-with-docs.zip

    《Spring框架3.0.6.RELEASE深度解析》 Spring框架是Java开发中的核心组件,以其模块化、可扩展性和企业级应用支持而备受推崇。3.0.6.RELEASE版本是Spring发展的一个重要里程碑,它引入了许多改进和新特性,使得开发...

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

    它提供了一个简单的控制器接口,如`ModelAndView.handleRequest(request, response)`,并支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和...

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

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

    毕设 外文文献翻译--Spring的web-MVC-构架模式

    Spring提供了多种类型的控制器,如`AbstractController`、`AbstractCommandController`、`MultiActionController`等,以满足不同的应用场景。 3. **视图**:负责将模型数据转化为用户界面。Spring支持多种视图技术,...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    - Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...

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

    Spring提供多种抽象控制器类,如AbstractController、AbstractCommandController、MultiActionController等,以适应不同的应用场景。 - **ModelAndView**: 包含模型数据和视图信息,用于将处理结果传递给视图层。 ...

    计算机外文翻译-Spring的web-MVC-构架模式.docx

    Spring MVC提供了一系列的抽象控制器,如`AbstractController`、`AbstractCommandController`、`MultiActionController`等,帮助开发者实现更复杂的控制逻辑。与Struts相比,Spring MVC允许开发者根据需求选择合适的...

    spring mvc MultiActionController配置方法源码

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

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

    与Struts相比,Spring Web MVC的控制器接口更简单,允许开发者根据需求选择不同类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,无需强制使用特定的FormController。...

    SpringMVC - MultiActionController

    创建一个MultiActionController需要继承`org.springframework.web.servlet.mvc.MultiActionController`基类。然后,你可以定义多个处理方法,每个方法对应一个特定的请求。例如: ```java public class Test...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与...

    SpringMVC教程及实现原理

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

    spring chm文档

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. ...

    springmvc 学习笔记

    为了处理多个请求,Spring MVC 提供了 `MultiActionController` 类,该类允许你为每个请求定义一个方法。方法签名需要包含 HTTP 请求类型(GET、POST 等)和响应类型。每个方法处理一个特定的请求,并通过 `...

    spring与struts的整合

    ### Spring与Struts的整合知识点 #### 一、Spring与Struts概述 - **Spring**:是一个开源框架,被广泛用于Java应用的开发之中。它提供了广泛的基础设施支持,包括依赖注入(Dependency Injection, DI)、面向切面...

    Spring入门

    ### Spring入门知识点详解 #### Spring框架概述 - **Spring**是一个开源框架,旨在简化企业级应用的开发。作为一款轻量级的Java平台框架,Spring提供了广泛的解决方案,从基础的依赖注入(DI)到复杂的事务管理和...

Global site tag (gtag.js) - Google Analytics