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提交的时候才会执行

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(spring,职场,休闲)