今天浏览项目,想通过请求的url找到对应的控制器,怎么搜索都搜索不到对应的requestmapping,经过一番查找,发现该项目用了MultiActionController的ParameterMethodNameResolver方式匹配控制器,即通过请求的参数匹配控制器中的方法。经过自己研究,实践如下:
思路:
1、配置 ParameterMethodNameResolver 的请求参数名(即 通过制定的请求参数名获取参数,从而转换成方法名)。
2、配置控制器,配置控制器需要注入ParameterMethodNameResolver 的bean,注入名称固定为methodNameResolver 这个可用从MultiActionController源码得到原因,
由于控制器,初始化时需要装配(不会注解)所以只好用xml配置。
3,、编写控制需要继承MultiActionController,每个方法参数必须是(HttpServletRequest request, HttpServletResponse response)这种类型,而且返回值只能是String ,modeAndview,void,四种(还有一种忘了)。
代码如下:
<bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="fn"></property>
</bean>
<bean name="/mm.do" class="controller.methodNameResolverConterller">
<property name="methodNameResolver"> //这个名称貌似是固定了,可以从MultiActionController源码中的构造函数中有该参数名
<ref bean="paramMethodResolver"/>
</property>
</bean>
public class methodNameResolverConterller extends MultiActionController {
public void teste(HttpServletRequest request,
HttpServletResponse response){
System.out.println("this is test1");
}
http://localhost:8090/myweb_1/mm.do?fn=teste