转自:http://www.blogjava.net/wyz191/archive/2007/03/02/101413.html?opt=admin
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.Exception或java.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 3.0开始,`MultiActionController`已被废弃,取而代之的是更灵活、更面向注解的`@...
在这个最简化教程中,我们将深入理解如何使用MultiActionController以及其在实际应用中的优缺点。 首先,了解SpringMVC的基本架构是必要的。它主要由DispatcherServlet、Controllers、Models、Views和Handlers等...
Spring MVC MultiActionController---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...
springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091
在本教程"spring mvc_04"中,我们将深入探讨如何使用MultiActionController来实现静态资源的访问。尽管在现代Spring MVC应用中,我们通常会推荐使用基于注解的@Controller或@RestController,但理解...
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. ...
在Spring MVC框架中,`MultiActionController`是一个古老但仍然值得一提的概念。它是Spring MVC早期版本中用于处理HTTP请求的一种控制器实现。在这个主题“spring mvc_03”中,我们将深入探讨`MultiActionController...
在这个项目中,我们使用了`MultiActionController`来处理多种请求,包括查询、保存数据以及文件上传。 首先,`MultiActionController`是Spring MVC早期版本中的一个控制器类,它可以处理多个请求映射到同一个控制器...
本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...
PropertyMultiActionController可能是MultiActionController的一个变种,它可能通过属性(property)来决定调用哪个处理方法,增强了灵活性。不过,随着Spring MVC的发展,这种方式已经被注解驱动的Controller所取代...
4 使用MultiActionController 5 所有service利用spring注入到controller中,利用注解 6 数据库连接串单独在properties文件配置 7 在spring中配置数据源,属性使用properties文件中的配置 8 利用JdbcTemplate操作...
对于处理多个请求的方法,可以使用`MultiActionController`,并通过`MethodNameResolver`来决定调用哪个方法。 总的来说,Spring MVC是一个强大且灵活的Web开发框架,它通过注解驱动、模型-视图-控制器的设计模式...
在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...
这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...
比如,AbstractCommandController用于自动填充命令对象的请求参数,而MultiActionController允许在同一个类中定义多个处理方法,这样可以更好地组织代码。 ModelAndView类提供了多种构造函数,方便开发者根据不同的...
它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...
控制器可以通过多种方式实现,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController、AbstractWizardFormController等,根据应用需求选择合适的基类。与Struts相比,...
Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...
- Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...
Spring提供多种抽象控制器类,如AbstractController、AbstractCommandController、MultiActionController等,以适应不同的应用场景。 - **ModelAndView**: 包含模型数据和视图信息,用于将处理结果传递给视图层。 ...