天天看點

初見SpringMVC之資料綁定

初見SpringMVC之資料綁定

    資料綁定的内容非常通俗易懂,背景受理網絡請求的方法擷取http請求參數的過程就是資料綁定。Spring提供了多種資料綁定的方法:

    1.綁定預設資料類型:SpringMVC中常用的預設資料類型包括,HttpServletRequest,HttpServletResponse,HttpSession。下面通過一個例子介紹,如何通過預設資料類型綁定,擷取請求參數。

(1)導入SpringMVC相關包,在web.xml中配置DsipatcherServlet

(2)編寫Handler,處理具體的網絡請求,在此處是通過Controll注解辨別一個Handller,通過RequestMapping完成Handler和url之間的映射。

@Controller
public class DataBinding {
    @RequestMapping(value="/defaultDataBinding")
    public String defaultDataBinding(HttpServletRequest request){
       Stringid = request.getParameter("id");
       System.out.println("id="+id);
       return "success";
    }
}
           

   defaultDataBinding是受理以”/DefaultDataBinging”結尾的網絡請求的方法,通過預設參數HttpServletRequest完成資料綁定,而http請求送出的參數均通過        request.getParameter()方法擷取。

(3)Spring-cofig.xml檔案配置

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 定義元件掃描器,指定需要掃描的包 -->
    <context:component-scan base-package="com.bupt.controller"/> 
    <!-- 定義視圖解析器 -->
    <bean id="viewResolver" class=
    "org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!--設定字首 -->
         <propertyname="prefix" value="/WEB-INF/" />
         <!--設定字尾 -->
         <propertyname="suffix" value=".jsp" />
    </bean>
</beans>
           

    (4)測試結果:在浏覽器輸入如下網址http://localhost:8080/HelloSpringMV/defaultDataBinding?id=1

可以看見上述通過Get方式送出一個名為id的參數,參數值為1。

在控制台可以看見如下輸出:

初見SpringMVC之資料綁定

                        圖1.1預設參數的資料綁定

2.綁定簡單資料類型

   簡單資料類型是指java中的基本資料類型以及String類型,假如送出的參數僅僅隻是一個id,可以采用綁定簡答資料類型的方法,而不用通過綁定request後再擷取id資料。在DataBinding類中添加如方法:

(1)在Handler中添加方法

@RequestMapping(value="/SimpleDataBinding")
    publicString simpleDataBinding(HttpServletRequestrequest,int id){
       System.out.println("request中擷取id="+request.getParameter("id"));
       System.out.println("id="+id);
       return"success";
   }
           

   在上述代碼中,新增了一個參數int id。id直接可以擷取http請求中對應的id字段。

   (2)測試,在浏覽器中輸入如下url:http://localhost:8080/HelloSpringMV/SimpleDataBinding?id=1

初見SpringMVC之資料綁定

圖2.1 綁定簡答資料類型

        從測試結果中可以發現,方法中id參數可以位元組擷取http請求中攜帶的id字段,同時還可以綁定HttpServletRequest的方法擷取請求參數。這裡需要特别注意的是,http請求中的字段名稱必須和方法中參數名稱保持一緻。假如不一緻是不能綁定參數的。

3.綁定POJO資料類型

    當http請求攜帶的參數很多的時候,采用綁定簡單資料類型的方法就需要設定過多的方法形參,此時可以利用一個POJO對象充當方法形參,擷取http請求中的參數。下面通過一個驗證使用者登入的例子來介紹綁定POJO資料類型的方式。

    使用者登入時候需要送出使用者名(userName)和密碼(password)給伺服器去驗證,此時如果采用綁定簡單資料類型的方法時,需要兩個形參來完成資料綁定。此時就可以采用綁定POJO類型的方法擷取請求參數

(1)在伺服器一端建立一個POJO類

public class User {
    //POJO類的屬性名要和http請求的字段名保持一緻
    publicString userName;
    publicString password;
    publicStringgetUserName() {
       return userName;
    }
    publicvoid setUserName(String userName){
       this.userName= userName;
    }
    publicString getPassword() {
       returnpassword;
    }
    publicvoid setPassword(String password){
       this.password= password;
    }
}
           

     (2)在Handler中添加接收請求的方法:

@RequestMapping("/POJODataBinding")
    publicString POJODataBinding(User user){
       System.out.println("username="+user.getUserName());
       System.out.println("password="+user.getPassword());
       return"success";
    }
           

(3)在WebConten目錄下,建立一個user.html檔案,顯示一個簡單的登入頁面

<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<title>helloSpringMVC</title>
</head>
<body>
    <form action="http://localhost:8080/HelloSpringMV/POJODataBinding"
          method="post">
           使用者名<input type="text" name="userName"></input><br>
           密碼<input type="password" name="password"></input><br>
           <input type="submit"name="submit" value="登入"></input><br>
    </form>
