`
wangzhen5
  • 浏览: 80773 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

Spring MVC增强型Controller-MultiActionController 使用方法

阅读更多
Spring MVC增强型Controller-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是ParameterMethodNameResolver或PropertiesMethodNameResolver,它们都是根据请求的参数来决定使用那个方法。例如,如果定义这个请求参数为method,则路径为xxx.htm?method=getlist时,就会执行指定controller的getlist方法。

首先定义我们的Controller
其中有两个不同的业务方法courseSortByList和courseSortByName
package Action;

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 DispathActionController extends MultiActionController ...{
   private String listView;
   private String nameView;
   public String getListView() ...{
    return listView;
}
public void setListView(String listView) ...{
    this.listView = listView;
}
public String getNameView() ...{
    return nameView;
}
public void setNameView(String nameView) ...{
    this.nameView = nameView;
}
public DispathActionController()...{
      
   }
   public ModelAndView courseSortByList(HttpServletRequest request,HttpServletResponse response)...{
      
       return new ModelAndView(this.getListView());
   }
   public ModelAndView courseSortByName(HttpServletRequest request,HttpServletResponse response)...{
       return new ModelAndView(this.getNameView());
   }
}


同时建立sortByList和sortByName两个jsp文件

我们有三种使用方式
(1)使用URL
           配置文件如下:
        <bean id="simpleUrlMapping"

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
   <props>
     <prop key="/home.mvc">HomeController</prop>
     <prop key="/register.mvc">RegisterStudentController</prop>
     <prop key="/feedback.mvc">FeedbackController</prop>
     <prop key="/course*.mvc">multiactionController</prop>  <!---用*代表所有course开头的url path->
   </props>
</property>
</bean>


<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
    <value>/</value>
  </property>
  <property name="suffix">
    <value>.jsp</value>
  </property>
</bean>

<!-- 使用MuitlActionController控制器及URL方式访问-->
<bean id="multiactionController" class="Action.DispathActionController">
  <property name="listView"><value>dispatch/sortByList</value></property>
  <property name="nameView"><value>dispatch/sortByName</value></property>
</bean>
使用这种方式,我们访问两个方法的url分别为  方法名.mvc

http://localhost:81/SpringMVCStudy/courseSortByList.mvc
http://localhost:81/SpringMVCStudy/courseSortByName.mvc

(2)解析方法名的方式

   有两种细分,第一是用一个参数(类似struts的dispathAction),第二种是直接配置url mapping

  第一种方式配置文件

 

<bean id="simpleUrlMapping"

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
   <props>
     <prop key="/home.mvc">HomeController</prop>
     <prop key="/register.mvc">RegisterStudentController</prop>
     <prop key="/feedback.mvc">FeedbackController</prop>
     <prop key="/course.mvc">multiactionController</prop>
   </props>
</property>
</bean>

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
    <value>/</value>
  </property>
  <property name="suffix">
    <value>.jsp</value>
  </property>
</bean>

<bean id="multiactionController" class="Action.DispathActionController">
<property name="listView"><value>dispatch/sortByList</value></property>
  <property name="nameView"><value>dispatch/sortByName</value></property>
<property name="methodNameResolver">
   <ref bean="methodNameResolver"/>
</property>
</bean>

<bean id="methodNameResolver"

class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName">
    <value>action</value>
  </property>
</bean>

使用这种方式,我们访问两个方法的url分别为  action=方法
http://localhost:81/SpringMVCStudy/course.mvc?action=courseSortByList
http://localhost:81/SpringMVCStudy/course.mvc?action=courseSortByName

  第二种方式配置文件



<bean id="simpleUrlMapping"

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
   <props>
     <prop key="/home.mvc">HomeController</prop>
     <prop key="/register.mvc">RegisterStudentController</prop>
     <prop key="/feedback.mvc">FeedbackController</prop>
     <prop key="/course.mvc">multiactionController</prop>
   </props>
</property>
   <property name="defaultHandler" ref="multiactionController"/>  <!---这个很重要,把multiactionController配置到           
                                                                                                            SimpleUrlHandlerMapping-,否则无法识别mapping>
</bean>

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
    <value>/</value>
  </property>
  <property name="suffix">
    <value>.jsp</value>
  </property>
</bean>

<!-- 使用MuitlActionController控制器及mapping参数方式访问-->


<bean id="multiactionController" class="Action.DispathActionController">
  <property name="listView"><value>dispatch/sortByList</value></property>
  <property name="nameView"><value>dispatch/sortByName</value></property>
  <property name="methodNameResolver">
    <ref bean="methodNameResolver"/>
  </property>
</bean>

<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
  <props>
     <prop key="/courseList.mvc">courseSortByList</prop>
     <prop key="/courseName.mvc">courseSortByName</prop>
  </props>
</property>
</bean>

分享到:
评论

相关推荐

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

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

    spring mvc MultiActionController配置方法源码

    随着Spring的演进,推荐使用`@Controller`注解的类和`@RequestMapping`注解的方法,这种方式更简洁,更易读,也更易于测试和维护。此外,还可以结合`@PathVariable`、`@RequestParam`等注解来处理URL参数,使用`...

    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的web-MVC-构架模式

    ### Spring的Web MVC架构模式详解 #### 一、Spring架构简介及特点 Spring是一个轻量级的开源Java应用框架,最初由Rod Johnson创建,并由Juergen Hoeller等人继续开发和完善。Spring框架的设计目的是简化企业级应用...

    SpringMVC - MultiActionController

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

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

    Spring MVC基于MVC(Model-View-Controller)设计模式,它将应用程序的业务逻辑(Model)、用户界面(View)和控制流程(Controller)分离,使得各部分职责明确,易于维护和扩展。Controller接收用户的请求,调用...

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

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

    spring mvc_04

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

    spring mvc_03

    然而,随着Spring MVC的发展,`MultiActionController`逐渐被更现代、更灵活的`@Controller`注解和基于方法的映射所取代。现在,我们通常推荐使用`@RequestMapping`来定义请求映射,它可以更精确地控制HTTP方法(GET...

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

    - **Controller**: 控制器接口,定义了`ModelAndView handleRequest(request, response)`方法,用于处理请求并返回视图模型。Spring提供多种抽象控制器类,如AbstractController、AbstractCommandController、...

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

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

    Spring MVC

    它遵循 MVC(Model-View-Controller)设计模式,能够清晰地将业务逻辑、用户界面和控制流程分离,从而使应用程序具有更高的可维护性和可扩展性。 #### 二、Spring MVC 的核心组件 ##### 1. DispatcherServlet - **...

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

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

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

    【Spring的Web-MVC构架模式】是Spring框架的核心组件之一,主要负责处理Web应用程序的请求和响应。本文档是对Spring Web MVC模式的外文翻译,深入解析了Spring如何在Web开发中提供灵活且可扩展的架构。 1. **Spring...

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

    【Spring的Web-MVC构架模式】 Spring框架的Web-MVC模块是其核心特性之一,旨在简化构建基于Java的Web应用程序的过程。该架构模式与其他轻量级应用框架,如Struts和Webwork,有着显著的区别。Spring不仅仅是一个Web...

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

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

    spring_mvc注解入门

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

Global site tag (gtag.js) - Google Analytics