`

Spring-MultiActionController

阅读更多
如果为每个请求都设计一个controller的话,随着开发的进行,工程也一定会日渐庞大。当然,Spring框架提供了避免这种情况出现的方法,那就是使你的controller继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController。就像Struts里的DispatchAction一样,MultiActionController可以处理多个类似的请求。
   在Struts里,要使用DispatchAction只需要在其action的定义中加入parameter="method"即可。在Spring中,MultiActionController要配合一个org.springframework.web.servlet.mvc.multiaction.MethodNameResolver的实例使用(MethodNameResolver也是一个接口),但我个人认为这并不说明Spring比struts繁琐,在使用中自会体会到它的好处。
   MultiActionController的默认MethodNameResolver是org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver。这个实现类是依据请求的路径来决定执行MultiActionController的那个方法的。例如路径为:getlist.htm,则执行相应controller的getlist方法。在实际开发中,不提倡使用这个MethodNameResolver。
    一般情况下,MultiActionController搭配的MethodNameResolver是org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver或org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver,它们都是根据请求的参数来决定使用那个方法

UrlFileBuildAction.java
package org.dispenseModule.web;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dispenseModule.service.IUrlsService;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class UrlFileBuildAction extends MultiActionController{
 private String fail_view;
 private String success_view;
 
 private IUrlsService urlsService;
 
 public void setFail_view(String fail_view) {
  this.fail_view = fail_view;
 }
 public void setSuccess_view(String success_view) {
  this.success_view = success_view;
 }
   
 public void setUrlsService(IUrlsService urlsService) {
  this.urlsService = urlsService;
 }
 public ModelAndView htmlFile(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
       String urls=urlsService.getUrls("html");
       String filePath="F:/urlFile";
       try{
    File myFilePath = new File(filePath);
        if (!myFilePath.exists()) {
          myFilePath.mkdirs();
        }
        FileWriter write=new FileWriter(filePath+"/htmlUrl.txt");
        BufferedWriter writer=new BufferedWriter(write);
         writer.write(urls);
         writer.flush();
         String success = "生成成功";
         writer.close();
         writer.close();
         return new ModelAndView(this.success_view,"success",success);
       }catch(Exception e){
        String fail = "生成失败";
        return new ModelAndView(this.fail_view, "fail", fail);
       }
   
 }
 
 public ModelAndView ubbFile(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
       String urls=urlsService.getUrls("ubb");
       String filePath="F:/urlFile";
       try{
    File myFilePath = new File(filePath);
        if (!myFilePath.exists()) {
          myFilePath.mkdirs();
        }
        FileWriter write=new FileWriter(filePath+"/ubbUrl.txt");
        BufferedWriter writer=new BufferedWriter(write);
         writer.write(urls);
         writer.flush();
         String success = "生成成功";
         writer.close();
         writer.close();
         return new ModelAndView(this.success_view,"success",success);
       }catch(Exception e){
        String fail = "生成失败";
        return new ModelAndView(this.fail_view, "fail", fail);
       }
   
 }
}
一、使用ParameterMethodNameResolver
1、配置applicationContext.xml
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
 <property name="paramName">
   <value>method</value>
  </property>
  <property name="defaultMethodName">
   <value>htmlFile</value>
  </property>
我在测试过程中,如何没有设置defaultMethodName,都不能通过
2、配置applicationContext-action.xml
 <bean id="urlFileBuildAction" class="org.dispenseModule.web.UrlFileBuildAction">
       <property name="fail_view">
      <value>fail</value>
  </property>
  <property name="success_view">
   <value>success</value>
  </property>
  <property name="urlsService">
   <ref bean="urlsService" />
  </property>
  <property name="methodNameResolver">
    <ref bean="methodNameResolver"/>
  </property>
   </bean>

<bean id="handlerMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <!--  <property name="defaultHandler" ref="urlFileBuildAction"/>-->
  <property name="mappings">
   <props>
<prop key="/urlFileBuildAction.do">urlFileBuildAction</prop>
   </props>
  </property>
 </bean>
使用方法urlFileBuildAction.do?method=htmlFile

二、使用PropertiesMethodNameResolver

1、配置applicatonContext.xml

<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
 <property name="mappings">
<props>
<prop key="/urlhtmlFileBuildAction.do">htmlFile</prop>

<prop key="/urlubbFileBuildAction.do">ubbFile</prop>
</props>
</property>
</bean>

2、配置applicatonContext-action.xml

<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="defaultHandler" ref=" sampleMultiMethodController "/>
</bean>

 <bean id="urlFileBuildAction" class="org.dispenseModule.web.UrlFileBuildAction">
       <property name="fail_view">
      <value>fail</value>
  </property>
  <property name="success_view">
   <value>success</value>
  </property>
  <property name="urlsService">
   <ref bean="urlsService" />
  </property>
  <property name="methodNameResolver">
    <ref bean="methodNameResolver"/>
  </property>
   </bean>

使用urlhtmlFileBuildAction.do

分享到:
评论
1 楼 gimy 2009-03-19  
写的很清楚,谢谢!

相关推荐

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

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

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

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

    SpringMVC - MultiActionController

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

    spring mvc MultiActionController配置方法源码

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

    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

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

    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. 视图与...

    毕设 外文文献翻译--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

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

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

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

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

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

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

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

    SpringMVC教程及实现原理

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

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

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

    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. ...

    Spring 2.0 开发参考手册

    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. ...

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

    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 小结 第十一章 ...

    开源框架 Spring Gossip

    认识 Spring 来... AbstractController MultiActionController 与 ParameterMethodNameResolver MultiActionController 与 PropertiesMethodNameResolver ParameterizableViewController ...

Global site tag (gtag.js) - Google Analytics