在Spring MVC中,有几种控制器,下面我们来一一介绍一下。
1.ParameterizableViewController(参数控制器)
示例:在springmvc-servlet.xml中配置映射处理器和参数控制器
<!-- 简单URL映射处理器,映射处理器之间相互独立不受影响 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">toLogin</prop>
</props>
</property>
</bean>
<!-- 如果使用参数控制器就不能用ControllerClassNameHandlerMapping类名映射处理器 -->
<bean id="toLogin"
class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<!-- 配置你所要跳转到视图的名称 -->
<property name="viewName" value="login"></property>
</bean>
执行结果如下:
2.AbstractCommandController(命令控制器)
示例:在springmvc-servlet.xml中配置映射处理器和参数控制器
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/command.do">comm</prop>
</props>
</property>
</bean>
<!-- 命令控制器的Controller -->
<bean id="comm" class="com.tgb.controller.CommController">
<!-- 指定接收参数的类型 -->
<property name="commandClass" value="com.tgb.model.Person"></property>
</bean>
新建命令控制器:
public class CommController extends AbstractCommandController{
@Override
protected ModelAndView handle(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, BindException arg3)
throws Exception {
//将封装的参数转化为person对象
Person p = (Person) arg2;
System.out.println(p);
Map<String, Object> map = new HashMap<String, Object>();
map.put("person", p);
return new ModelAndView("index",map);
}
//日期转换
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
访问结果如下:
控制台打印信息:
3.FormController(表单控制器)
示例:在springmvc-servlet.xml中配置映射处理器和参数控制器
<bean id="form" class="com.rl.controller.FormController">
<!-- 指定接收参数的类型 -->
<property name="commandClass" value="com.rl.model.Person"></property>
<!-- 表单页面 -->
<property name="formView" value="form"></property>
<!-- 成功页面 -->
<property name="successView" value="success"></property>
</bean>
新建表单控制器:
public class FormController extends SimpleFormController{
@Override
protected void doSubmitAction(Object command) throws Exception {
Person p = (Person) command;
System.out.println(p);
super.doSubmitAction(command);
}
//转化日期格式
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
}
控制台打印结果:
总结:
Spring MVC为我们提供了很好的参数封装,而struts2通过属性驱动或者模型驱动或自定义来获得参数的封装,相知之下,个人感觉SpringMVC封装的更加完善一些,在控制器类中不用提供get/set方法,只要和Model的属性名称对应即可。