相对于其他控制器,SpringMVC的特点是"拥有多种控制器",虽说这种控制器照猫画虎的使用起来非常简单,但是如果是自己创建一个应用的话,如何选择Controller还是一个比较有深度的问题。所以掌握每个Controller将是使用好SpringMVC的重要重要前提。
一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(MultiActionController),MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。
MultiActionController中的方法名解析器共有三个:
1、InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:
2、ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。
3、PropertiesMethodNameResolver——根据查询一个key/value列表来解析并执行方法名。
举个例子吧,比如说,有一个名为MAController的控制器,是MultiActionController的子类,
它有里边有三个方法分别是method01、method02、method03。其代码如下:
public class MAController extends MultiActionController {
public MAController () {}
public ModelAndView method01(HttpServletRequest request, HttpServletResponse response) {
……
return new ModelAndView("courseList", "courses", courses);
}
public ModelAndView method02(HttpServletRequest request, HttpServletResponse response) {
……
return new ModelAndView("courseList", "courses", courses);
}
public ModelAndView method03(HttpServletRequest request, HttpServletResponse response) {
……
return new ModelAndView("courseList", "courses", courses);
}
private CourseService courseService;
public void 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>action</value>
</property>
</bean>
若maController这个Bean被URL为“test.go”所映射的话,这时就可以在URL中输入形如:
“http://192.168.0.21/abc/test.go?action=Method01”这时将由控制器MAController中的Method01来处理这个请求。这跟用HTML表单来表现用户的选择形式差不多,你来看
<form action="test.go">
<select name="action">
<option value="Method01"> method_01</option>
<option value="Method02"> method_02</option>
<option value="Method03"> method_03</option>
</select>
</form>
这两种选择在形式上不同,但行为上和效果是相同的。
2、方法名解析器若用PropertiesMethodNameResolver,用
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/methodA.go">Method01</prop>
<prop key="/methodB.go">Method02</prop>
<prop key="/methodC.go">Method03</prop>
</props>
</property>
</bean>
这时的URL就是如下的形式:
“http://192.168.0.21/abc/methodA.go”由此看来,PropertiesMethodNameResolver更先进一步,它是将URL直接映射到控制器的一个方法。通过这个映射文件,我们可以看到,PropertiesMethodNameResolver的用法和SimpleUrlHandlerMapping非常相似。
3、当然,映射文件中,在定义maController时,若没有提及methodNameResolver的话,就说明要使用缺省方式的解析器了,这时,要选择多动作控制器中的某一方法,就在URL中输入形如下面(假定maController映射到URL样式为“/method*.go”):
“http://192.168.0.21/abc/method01.go” 这个将被maController中的Method01方法处理。
分享到:
相关推荐
MultiActionController的工作原理是基于方法名映射。它会将HTTP请求的URL与类中的方法进行匹配,如果方法名与请求路径匹配,那么该方法就会被调用。例如,一个名为`handleSave`的方法将会处理`/save`的请求。这种...
在Spring MVC中,`MultiActionController`是早期版本中的一个控制器类,它允许在一个控制器类中处理多个请求映射。然而,从Spring 3.0开始,`MultiActionController`已被废弃,取而代之的是更灵活、更面向注解的`@...
MultiActionController是Spring MVC中的一个抽象类,它是Controller接口的实现,设计用于处理多个请求映射。它通过方法名映射HTTP请求,即每个处理特定请求的方法名对应URL路径。例如,一个名为"handleRequest"的...
`MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController`,并提供了处理多个请求映射到同一控制器类中不同方法的能力。这个设计模式在Java Web开发中很常见,尤其是在面向过程编程思想...
本资源"spring-ext-handler-mapping"着重于扩展Spring的地址映射功能,使得开发者在使用Spring MVC进行Web开发时能够更加灵活和高效。 1. **扩展Spring HandlerMapping** Spring MVC默认提供了一些内置的...
- 配置MultiActionController,它允许单个控制器处理多个请求方法,通过`ParameterMethodNameResolver`解析请求参数中的方法名。 - 配置ViewResolver,例如InternalResourceViewResolver,用于解析视图名称到具体...
首先,`MultiActionController`是Spring MVC早期版本中的一个控制器类,它可以处理多个请求映射到同一个控制器类的不同方法。在现代Spring MVC中,我们通常会使用`@Controller`注解和`@RequestMapping`注解来替代,...
3 URL Mapping: ControllerClassNameHandlerMapping 映射控制器 4 使用MultiActionController 5 所有service利用spring注入到controller中,利用注解 6 数据库连接串单独在properties文件配置 7 在spring中配置数据...
4. **MyBatis配置**:`mybatis-config.xml`文件定义了MyBatis的全局配置,而`.xml`映射文件则包含了具体的SQL语句。 5. **模型对象**:用于数据绑定和业务逻辑处理的Java类。 6. **服务接口和实现**:Spring的...
缺省控制器接口简单,可以支持多层控制结构,如AbstractController、AbstractCommandController、MultiActionController等。 - **模型与视图**:Spring的数据绑定机制允许灵活地操作和验证模型对象,而不局限于特定...
在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...
- **推荐使用**:建议每个请求对应一个控制器,对于复杂的流程可以考虑使用 `MultiActionController`。 #### 六、总结 Spring MVC 是一个高度灵活且功能强大的 Web 开发框架,它简化了 Web 应用程序的开发过程,...
Spring支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,它们提供了不同程度的抽象和灵活性。与Struts不同,Spring的控制器可以不需要继承特定的基础类,而是...
- 继承`MultiActionController`类以在单个控制器中实现多个方法处理不同的请求。 5. **配置控制器和URL映射**:在`spring-servlet.xml`文件中配置控制器和URL之间的映射关系。这一步类似于在Struts2中的`struts....
它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...
在上面的例子中,@RequestMapping 注解定义了类级别的请求映射,所有的方法级别的请求映射都会加上"/departments"前缀。 3. @RequestParam 注解 @RequestParam 注解用来绑定请求参数,value:参数名,required:...
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 小结 第十一章 ...
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 小结 第十一章 ...