`

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

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

    spring mvc_04

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

Global site tag (gtag.js) - Google Analytics