SpringMVC的Controller


(一)編寫控制器。

 

注:如果WEB-INF下存在index.jsp,”/”將會優先訪問index.jsp,所以需要將index.jsp刪除或重命名。

對應的home.jsp

 

游覽器訪問:

 

(二)向視圖傳遞模型

web應用中,我們常需要把數據渲染到視圖中,下面就看看如何用SpringMVC實現查詢用戶列表的功能。

1.首先定義一個用戶bean

 

2.定義一個獲取用戶列表的service,這里我直接創建一個List

 

3.控制器的編寫。

在新的方法里,新加入了一個Model形參(其實就是Map,甚至可以把Model換成Map),這樣,users就可以將產生的信息傳遞到視圖。

 

值得一提的是,在向Model添加數據時,如果不寫key,模型的Key將會根據類型推斷出(本例中,List<User>就是userList)。

不僅如此,我們甚至可以不使用Model,就像下面這樣

 

因為沒有指定請求路徑,默認會是方法名“/allUser”。當處理器方法返回對象或集合時,這個值會放到模型中,模型的key會根據類型推斷得出。而視圖的名稱會根據請求的路徑推斷得出“allUser”。

4.最后是視圖的渲染

視圖使用了EL表達式和jstl,如果是Servlet3.0話,EL默認是關閉的,需要加上<%@ page isELIgnored="false" %>來開啟。

 

5.測試

 

三、對請求的處理

Web中,客戶端可以通過表單、url等方式,向服務端提交數據或查詢數據。那么SpringMVC是如何對請求數據進行接受的呢?

(一)請求處理

SpringMVC中,對於表單數據、Url參數都可以通過@RequestParam(“name”)進行接收。在下例中,需要在查詢用戶時進行分頁,這時就需要傳遞兩個參數:

max 從第幾個用戶開始

count 一次需要查詢的用戶數

 

對於這個兩個值為空的情況,還需要設置一個默認的值。

 

 

(二)路徑占位符

SpringMVC提供了路徑占位符的功能,這樣就可以使Url變Restful

 

這樣,當我們Url為“users/13”時,SpringMVC就會自動截取13並賦值給userId

對了,如果方法的參數名與占位符的名稱一致的話,我們還可以去掉@PathVariableValue屬性,就像下面這樣。

四、對表單的處理

(一)表單數據處理

在上面的基礎上,我們添加一個注冊功能,以此來說明SpringMvc對表單的處理。

  1. Controller中添加訪問注冊頁面的方法

 

  2.創建一個注冊頁面register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用戶注冊</title>
</head>
<body>
    <h1>用戶注冊</h1>
    <form method="post">
        用戶名:<input type="text" name="name"/><br/>
        密碼:<input type="password" name="password"><br/>
        <input type="submit" value="提交">
    </form>
</body>
</html>
View Code

這里的form標簽沒有設置action屬性。在這種情況下,表單會提交到與展現這個頁面相同的URL路徑上,如本例的“/register”上。

  3.Controller添加接受表單數據的方法

 

 

此處有3點需要注意。

(1)因為表單提交為Post,所以需要在對應的controller也要設置接受post請求。

(2)我們在方法中放了一個User對象,這個對象有idnamepassword等屬性,這些屬性會被請求中同名的參數填充。

(3)當在返回的值前添加redirect”前綴時,InternalResourceViewResolver視圖解析器會將值解析成重定向規則,而不是視圖的名稱。

(二)校驗表單

如果用戶在提交表單時忘記填寫name或者password,我們目前的程序依然會正常執行,這顯然是不合理的,

Spring3.0開始,SpringMVC提供了對Java校驗API的支持,我們可以根據注解方便的進行表單校驗。

下表列出了這些注解:

@AssertFalse

所注解的元素必須為Boolean類型,並且為false

@AssertTrue

所注解的元素必須為Boolean類型,並且為true

@DecimalMax

所注解的元素必須為數字,並且值要小於等於給定的BigDecimalString

@DecimalMin

所注解的元素必須為數字,並且值要大於等於給定的BigDecimalString

@Digits

所注解的元素必須為數字,並且值必須為指定位數

@Future

所注解的元素必須為一個將來的日期

@Max

所注解的元素必須為數字,並且值要小於等於給定的

@Min

所注解的元素必須為數字,並且值要大於等於給定的

@NotNull

所注解的元素必須不為null

@Null

所注解的元素必須為null

@Past

所注解的元素必須為一個過去的日期

@Pattern

所注解的元素必須匹配給定的正則表達式

@Size

所注解的元素必須為String、集合或數組,且長度要符合給定的范圍

下面我們就把這些規則應用到我們的User實體中

首先,需要添加Java校驗APi的依賴

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.1.0.Final</version>
</dependency>

然后在需要驗證的實體類添加對應的校驗注解:

 

 

我們需要在Controller方法啟用校驗功能它才會生效,如下所示

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM