http://blog.chinaunix.net/uid-20415521-id-1949855.html
一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(MultiActionController),
MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。
那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。
MultiActionController中的方法名解析器共有三个:
0、InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。
除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:
1、ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。
2、PropertiesMethodNameResolver——根据查询一个key/value列表来解析并执行方法名。
举个例子吧,
比如说,有一个名为MAController的控制器,是MultiActionController的子类,它有里边有三个方法分别是method01、method02、method03。其代码如下:
publicclass MAController extends MultiActionController {
public MAController () {}
public ModelAndView method01(
HttpServletRequest request, HttpServletResponse response) {
……
returnnew ModelAndView("courseList", "courses", courses);
}
public ModelAndView method02(
HttpServletRequest request, HttpServletResponse response) {
……
returnnew ModelAndView("courseList", "courses", courses);
}
public ModelAndView method03(
HttpServletRequest request, HttpServletResponse response) {
……
returnnew ModelAndView("courseList", "courses", courses);
}
private CourseService courseService;
publicvoid setCourseService(CourseService courseService) {
this.courseService = courseService;
}
……
}
然后,在映射文件中,它被映射到一个id值为“maController”的Bean,
<bean id="maController"
class="com.w3cs.vlar.training.mvc.MAController">
<property name="methodNameResolver">
<ref bean="methodNameResolver"/>
property>
bean>
1、此时方法名解析器若用ParameterMethodNameResolver,这时就会根据请求中的一个参数决定选择哪个方法
<bean id="methodNameResolver"
class="org.springframework.
web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName">
<value>actionvalue>
property>
bean>
若maController这个Bean被URL为“test.go”所映射的话,这时就可以在URL中输入形如:
“http://…/test.go?action=Method01”
这时将由控制器MAController中的Method01来处理这个请求。这跟用HTML表单来表现用户的选择形式差不多,你来看
<form action="test.go">
…
Sort by: <select name="action">
<option value="Method01"> method_01option>
<option value="Method02"> method_02option>
<option value="Method03"> method_03option>
select>
…
form>
这两种选择在形式上不同,但行为上和效果是相同的。
2、方法名解析器若用PropertiesMethodNameResolver,用
<bean id="methodNameResolver"
class="org.springframework.
web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/methodA.go">Method01prop>
<prop key="/methodB.go">Method02prop>
<prop key="/methodC.go">Method03prop>
props>
property>
bean>
这时的URL就是如下的形式:
“http://…/methodA.go”
由此看来,PropertiesMethodNameResolver更先进一步,它是将URL直接映射到控制器的一个方法。通过这个映射文件,我们可以看到,PropertiesMethodNameResolver的用法和SimpleUrlHandlerMapping非常相似。
0、当然,映射文件中,在定义maController时,若没有提及methodNameResolver的话,就说明要使用缺省方式的解析器了,这时,要选择多动作控制器中的某一方法,就在URL中输入形如下面(假定maController映射到URL样式为“/method*.go”):
http://…/method01.go
这个将被maController中的Method01方法处理。
相关推荐
在Spring MVC中,`MultiActionController`是早期版本中的一个控制器类,它允许在一个控制器类中处理多个请求映射。然而,从Spring 3.0开始,`MultiActionController`已被废弃,取而代之的是更灵活、更面向注解的`@...
在上面的代码中,`handleSave`方法处理保存操作,而`handleDelete`方法处理删除操作。`ModelAndView`对象用于返回视图和模型数据。 配置SpringMVC需要在XML配置文件中声明这个控制器。在`<bean>`标签内指定类名,...
使用MultiActionController处理静态资源的主要优点在于它可以让你在一个类中集中管理所有请求,但缺点也很明显:性能低下,因为每个请求都需要经过Spring MVC的完整生命周期,而且代码可维护性和可扩展性较差。...
`MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController`,并提供了处理多个请求映射到同一控制器类中不同方法的能力。这个设计模式在Java Web开发中很常见,尤其是在面向过程编程思想...
在Spring MVC框架中,地址映射(Handler Mapping)是核心组件之一,它负责将HTTP请求映射到相应的处理方法。本资源"spring-ext-handler-mapping"着重于扩展Spring的地址映射功能,使得开发者在使用Spring MVC进行Web...
其次,`MultiActionController`则是另一种控制器,它允许在一个控制器类中定义多个处理方法,每个方法对应不同的请求URL或HTTP动作。通过这种方法,可以将相关的处理逻辑集中在一个类中,提高了代码的组织性和复用性...
- 配置MultiActionController,它允许单个控制器处理多个请求方法,通过`ParameterMethodNameResolver`解析请求参数中的方法名。 - 配置ViewResolver,例如InternalResourceViewResolver,用于解析视图名称到具体...
首先,`MultiActionController`是Spring MVC早期版本中的一个控制器类,它可以处理多个请求映射到同一个控制器类的不同方法。在现代Spring MVC中,我们通常会使用`@Controller`注解和`@RequestMapping`注解来替代,...
9. **数据准备** - 在处理请求之前,可以通过 `@ModelAttribute` 注解的方法预先填充模型对象,这些方法会在每个请求处理方法之前调用。 综上所述,Spring MVC 的注解驱动功能极大地简化了控制器的配置,提高了代码...
在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...
在 `BbtForumController` 示例中,`@RequestMapping("/forum.do")` 用于类级别,表示所有该类中的处理方法都对应 `/forum.do` 这个 URL。而在 `listAllBoard` 方法上,单独的 `@RequestMapping` 指示该方法处理 GET ...
下载之后您只需要1.根据实体类创建数据库 2.jdbc.property填写正确 3.项目加载 运行 这里你将学习到: ...10 利用spring提供的lobHandler处理数据库中的lob列 11 利用log4j输出程序日志 12 无刷新翻页
- 继承`MultiActionController`类以在单个控制器中实现多个方法处理不同的请求。 5. **配置控制器和URL映射**:在`spring-servlet.xml`文件中配置控制器和URL之间的映射关系。这一步类似于在Struts2中的`struts....
为了处理多个请求,Spring MVC 提供了 `MultiActionController` 类,该类允许你为每个请求定义一个方法。方法签名需要包含 HTTP 请求类型(GET、POST 等)和响应类型。每个方法处理一个特定的请求,并通过 `...
`AnnotationMethodHandlerAdapter` 用于处理带有注解的方法。 ##### 4. ViewResolver - **作用**:视图解析器,用于将逻辑视图名解析为实际的视图对象。 - **实现**:Spring MVC 提供了多种视图解析器实现,如 `...
- **定义**:允许一个Controller类处理多个请求映射,根据不同的请求路径执行不同的处理方法。 - **示例**:定义一个MultiActionController,其中包含多个处理不同请求路径的方法。 #### Spring持久层支持 - **定义...
- **Controller**: 控制器接口,定义了`ModelAndView handleRequest(request, response)`方法,用于处理请求并返回视图模型。Spring提供多种抽象控制器类,如AbstractController、AbstractCommandController、...
- **DispatcherServlet**:Spring的Web MVC框架围绕DispatcherServlet构建,它负责分发请求并处理映射、视图解析、本地化等任务。缺省控制器接口简单,可以支持多层控制结构,如AbstractController、...