(一)編寫控制器。
注:如果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。
對了,如果方法的參數名與占位符的名稱一致的話,我們還可以去掉@PathVariable的Value屬性,就像下面這樣。
四、對表單的處理
(一)表單數據處理
在上面的基礎上,我們添加一個注冊功能,以此來說明SpringMvc對表單的處理。
- 在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>
這里的form標簽沒有設置action屬性。在這種情況下,表單會提交到與展現這個頁面相同的URL路徑上,如本例的“/register”上。
3.在Controller添加接受表單數據的方法
此處有3點需要注意。
(1)因為表單提交為Post,所以需要在對應的controller也要設置接受post請求。
(2)我們在方法中放了一個User對象,這個對象有id、name、password等屬性,這些屬性會被請求中同名的參數填充。
(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方法啟用校驗功能它才會生效,如下所示