MultiActionController这个控制器将多个请求处理方法合并在一个控制器里,这样可以把相关的功能组合在一起。
通过配置MethodNameResolver进行方法名的调用,
缺省的方法名解析器是InternalPathMethodNameResolver,根据url进行方法的划分。需要匹配<prop key="/hello/*.action">multiController</prop>
hello/index.action——index方法调用;
hello/onSubmit.action——onSubmit方法调用。
下面看一个简单的例子:
springmvc配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 简单url的映射处理器 -->
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello/*.action">multiController</prop>
</props>
</property>
<!-- 设置优先级,值越小,优先级越高 -->
<property name="order" value="0" />
</bean>
<!-- MethodNameResolver -->
<bean id="defaultResolver"
class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean>
<bean id="multiController" class="com.springmvc.controllers.MultiController">
<property name="MethodNameResolver" ref="defaultResolver"></property>
</bean>
<!-- 视图解析器 -->
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
对应 multiController 的控制器代码如下:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class MultiController extends MultiActionController {
public ModelAndView index(HttpServletRequest request,HttpServletResponse response) {
System.out.println("**********index***********");
return new ModelAndView("index");
}
public ModelAndView multi(HttpServletRequest request,HttpServletResponse response) {
System.out.println("**********multi***********");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println("name:"+name+"&age:"+age);
ModelAndView mav = new ModelAndView();
mav.setViewName("multi");
mav.addObject("name",name);
mav.addObject("age",age);
return mav;
}
}
前端jsp页面:
访问工程时,欢迎页面进行一个转发:
<%response.sendRedirect("/hello/index.action"); %>
这个转发会执行MultiController 控制器里的index方法,返回/WEB-INF/jsp/目录下的index.jsp页面,这个页面如下:
------------------MultiController------------------------
<form action="multi.action" method="post">
username:<input name="name"/><br>
age:<input name="age"/><br>
<input type="submit" value="提交" />
</form>
提交表单后,执行 MultiController 控制器里的 multi 方法,返回 /WEB-INF/jsp/ 目录下的 multi.jsp 页面:
<h1>user:${name }</h1>
<h1>age:${age }</h1>
点击提交后,执行multi方法,返回前端页面: