Spring MVC之Controller

简介:

【注】默认按照约定寻找servlet.xml配置文件,如果需要指定或者需要增加多个servlet的配置该如何处理呢?方法如下:

 
  1. <servlet> 
  2.         <servlet-name>springmvc</servlet-name> 
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  4.         <init-param> 
  5.             <param-name>contextConfigLocation</param-name> 
  6.             <!-- <param-value>classpath:/spring-core.xml</param-value> --> 
  7.             <!-- <param-value>/WEB-INF/classes/servlet1.xml,/WEB-INF/classes/servlet2.xml</param-value> --> 
  8.             <!-- <param-value>/WEB-INF/classes/servlet*.xml</param-value> --> 
  9.             <param-value>/WEB-INF/classes/spring/*.xml</param-value> 
  10.         </init-param> 
  11.         <load-on-startup>1</load-on-startup> 
  12.     </servlet> 

1、直接转发的controller,不需要再实现无任何行为的controller类,登录常用.

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang" 
  4.     xsi:schemaLocation="   
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  6. http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> 
  7.  
  8.     <bean id="LoginSpringAction" class="com.alibaba.spring.LoginSpringAction"></bean> 
  9.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  10.         <property name="mappings"> 
  11.             <props> 
  12.                 <prop key="start.test">LoginSpringAction</prop> 
  13.                 <prop key="login.test">LoginAction</prop> 
  14.             </props> 
  15.         </property> 
  16.     </bean> 
  17.     <bean id="LoginAction" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
  18.         <property name="viewName" value="login"></property> 
  19.     </bean> 
  20.  
  21.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
  22.         <property name="viewClass" 
  23.             value="org.springframework.web.servlet.view.JstlView"></property> 
  24.         <property name="prefix" value="/WEB-INF/jsp/" /> 
  25.         <property name="suffix" value=".jsp" /> 
  26.     </bean> 
  27. </beans>  

查找过程:LoginAction->ParameterizableViewController->login->/WEB-INF/jsp/login.jsp

2、请求URL与要找的资源名称一致时,使用更简单的UrlFilenameViewController

 
  1. <bean id="LoginAction" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> 

请求http://localhost:8080/login.test, 通过login.test->LoginAction ->UrlFilenameViewController->解析url,分析出login,再根据规则跳转到login.jsp中

3、封装表单参数的控制器:AbstractCommandController。【注】在spring3.0标注为过期,更建议使用注解。2.5版本未过期。

步骤1:表单提交:<form method="get" action="dispEmp.test"> 

步骤2:继承AbstractCommandController类

 
  1. public class EmployeeController extends AbstractCommandController { 
  2.  
  3.     @Override 
  4.     protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, 
  5.                                   Object command, BindException errors) throws Exception { 
  6.         Employee employee = (Employee)command; 
  7.         System.out.println(employee); 
  8.         return new ModeAndView("displayEmp"); 
  9.     } 

步骤3:配置CommandController类,【注】需要在里面配置属性:commandClass, 原因是根据反射的原理进行实例化类,再set其属性的

 
  1. <bean id="EmployeeAction" class="com.alibaba.spring.EmployeeController"> 
  2.         <property name="commandClass" value="com.alibaba.spring.Employee"></property> 
  3.     </bean> 
  4.      
  5.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  6.         <property name="mappings"> 
  7.             <props>          
  8.                 <prop key="dispEmp.test">EmployeeAction</prop> 
  9.             </props> 
  10.         </property> 
  11.     </bean> 

 提交到dispEmp.test->EmployeeAction->EmployeeController->commandClass->Employee,执行其set方法将属性赋值。

问题1:Date类型的数据绑定,比如增加了hireDate且格式自定义怎么办呢?方法有2种,其一:自定义属性编辑器注入到AbstractCommandController的方法initBinder中

 
  1. @Override 
  2.     protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) 
  3.             throws Exception { 
  4.         binder.registerCustomEditor(Date.classnew MyPropertyEditor()); 
  5.     } 
 

其中:CustomDateEditor代码如下:

 
  1. public class MyPropertyEditor extends PropertyEditorSupport { 
  2.     String format = "yyyy-MM-dd"
  3.  
  4.     public void setFormat(String format) { 
  5.         this.format = format; 
  6.     } 
  7.  
  8.     @Override 
  9.     public void setAsText(String text) throws IllegalArgumentException { 
  10.         SimpleDateFormat dateFormat = new SimpleDateFormat(format); 
  11.         System.out.println("--->" + text); 
  12.         try { 
  13.             Date date = dateFormat.parse(text); 
  14.             this.setValue(date); 
  15.         } catch (ParseException e) { 
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace(); 
  18.         } 
  19.     } 

 

其二:使用spring提供的半成品:CustomDateEditor

 
  1. @Override 
  2.    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) 
  3.            throws Exception { 
  4.        //binder.registerCustomEditor(Date.class, new MyPropertyEditor()); 
  5.        binder.registerCustomEditor(Date.classnew CustomDateEditor(new SimpleDateFormat( 
  6.                "yyyy-MM-dd"), true)); 
  7.    } 

 4、另外的获取表单参数的类:SimpleFormController,其onSubmit方法,只有post提交的时候才会执行

 



本文转自 zhouhaipeng 51CTO博客,原文链接:http://blog.51cto.com/tianya23/701747,如需转载请自行联系原作者


相关文章
|
4天前
|
设计模式 前端开发 Java
初识Spring MVC
初识Spring MVC
10 0
|
4天前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
12 1
|
7天前
|
监控 前端开发 Java
SpringBoot与SpringMVC有哪些区别?
SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。
22 2
|
1月前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
1月前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
1月前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
33 3
|
1月前
|
前端开发 Java 容器
家族传承:Spring MVC中父子容器的搭建与管理指南
家族传承:Spring MVC中父子容器的搭建与管理指南
26 3
|
1月前
|
前端开发 Java API
头头是道:揭示Spring MVC如何获取和处理请求头数据
头头是道:揭示Spring MVC如何获取和处理请求头数据
26 1
|
1月前
|
前端开发 Java API
饼干探秘:深入Spring MVC中获取Cookie数据的技术解析
饼干探秘:深入Spring MVC中获取Cookie数据的技术解析
18 3
|
1月前
|
前端开发 Java Spring
转换之术:解析Spring MVC中类型转换器的实际运用
转换之术:解析Spring MVC中类型转换器的实际运用
22 0