javascript
SpringMVC的Controller
(一)編寫控制器。
?
注:如果WEB-INF下存在index.jsp,”/”將會(huì)優(yōu)先訪問index.jsp,所以需要將index.jsp刪除或重命名。
對(duì)應(yīng)的home.jsp
?
游覽器訪問:
?
(二)向視圖傳遞模型
在web應(yīng)用中,我們常需要把數(shù)據(jù)渲染到視圖中,下面就看看如何用SpringMVC實(shí)現(xiàn)查詢用戶列表的功能。
1.首先定義一個(gè)用戶bean
?
2.定義一個(gè)獲取用戶列表的service,這里我直接創(chuàng)建一個(gè)List。
?
3.控制器的編寫。
在新的方法里,新加入了一個(gè)Model形參(其實(shí)就是Map,甚至可以把Model換成Map),這樣,users就可以將產(chǎn)生的信息傳遞到視圖。
?
值得一提的是,在向Model添加數(shù)據(jù)時(shí),如果不寫key,模型的Key將會(huì)根據(jù)類型推斷出(本例中,List<User>就是userList)。
不僅如此,我們甚至可以不使用Model,就像下面這樣
?
因?yàn)闆]有指定請(qǐng)求路徑,默認(rèn)會(huì)是方法名“/allUser”。當(dāng)處理器方法返回對(duì)象或集合時(shí),這個(gè)值會(huì)放到模型中,模型的key會(huì)根據(jù)類型推斷得出。而視圖的名稱會(huì)根據(jù)請(qǐng)求的路徑推斷得出“allUser”。
4.最后是視圖的渲染
視圖使用了EL表達(dá)式和jstl,如果是Servlet3.0話,EL默認(rèn)是關(guān)閉的,需要加上<%@ page isELIgnored="false" %>來開啟。
?
5.測(cè)試
?
三、對(duì)請(qǐng)求的處理
在Web中,客戶端可以通過表單、url等方式,向服務(wù)端提交數(shù)據(jù)或查詢數(shù)據(jù)。那么SpringMVC是如何對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行接受的呢?
(一)請(qǐng)求處理
在SpringMVC中,對(duì)于表單數(shù)據(jù)、Url參數(shù)都可以通過@RequestParam(“name”)進(jìn)行接收。在下例中,需要在查詢用戶時(shí)進(jìn)行分頁,這時(shí)就需要傳遞兩個(gè)參數(shù):
max 從第幾個(gè)用戶開始
count 一次需要查詢的用戶數(shù)
?
對(duì)于這個(gè)兩個(gè)值為空的情況,還需要設(shè)置一個(gè)默認(rèn)的值。
?
?
(二)路徑占位符
SpringMVC提供了路徑占位符的功能,這樣就可以使Url變Restful
?
這樣,當(dāng)我們Url為“users/13”時(shí),SpringMVC就會(huì)自動(dòng)截取13并賦值給userId。
對(duì)了,如果方法的參數(shù)名與占位符的名稱一致的話,我們還可以去掉@PathVariable的Value屬性,就像下面這樣。
四、對(duì)表單的處理
(一)表單數(shù)據(jù)處理
在上面的基礎(chǔ)上,我們添加一個(gè)注冊(cè)功能,以此來說明SpringMvc對(duì)表單的處理。
?
2.創(chuàng)建一個(gè)注冊(cè)頁面register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>用戶注冊(cè)</title> </head> <body><h1>用戶注冊(cè)</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標(biāo)簽沒有設(shè)置action屬性。在這種情況下,表單會(huì)提交到與展現(xiàn)這個(gè)頁面相同的URL路徑上,如本例的“/register”上。
3.在Controller添加接受表單數(shù)據(jù)的方法
?
?
此處有3點(diǎn)需要注意。
(1)因?yàn)楸韱翁峤粸镻ost,所以需要在對(duì)應(yīng)的controller也要設(shè)置接受post請(qǐng)求。
(2)我們?cè)诜椒ㄖ蟹帕艘粋€(gè)User對(duì)象,這個(gè)對(duì)象有id、name、password等屬性,這些屬性會(huì)被請(qǐng)求中同名的參數(shù)填充。
(3)當(dāng)在返回的值前添加“redirect”前綴時(shí),InternalResourceViewResolver視圖解析器會(huì)將值解析成重定向規(guī)則,而不是視圖的名稱。
(二)校驗(yàn)表單
如果用戶在提交表單時(shí)忘記填寫name或者password,我們目前的程序依然會(huì)正常執(zhí)行,這顯然是不合理的,
從Spring3.0開始,SpringMVC提供了對(duì)Java校驗(yàn)API的支持,我們可以根據(jù)注解方便的進(jìn)行表單校驗(yàn)。
下表列出了這些注解:
| @AssertFalse | 所注解的元素必須為Boolean類型,并且為false |
| @AssertTrue | 所注解的元素必須為Boolean類型,并且為true |
| @DecimalMax | 所注解的元素必須為數(shù)字,并且值要小于等于給定的BigDecimalString值 |
| @DecimalMin | 所注解的元素必須為數(shù)字,并且值要大于等于給定的BigDecimalString值 |
| @Digits | 所注解的元素必須為數(shù)字,并且值必須為指定位數(shù) |
| @Future | 所注解的元素必須為一個(gè)將來的日期 |
| @Max | 所注解的元素必須為數(shù)字,并且值要小于等于給定的 |
| @Min | 所注解的元素必須為數(shù)字,并且值要大于等于給定的 |
| @NotNull | 所注解的元素必須不為null |
| @Null | 所注解的元素必須為null |
| @Past | 所注解的元素必須為一個(gè)過去的日期 |
| @Pattern | 所注解的元素必須匹配給定的正則表達(dá)式 |
| @Size | 所注解的元素必須為String、集合或數(shù)組,且長度要符合給定的范圍 |
下面我們就把這些規(guī)則應(yīng)用到我們的User實(shí)體中
首先,需要添加Java校驗(yàn)APi的依賴
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version> </dependency>然后在需要驗(yàn)證的實(shí)體類添加對(duì)應(yīng)的校驗(yàn)注解:
?
?
我們需要在Controller方法啟用校驗(yàn)功能它才會(huì)生效,如下所示
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/chenkeyu/p/7718250.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC的Controller的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL多个相同结构的表查询并把结果合
- 下一篇: gradle idea java ssm