SpringMVC 实例 --非注解

 练习项目:test

SpringMVC 实例 --非注解,只用于学习理解。到了spring 3.0以后或许部分东西已经过时了,在实际工作中并不一定好用。

但对于理解SpringMVC的实现方式很有帮助,在以后使用注解时,会明白是怎么个来龙去脉!

 

web.xml配置文件


 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
    index.jsp
 

 
   
   

   test
   org.springframework.web.servlet.DispatcherServlet
   


  1 
 
 
 
   test
   *.do
 


注:如果使用注解可以加上--> 

   

            
            
           
      

 

servlet上下文配置文件 test-servlet.xml:


 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util-3.0.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
           ">
          
          
          

          
             
              
               startController
               loginController
               addEmpController
               addEmpSuccessController
              

             

          

        
          
          

          
             
             
          

          
          
          
             
          

          
          
          
             

             
             
             
          

          
          

 

实体类Emp.java:

package test;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Emp {
 private int id;
 private String name;
 private String phone;
 private Date hireDate;
 public String getName() {
          return name;
 }
 public void setName(String name) {
             this.name = name;
 }
 public String getPhone() {
            return phone;
 }
 public void setPhone(String phone) {
             this.phone = phone;
 }
 
 public int getId() {
            return id;
 }
 public void setId(int id) {
         this.id = id;
 }
 public Date getHireDate() {
           return hireDate;
 }
 public void setHireDate(Date hireDate) {
        this.hireDate = hireDate;
 }

 @Override
 public String toString() {
           return id+","+name+","+phone+","+new SimpleDateFormat("yyyy-MM-dd").format(hireDate);
 }

}

StartController控制器:

package test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class StartController implements Controller {

 @Override
 public ModelAndView handleRequest(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
   System.out.println("成功了!");
  return new ModelAndView("start"); //视图的逻辑名称,具体用jsp、framemark还是其他比不知道,也不需要知道。 模块解耦分离。
 }

}

 

控制器EmpController--以单个参数形式传递参数:

package test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class EmpController extends AbstractController {

 @Override
 protected ModelAndView handleRequestInternal(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  //逐个获取表单参数,当参数很多时就会变的麻烦。如果我们可以 直接以一个对象的形式获取就方便的多了。
  //不用担心EmpController2控制器实现了这个功能。

  String name = request.getParameter("name");
  String phone = request.getParameter("phone");
  Emp emp = new Emp();
  emp.setName(name);
  emp.setPhone(phone);
  //service.addEmp(emp); //一般是这样用的
  System.out.println(emp);
  return null;
 }
}

 

控制器EmpController2--以对象形式封装表单参数:

package test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
/**
 * 当我每添加一个控制器,就会在test-servlet.xml配置一个bean和添加一个路径的映射。
 * 这样会很麻烦。
 *
 * 视图解析器只需要配置一个就可以了。
 * @author Administrator
 *
 */

public class EmpController2 extends AbstractCommandController {
 /**
  * Spring 3.0 已经将AbstractCommandController类标注为过期了,她提倡我们使用注解。
  * 我们这里只是帮助大家理解如何将表单参数自动封装为command(是一个Object类型的对象)对象的。
  *
  * 将表单参数自动封装到command对象中。但是需要在test-servlet.xml里配置command的类型。
  * BindException绑定异常,表单中的参数,在赋给对象Emp是需要类型转换。当转换出错是异常信息就会在这里。
  *
  * 与SimpleFormController的区别在于,method为post时onSubmit才会提交。
  */

 @Override
 protected ModelAndView handle(HttpServletRequest request,
   HttpServletResponse response, Object command, BindException bindException)
   throws Exception {
  Emp emp = (Emp)command;
  System.out.println(emp.getHireDate());
  System.out.println(emp);
  //return "success"; //当我们不返回模型视图是我们也可以直接返回一个String字符串,这个字符串表示视图名。
  return new ModelAndView("success");//返回逻辑视图名,在test-servlet.xml里会得到 从逻辑视图到真正视图的映射。
 }
 
 public Map xxx(HttpServletRequest request, HttpServletResponse response){
  //基于惯例的处理模式,当没有指定视图名称 默认根据请求路径来返回响应的视图名有些类似于UrlFilenameViewController。
  return null;
 }
 //注册时间编辑器
 @Override
 protected void initBinder(HttpServletRequest request,
   ServletRequestDataBinder binder) throws Exception {
  //binder.registerCustomEditor(Date.class, new MyDateProperty()); //完全自己定义编辑器。 MyDateProperty为我们自己实现的时间编辑器。
  binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); //自定义编辑器(spring提供的一个半成品编辑器)。
  //super.initBinder(request, binder);
 }

}

 

控制器EmpFormController:与继承AbstractCommandController类型控制器的区别。

package test;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class EmpFormController extends SimpleFormController {

 /**
  * 与AbstractCommandController的区别在于FormController 当 method为post时onSubmit才会提交。
  */

 @Override
 protected ModelAndView onSubmit(Object command) throws Exception {
  // TODO Auto-generated method stub
  Emp emp = (Emp)command;
  System.out.println(emp);
  
  //return super.onSubmit(command);
  return new ModelAndView("success");
 }
 
}

 

 

MyDateProperty.java属性编辑器:

package test;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
 * 属性编辑器 - 将文本转换为xxx对象或将对象转换成文本。
 * @author Administrator
 */
public class MyDateProperty extends PropertyEditorSupport {

 @Override
 public String getAsText() {
  return super.getAsText();
 }

 @Override
 public void setAsText(String arg0) throws IllegalArgumentException {
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  try {
   format.parse(arg0);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  //super.setAsText(arg0);
 }

 @Override
 public void setValue(Object arg0) {
  super.setValue(arg0);
 }
 
}

 

add_emp.jap页面:(其他页面没有实质内容就不贴了)

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>


 
    My JSP add_emp.jsp starting page
 
 
 
    This is add emp JSP page.

   


    id:

    name:

    phone:

    hireDate:

   
   

 

 

 

你可能感兴趣的:(Spring)