`

MultiActionController中的处理方法映射

阅读更多

http://blog.chinaunix.net/uid-20415521-id-1949855.html

一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(MultiActionController),

MultiActionController是一个特殊类型的控制器,它可实现多个动作。而该控制器中的每个动作分派给不同的方法,其实多控制器中的每个方法实现的是类似的功能,每个方法代表了一个可以由一个单独控制器完成的动作。

那么这样的控制器里的诸多方法,是怎样选择执行的呢?MultiActionController对此有一个名为“方法名解析器”的东东来做这项工作。

MultiActionController中的方法名解析器共有三个:

0InternalPathMethodNameResolver——这是MultiActionController的缺省情况下的方法名解析器,它是根据URL样式来解析方法名的。(实际上就是根据URL中的“文件名部分”决定的)。

除了上面的缺省的解析器外,MultiActionController还有两个方法名解析器:

1ParameterMethodNameResolver——根据请求中的参数来解析并执行方法名。

2PropertiesMethodNameResolver——根据查询一个key/value列表来解析并执行方法名。

 

 

举个例子吧,

比如说,有一个名为MAController的控制器,MultiActionController的子类,它有里边有三个方法分别是method01method02method03。其代码如下:

 

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这个BeanURL为“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方法处理。

 

分享到:
评论

相关推荐

    springmvcdemo

    下载之后您只需要1.根据实体类创建数据库 2.jdbc.property填写正确 3.项目加载 运行 这里你将学习到: ...10 利用spring提供的lobHandler处理数据库中的lob列 11 利用log4j输出程序日志 12 无刷新翻页

    Spring中文帮助文档

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons...

    Spring-Reference_zh_CN(Spring中文参考手册)

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8...

    spring chm文档

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select...

    Spring API

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    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 小结 第十一章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    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 小结 第十一章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    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 小结 第十一章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    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 小结 第十一章 ...

    Spring 2.0 开发参考手册

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select...

Global site tag (gtag.js) - Google Analytics