MultiActionController中的处理方法映射
2013-04-03 16:50
405 查看
一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(MultiActionController),
MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。
那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。
MultiActionController中的方法名解析器共有三个:
0、InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。
除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:
1、ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。
2、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://…/test.go?action=Method01”
这时将由控制器MAController中的Method01来处理这个请求。这跟用HTML表单来表现用户的选择形式差不多,你来看
<form action="test.go">
…
Sort by: <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://…/methodA.go”
由此看来,PropertiesMethodNameResolver更先进一步,它是将URL直接映射到控制器的一个方法。通过这个映射文件,我们可以看到,PropertiesMethodNameResolver的用法和SimpleUrlHandlerMapping非常相似。
0、当然,映射文件中,在定义maController时,若没有提及methodNameResolver的话,就说明要使用缺省方式的解析器了,这时,要选择多动作控制器中的某一方法,就在URL中输入形如下面(假定maController映射到URL样式为“/method*.go”):
http://…/method01.go
这个将被maController中的Method01方法处理。
MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。
那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。
MultiActionController中的方法名解析器共有三个:
0、InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。
除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:
1、ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。
2、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://…/test.go?action=Method01”
这时将由控制器MAController中的Method01来处理这个请求。这跟用HTML表单来表现用户的选择形式差不多,你来看
<form action="test.go">
…
Sort by: <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://…/methodA.go”
由此看来,PropertiesMethodNameResolver更先进一步,它是将URL直接映射到控制器的一个方法。通过这个映射文件,我们可以看到,PropertiesMethodNameResolver的用法和SimpleUrlHandlerMapping非常相似。
0、当然,映射文件中,在定义maController时,若没有提及methodNameResolver的话,就说明要使用缺省方式的解析器了,这时,要选择多动作控制器中的某一方法,就在URL中输入形如下面(假定maController映射到URL样式为“/method*.go”):
http://…/method01.go
这个将被maController中的Method01方法处理。
相关文章推荐
- 在使用 百度编辑器 Ueditor 时,不能进入 Controller 相应的 Action 的处理方法
- SpringMVC-MultiActionController默认方法名解析器
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- MultiActionController 的方法
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Spring MVC增强型Controller-MultiActionController 使用方法
- (不推荐使用)springMVC基本配置+继承MultiActionController来实现根据参数名指定要请求的方法
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射 (
- spring mvc 源码(二) MultiActionController 处理流程(转)
- 在同一控制器类中处理多个请求的MultiActionController
- Spring MVC增强型Controller-MultiActionController 使用方法
- 在同一控制器类中处理多个请求的MultiActionController
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- 高性能libcurl配合epoll的curl_multi_socket_action方法使用
- Controller类中方法返回值的处理
- struts表单中多个submit的处理方法:org.apache.struts.actions.DispatchAction
- Spring MVC 教程,快速入门,深入分析――请求如何映射到具体的Action中的方法?
- 使用<a>标签调用struts2的action、传递动态参数、以及参数中出现加号等特殊字符的处理方法
- Spring架构增强MultiActionController