SpringMVC的Controller

(一)編寫控制器。html

 

注:若是WEB-INF下存在index.jsp,」/」將會優先訪問index.jsp,因此須要將index.jsp刪除或重命名。java

對應的home.jspgit

 

遊覽器訪問:web

 

(二)向視圖傳遞模型正則表達式

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

1.首先定義一個用戶bean數組

 

2.定義一個獲取用戶列表的service,這裏我直接建立一個Listjsp

 

3.控制器的編寫。ide

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

 

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

不只如此,咱們甚至能夠不使用Model,就像下面這樣

 

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

4.最後是視圖的渲染

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

 

5.測試

 

3、對請求的處理

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

(一)請求處理

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

max 從第幾個用戶開始

count 一次須要查詢的用戶數

 

對於這個兩個值爲空的狀況,還須要設置一個默認的值。

 

 

(二)路徑佔位符

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

 

這樣,當咱們Url爲「users/13」時,SpringMVC就會自動截取13並賦值給userId

對了,若是方法的參數名與佔位符的名稱一致的話,咱們還能夠去掉@PathVariableValue屬性,就像下面這樣。

4、對錶單的處理

(一)表單數據處理

在上面的基礎上,咱們添加一個註冊功能,以此來講明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方法啓用校驗功能它纔會生效,以下所示

 

相關文章
相關標籤/搜索