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---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...
随着Spring的演进,推荐使用`@Controller`注解的类和`@RequestMapping`注解的方法,这种方式更简洁,更易读,也更易于测试和维护。此外,还可以结合`@PathVariable`、`@RequestParam`等注解来处理URL参数,使用`...
springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091
在早期Spring MVC版本中,MultiActionController是一个控制器基类,允许一个控制器类包含多个处理方法。PropertyMultiActionController可能是MultiActionController的一个变种,它可能通过属性(property)来决定...
### Spring的Web MVC架构模式详解 #### 一、Spring架构简介及特点 Spring是一个轻量级的开源Java应用框架,最初由Rod Johnson创建,并由Juergen Hoeller等人继续开发和完善。Spring框架的设计目的是简化企业级应用...
创建一个MultiActionController需要继承`org.springframework.web.servlet.mvc.MultiActionController`基类。然后,你可以定义多个处理方法,每个方法对应一个特定的请求。例如: ```java public class Test...
Spring MVC基于MVC(Model-View-Controller)设计模式,它将应用程序的业务逻辑(Model)、用户界面(View)和控制流程(Controller)分离,使得各部分职责明确,易于维护和扩展。Controller接收用户的请求,调用...
- Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...
尽管在现代Spring MVC应用中,我们通常会推荐使用基于注解的@Controller或@RestController,但理解MultiActionController的工作原理仍然对学习Spring MVC的历史和演进有所帮助。 **1. MultiActionController介绍** ...
然而,随着Spring MVC的发展,`MultiActionController`逐渐被更现代、更灵活的`@Controller`注解和基于方法的映射所取代。现在,我们通常推荐使用`@RequestMapping`来定义请求映射,它可以更精确地控制HTTP方法(GET...
- **Controller**: 控制器接口,定义了`ModelAndView handleRequest(request, response)`方法,用于处理请求并返回视图模型。Spring提供多种抽象控制器类,如AbstractController、AbstractCommandController、...
这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...
它遵循 MVC(Model-View-Controller)设计模式,能够清晰地将业务逻辑、用户界面和控制流程分离,从而使应用程序具有更高的可维护性和可扩展性。 #### 二、Spring MVC 的核心组件 ##### 1. DispatcherServlet - **...
本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...
【Spring的Web-MVC构架模式】是Spring框架的核心组件之一,主要负责处理Web应用程序的请求和响应。本文档是对Spring Web MVC模式的外文翻译,深入解析了Spring如何在Web开发中提供灵活且可扩展的架构。 1. **Spring...
【Spring的Web-MVC构架模式】 Spring框架的Web-MVC模块是其核心特性之一,旨在简化构建基于Java的Web应用程序的过程。该架构模式与其他轻量级应用框架,如Struts和Webwork,有着显著的区别。Spring不仅仅是一个Web...
与Struts相比,Spring Web MVC的控制器接口更简单,允许开发者根据需求选择不同类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,无需强制使用特定的FormController。...
在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...