`

Spring的MultiActionController使用

阅读更多

            Spring借鉴Struts的DispatchAction提供了类似功能的MultiActionController。可以实现不同的请求路径对应MultiActionController中的不同方法,这样就可以把相关的操作都在一个类的相关方法中完成。

               在使用Spring提供的控制器时,AbstractController和SimpleFormController是应用得最多的。AbstractController是最基本的Controller,可以给予用户最大的灵活性。SimpleFormController则用于典型的表单编辑和提交。在一个需要增,删,改,查的需求中,增加和修改扩展SimpleFormController完成,删除和查询则扩展AbstractController完成。

             但是像上面那样完成某一业务对象的增,删,改,查,都属于一类相关的业务。把一类相关的操作分布到不同的类去完成,违返“高内聚”的设计原则。这样四个业务操作需要四个类来完成,造成太多的类文件,难以维护和配置。

             所以Spring借鉴Struts的DispatchAction提供了类似功能的MultiActionController。可以实现不同的请求路径对应MultiActionController中的不同方法,这样就可以把相关的操作都在一个类的相关方法中完成。这样使得这个类具有“高内聚”,也利于系统的维护,还避免了重复代码。增加和修改操作的数据验证逻辑是很相似的,使用MultiActionController后就可以让增加和修改操作共用一段数据验证逻辑代码。

下面我们来看具体的使用方法:

     MultiActionController有两种使用方式。第一种是你继承MultiActionController,并在子类中指定由MethodNameResolver解析的方法(这种情况下不需要这个delegate参数)。第二种是你定义一个代理对象,由它提供MethodNameResolver解析出来的方法(这种情况下,你必须使用这个配置参数定义代理对象)。

第一种方法是:让你的控制器继承 MultiActionController:

java 代码
  1. import java.util.HashMap;   
  2. import java.util.Map;   
  3.   
  4. import javax.servlet.http.HttpServletRequest;   
  5. import javax.servlet.http.HttpServletResponse;   
  6.   
  7. import org.springframework.web.servlet.ModelAndView;   
  8. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;   
  9.   
  10. public class WelcomeController extends MultiActionController {   
  11.   
  12.     private String successView;   
  13.   
  14.     public ModelAndView showList(HttpServletRequest req,   
  15.             HttpServletResponse resp) {   
  16.         Map model = new HashMap();   
  17.         model.put("success""成功");   
  18.         return new ModelAndView(this.getSuccessView(), model);   
  19.     }   
  20.   
  21.     public ModelAndView addUser(HttpServletRequest req,   
  22.             HttpServletResponse resp) {   
  23.         Map model = new HashMap();   
  24.         model.put("success""增加用户成功");   
  25.         return new ModelAndView(this.getSuccessView(), model);   
  26.     }   
  27.   
  28.     public String getSuccessView() {   
  29.         return successView;   
  30.     }   
  31.   
  32.     public void setSuccessView(String successView) {   
  33.         this.successView = successView;   
  34.     }   
  35.   
  36. }   

相应的Spring的配置文件是:

xml 代码
  1. <bean id="viewResolver"  
  2. <bean id="bbsSimpleUrlHandlerMapping"  
  3.     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  4.     <property name="mappings">  
  5.         <props>  
  6.                             <prop key="welcome.html">welcomeController</prop>  
  7.         </props>  
  8.     </property>  
  9. </bean>  
  10.   
  11. <!-- 多请求处理控制器 -->  
  12.    <bean id="paraMethodResolver"    
  13.        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">    
  14.        <property name="paramName">  
  15.         <value>method</value>  
  16.        </property>    
  17.     </bean>    
  18.   
  19. <bean id="welcomeController" class="com.iwebplatform.web.mvc.WelcomeController">  
  20.     <property name="methodNameResolver">  
  21.         <ref bean="paraMethodResolver"/>  
  22.     </property>  
  23.     <property name="successView">  
  24.         <value>bbsweb/welcome</value>  
  25.     </property>  
  26. </bean>  
  27.   class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  28.   <property name="prefix" value="/WEB-INF/page/" />  
  29.   <property name="suffix" value=".jsp" />  
  30.  </bean> 

第二种是使用代理对象:我们可以将所有对应的方法组织在一个代理组件(MultiActionController)中,而不是写在Controller中当请求到来的时候,将委托给这个组建来执行指定的方法,你只要定义MultiActionController的delegate属性即可。

java代码

  1. import java.util.HashMap;   
  2. import java.util.Map;   
  3.   
  4. import javax.servlet.http.HttpServletRequest;   
  5. import javax.servlet.http.HttpServletResponse;   
  6.   
  7. import org.springframework.web.servlet.ModelAndView;   
  8.   
  9. public class WelcomeController  {   
  10.   
  11.     private String successView;   
  12.   
  13.     public ModelAndView showList(HttpServletRequest req,   
  14.             HttpServletResponse resp) {   
  15.         Map model = new HashMap();   
  16.         model.put("success""成功");   
  17.         return new ModelAndView(this.getSuccessView(), model);   
  18.     }   
  19.   
  20.     public ModelAndView addUser(HttpServletRequest req,   
  21.             HttpServletResponse resp) {   
  22.         Map model = new HashMap();   
  23.         model.put("success""增加用户成功");   
  24.         return new ModelAndView(this.getSuccessView(), model);   
  25.     }   
  26.   
  27.     public String getSuccessView() {   
  28.         return successView;   
  29.     }   
  30.   
  31.     public void setSuccessView(String successView) {   
  32.         this.successView = successView;   
  33.     }   
  34.   
  35. }   

相应的配置文件:

xml 代码
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>       
  2. <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">       
  3. <beans>     
  4.  <bean id="viewResolver"  
  5.   class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  6.   <property name="prefix" value="/WEB-INF/page/" />  
  7.   <property name="suffix" value=".jsp" />  
  8.  </bean>     
  9.     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">       
  10.         <property name="mappings">       
  11.             <props>       
  12.                 <prop key="welcome.html">welcomeAction</prop>       
  13.             </props>       
  14.         </property>       
  15.     </bean>       
  16.      
  17.     <bean id="paraMethodResolver"       
  18.         class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">       
  19.         <property name="paramName"><value>method</value></property>       
  20.         <property name="defaultMethodName"><value>lshowList</value></property>       
  21.     </bean>       
  22.      
  23.     <bean id="welcomeController" class="com.iwebplatform.web.mvc.WelcomeController">     
  24.         <property name="methodNameResolver">     
  25.             <ref bean="paraMethodResolver"/>     
  26.         </property>     
  27.         <property name="successView">     
  28.             <value>bbsweb/welcome</value>     
  29.         </property>     
  30.     </bean>     
  31.           
  32.     <bean id="welcomeAction" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">       
  33.         <property name="methodNameResolver">       
  34.             <ref bean="paraMethodResolver"/>       
  35.         </property>       
  36.         <property name="delegate">       
  37.             <ref bean="welcomeController"/>       
  38.         </property>       
  39.     </bean>          
  40. </beans>     

 

 

 

分享到:
评论

相关推荐

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

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

    spring mvc MultiActionController配置方法源码

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

    SpringMVC - MultiActionController

    在这个最简化教程中,我们将深入理解如何使用MultiActionController以及其在实际应用中的优缺点。 首先,了解SpringMVC的基本架构是必要的。它主要由DispatcherServlet、Controllers、Models、Views和Handlers等...

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

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

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

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    开源框架 Spring Gossip

    管理 Bean 从第一个 Spring 应用程式开始,逐步了解何谓依赖注入,以及如何使用 Spring 的容器功能来管理 Bean,了解 Bean 在 Spring 容器中的生命周期。 第一个 Spring 程式 BeanFactory、 ...

    spring mvc_04

    尽管在现代Spring MVC应用中,我们通常会推荐使用基于注解的@Controller或@RestController,但理解MultiActionController的工作原理仍然对学习Spring MVC的历史和演进有所帮助。 **1. MultiActionController介绍** ...

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

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

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

    spring-ext-handler-mapping.rar_ext_spring ext_spring mvc

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

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

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

    3.0.6.RELEASE版本引入了诸如ContentNegotiatingViewResolver和MultiActionController等改进,以支持多种视图技术,并提高了处理HTTP请求的效率。此外,@RequestMapping注解可以更精确地映射URL到处理方法,提供更...

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

    第十章 使用Spring快速实现Web开发 10.1 Spring介绍 10.1.1 Spring简介 10.1.2 下载Spring 10.1.3 配置Spring 10.2 Spring核心思想 10.2.1 反向控制(IoC) 10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出...

    spring mvc_03

    在这个主题“spring mvc_03”中,我们将深入探讨`MultiActionController`的工作原理、使用场景以及与现代Spring MVC实践的对比。 `MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController...

    spring_mvc注解入门

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

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

    第十章 使用Spring快速实现Web开发 10.1 Spring介绍 10.1.1 Spring简介 10.1.2 下载Spring 10.1.3 配置Spring 10.2 Spring核心思想 10.2.1 反向控制(IoC) 10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出...

Global site tag (gtag.js) - Google Analytics