首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

MultiActionController的照射

2012-10-07 
MultiActionController的映射相对于其他控制器,SpringMVC的特点是拥有多种控制器,虽说这种控制器照猫画

MultiActionController的映射
相对于其他控制器,SpringMVC的特点是"拥有多种控制器",虽说这种控制器照猫画虎的使用起来非常简单,但是如果是自己创建一个应用的话,如何选择Controller还是一个比较有深度的问题。所以掌握每个Controller将是使用好SpringMVC的重要重要前提。下边的文章是我转载的:(源地址 http://ccbwm.spaces.live.com/blog/cns!41D66FDD19ED0FB!303.entry)??????? 一般情况下,一个控制器只处理一个动作,这有很大的局限性,若要实现几个相似的功能,应该使用“多动作控制器”(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="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方法处理。

热点排行