Spring中MethodNameResolver的学习笔记:MultiActionController
(摘自API)Spring提供了MultiActionController来将多个请求处理方法合并在一个控制器里,这样可以把相关功能组合在一起。 (如果你很熟悉Struts,会发现这与Struts的DispatchAction很像) MultiActionController位于org.springframework.web.mvc.multiaction包中,它可以定义页面请求到控制器方法名的映射, 然后在处理相应请求时调用该方法。当你有很多比较小的且相关的功能时使用MultiActionController很方便,这样就不必为每个小功能创建 一个单独的Controller了。但是一般来说MultiActionController不适合处理复杂逻辑,或者完全不相关 的功能,这时应该坚持使用标准方法,当在一个控制器存在大量公共的行为,但是有多个调用入口时,使用MultiActionController就特别方便。
MultiActionController有两种使用方式:一是创建MultiActionController的子类,并指定将被 MethodNameResolver解析的方法(这种情况下不需要这个delegate参数);二是定义一个委托对象, MethodNameResolver解析出目标方法后将调用该对象的相应方法。这种情况下需要定义MultiActionController 的实例并将委托对象作为协作者注入(可通过构造参数或者setDelegate方法)。
Spring提供的MethodNameResolver的三种方式:主要记录第一种MultiActionController类
1 : ParameterMethodNameResolver,这个可以根据请求的参数来确定一个需要调
用的方法。类继承MultiActionController
例如,http://localhost:8080/ASDS/showCpll.htm?action=pdfDownload,这个
请求会调用名称为pdfDownload的处理方法。public ModelAndView showCpll
(HttpServletRequest request,
HttpServletResponse response, PageExtNative
page)throws Exception
{}
<bean name="/showCpll.htm"
ref="methodNameResolver" />
配置属性,这个属性在父类MultiActionController已提供,所以在
ShowCpllController类中不需要声明直接注入即可。不过在外面还要注入
methodNameResolver,它的类是
org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameRes
olver,根据参数选择方法。action就是参数,后接方法
<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethod
NameResolver">
<property name="paramName">
<value>action</value>
</property>
</bean>
2 : InternalPathMethodNameResolver,这个可以根据请求的路径名称来调用相
应的方法。
例如,http://www.sf.net/testing.view,这个请求会调用testing方法。
3 : PropertiesMethodNameResolver,这个可以根据一个URLs 映射列表来调用
相应的方法。
例如,如果定义了/index/welcome.html=doIt,那么当请求
为/index/welcome.html时,会调用doIt方法。在定义URLs时可以使用通配
符。/**/welcom?.html