</body>
</html>
           

     (4)在Springmvc-config.xml檔案中添加一行配置:

<!--dispatcherServelet不攔截靜态資源-->
    <mvc:default-servlet-handler/>
           

     (5)測試,在浏覽器中通路url:http://localhost:8080/HelloSpringMV/user.html

初見SpringMVC之資料綁定

                       圖3.1 登入頁面

點選送出後,觀察伺服器控制台輸出:

初見SpringMVC之資料綁定

圖3.2 伺服器控制台輸出結果

    4.自定義資料綁定

    自定義資料綁定,是一種比較冷門的資料綁定方法,假設存在這樣一種情景:

http請求攜帶的參數類型為A,背景接收方法的形參類型為B,比如http請求攜帶的參數是日期字元串”2017-11-20 4:15:30”,而背景接收方法的形參類型是Date,在這樣一種參數不比對的情況下,就需要用到自定義資料綁定。

    完成自定義資料綁定,最主要的工作就是設計一個類型轉化器,通過日期轉換的例子介紹自定義資料綁定。

(1)建構一個資料類型轉換器,建立一個名為DateConverter的類,繼承Converter接口。第一個泛型參數代表待轉換類型,第二個泛型參數代表目标轉換類型,所有的轉換工作均隻在convert方法中完成。

public class DateConverter implementsConverter<String,Date>{
    privateString datePattern="yyyy-mm-dd HH:mm:ss";
    @Override
    publicDate convert(String source) {
       // TODO Auto-generated method stub
       SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
       try{
           return sdf.parse(source);
       } catch(ParseException e) {
           // TODO Auto-generated catch block
           throw newIllegalArgumentException("無效日期格式,請使用如下格式:"+datePattern);
       }
    }
}
           

    (2)在Spring-config.xml檔案中配置類型轉換器

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
 http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 定義元件掃描器,指定需要掃描的包 -->
    <context:component-scan base-package="com.bupt.controller" /> 
    <!-- 配置注解驅動 -->
    <!-- <mvc:annotation-driven />-->
    <mvc:annotation-driven conversion-service="conversionService"/>
    <!--dispatcherServelet不攔截靜态資源-->
    <mvc:default-servlet-handler/>
    <!-- 定義視圖解析器 -->
    <bean id="viewResolver" class=
    "org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!--設定字首 -->
         <propertyname="prefix" value="/WEB-INF/" />
         <!--設定字尾 -->
         <propertyname="suffix" value=".jsp" />
    </bean>
    <!-- 自定義類型轉換器配置 -->
    <bean id="conversionService"class=
     "org.springframework.context.support.ConversionServiceFactoryBean">
       <property name="converters">
           <set>
              <bean class="com.bupt.converter.DateConverter"/>
           </set>
       </property>
    </bean>
           

    (3)在Handler中添加處理網絡請求的方法

@RequestMapping(value="/ConverterDateBinding")
    publicString ConverterDateBinding(Date date){
       System.out.println(date.toString());
       return"success";
    }
           

    (4)測試,在浏覽器中輸入如下url http://localhost:8080/HelloSpringMV/ConverterDateBinding?date=2017-11-20%2017:13:02

       服務端控制台輸出結果:

初見SpringMVC之資料綁定

                         圖4.1服務端輸出結果

5.綁定數組類型

   假如前端發送的Http請求攜帶了同名的多個參數時,就會用到綁定數組類型的情況,比如前端使用複選框來完成標明操作的情景。

   (1)在Handler中添加處理網絡請求的方法

@RequestMapping(value="/arrayDateBinding")
    publicString  arrayDateBinding(String[] users){
       for(int i=0;i<users.length;i++){
           System.out.println("删除user="+users[i]);
       }
       return"success";
   }
           

  (2)在WebConten下建立array.html檔案

<!DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<title>Inserttitle here</title>
</head>
<body>
    <form action="http://localhost:8080/HelloSpringMV/arrayDateBinding"
         method="POST">
    <table width="20%"border=1>
       <tr>
           <td>選擇</td>
           <td>使用者名稱</td>
       </tr>
       <tr>
           <td> <input type="checkbox"name="users" value="SmartTu"></input></td>
           <td>SmartTu</td>
       </tr>
           <td> <input type="checkbox"name="users" value="SmartTu1"></input></td>
           <td>SmartTu1</td>
       </tr>
           <td> <input type="checkbox"name="users" value="SmartTu2"></input></td>
           <td>SmartTu2</td>
       </tr>
    </table>
       <input type="submit" value="送出">
    </form>
</body>
</html>
           

   (3)測試

初見SpringMVC之資料綁定

            圖 5.1 複選框選擇情況

     點選送出按鈕看,觀察伺服器控制台輸出

初見SpringMVC之資料綁定

                   圖5.2伺服器控制台輸出情況

繼續閱讀