Java Spring MVC獲取請(qǐng)求數(shù)據(jù)詳解操作
1. 獲得請(qǐng)求參數(shù)
- 客戶端請(qǐng)求參數(shù)的格式是:
name=value&name=value… …
- 服務(wù)器端要獲得請(qǐng)求的參數(shù),有時(shí)還需要進(jìn)行數(shù)據(jù)的封裝,SpringMVC可以接收如下類型的參數(shù):
- 基本類型參數(shù)
- POJO類型參數(shù)
- 數(shù)組類型參數(shù)
- 集合類型參數(shù)
2. 獲得基本類型參數(shù)
- Controller中的業(yè)務(wù)方法的參數(shù)名稱要與請(qǐng)求參數(shù)的name一致,參數(shù)值會(huì)自動(dòng)映射匹配。
- 訪問:
http://localhost:8080/xdr630_spring_mvc_war_exploded/user/quick11?username=xdr&age=23
- 控制臺(tái)打印輸出:
3. 獲得POJO類型參數(shù)
Controller中的業(yè)務(wù)方法的POJO參數(shù)的屬性名與請(qǐng)求參數(shù)的name一致,參數(shù)值會(huì)自動(dòng)映射匹配。
4. 獲得數(shù)組類型參數(shù)
Controller中的業(yè)務(wù)方法數(shù)組名稱與請(qǐng)求參數(shù)的name一致,參數(shù)值會(huì)自動(dòng)映射匹配。
5. 獲得集合類型參數(shù)
- 獲得集合參數(shù)時(shí),要將集合參數(shù)包裝到一個(gè)
POJO
中才可以。 - 把集合包裝到 POJO 對(duì)象當(dāng)中
- 創(chuàng)建 VO (valueobject),封裝視圖的對(duì)象
public class VO { private List<User> userList; public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } @Override public String toString() { return "VO{" + "userList=" + userList + '}'; } }
- 創(chuàng)建jsp表單
<form action="${pageContext.request.contextPath}/user/quick14" method="post"> <%--表明是第幾個(gè)User對(duì)象的username age--%> <input type="text" name="userList[0].username"><br> <input type="text" name="userList[0].age"><br> <input type="text" name="userList[1].username"><br> <input type="text" name="userList[1].age"><br> <input type="submit" value="提交"> </form>
- 當(dāng)使用ajax提交時(shí),可以指定
contentType
為json
形式,那么在方法參數(shù)位置使用@RequestBody
可以直接接收集合數(shù)據(jù)而無需使用POJO進(jìn)行包裝。 - 創(chuàng)建 ajax.jsp
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script> <script> var userList = new Array(); userList.push({username:"zhangsan",age:18}); userList.push({username:"lisi",age:28}); $.ajax({ type:"POST", url:"${pageContext.request.contextPath}/user/quick15", data:JSON.stringify(userList), contentType:"application/json;charset=utf-8" }); </script>
- 加入配置文件
<!--開放對(duì)資源的訪問權(quán)限--> <mvc:resources mapping="/js/**" location="/js/"/>
或
- 把原始的數(shù)據(jù)交給 Tomcat 找到資源
<mvc:default-servlet-handler/>
- 注意:通過谷歌開發(fā)者工具抓包發(fā)現(xiàn),沒有加載到j(luò)query文件,原因是SpringMVC的前端控制器DispatcherServlet的
url-pattern
配置的是/
,代表對(duì)所有的資源都進(jìn)行過濾操作,可以通過以下兩種方式指定放行靜態(tài)資源: - 在
spring-mvc.xml
配置文件中指定放行的資源
<mvc:resources mapping="/js/**" location="/js/"/> 或 <mvc:default-servlet-handler/>
6. 請(qǐng)求數(shù)據(jù)亂碼問題
當(dāng)post
請(qǐng)求時(shí),數(shù)據(jù)會(huì)出現(xiàn)亂碼,可以設(shè)置一個(gè)過濾器來進(jìn)行編碼的過濾。
<!--配置全局過濾的filter--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
再次運(yùn)行:
7. 參數(shù)綁定注解 @requestParam
- 當(dāng)給的參數(shù)名與請(qǐng)求的參數(shù)名不一致時(shí)就為
null
- 這個(gè)時(shí)候就需要使用 @RequestParameter
- 當(dāng)請(qǐng)求的參數(shù)名稱與
Controller
的業(yè)務(wù)方法參數(shù)名稱不一致時(shí),就需要通過@RequestParam
注解顯示的綁定。 - 將請(qǐng)求的
name
參數(shù)映射到username
參數(shù)上
注解@RequestParam
還有如下參數(shù)可以使用:
value
:與請(qǐng)求參數(shù)名稱required
:此在指定的請(qǐng)求參數(shù)是否必須包括,默認(rèn)是true
,提交時(shí)如果沒有此參數(shù)則報(bào)錯(cuò)
defaultValue
:當(dāng)沒有指定請(qǐng)求參數(shù)時(shí),則使用指定的默認(rèn)值賦值
8. 獲得Restful風(fēng)格的參數(shù)
Restful是一種軟件架構(gòu)風(fēng)格、設(shè)計(jì)風(fēng)格,而不是標(biāo)準(zhǔn),只是提供了一組設(shè)計(jì)原則和約束條件。主要用于客戶端和服務(wù)器交互類的軟件,基于這個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡潔,更有層次,更易于實(shí)現(xiàn)緩存機(jī)制等。
Restful風(fēng)格的請(qǐng)求是使用“url+請(qǐng)求方式
”表示一次請(qǐng)求目的的,HTTP 協(xié)議里面四個(gè)表示操作方式的動(dòng)詞如下:
-
GET
:用于獲取資源 POST
:用于新建資源PUT
:用于更新資源DELETE
:用于刪除資源
例如:
上述url
地址/user/1
中的1
就是要獲得的請(qǐng)求參數(shù),在SpringMVC中可以使用占位符進(jìn)行參數(shù)綁定。地址/user/1
可以寫成/user/{id}
,占位符{id}
對(duì)應(yīng)的就是1
的值。在業(yè)務(wù)方法中我們可以使用@PathVariable
注解進(jìn)行占位符的匹配獲取工作。
訪問:
9. 自定義類型轉(zhuǎn)換器
- SpringMVC 默認(rèn)已經(jīng)提供了一些常用的類型轉(zhuǎn)換器,例如客戶端提交的字符串轉(zhuǎn)換成
int
型進(jìn)行參數(shù)設(shè)置。 - 但是不是所有的數(shù)據(jù)類型都提供了轉(zhuǎn)換器,沒有提供的就需要自定義轉(zhuǎn)換器,例如:日期類型的數(shù)據(jù)就需要自定義轉(zhuǎn)換器。
- 時(shí)間格式不匹配
- 自定義類型轉(zhuǎn)換器的開發(fā)步驟:
1.定義轉(zhuǎn)換器類實(shí)現(xiàn)Converter接口
public class DateConverter implements Converter<String,Date> { @Override public Date convert(String dataStr) { //將日期的字符串轉(zhuǎn)成日期對(duì)象 返回 Date date = null; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM:dd"); try { date = format.parse(dataStr); } catch (ParseException e) { e.printStackTrace(); } return date ; } }
2.在配置文件中聲明轉(zhuǎn)換器
<!--聲明轉(zhuǎn)換器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.xdr630.coverter.DateConverter"></bean> </list> </property> </bean>
3.在<annotation-driven>中引用轉(zhuǎn)換器
<!--mvc注解驅(qū)動(dòng)--> <mvc:annotation-driven conversion-service="conversionService"/>
再次訪問:
控制臺(tái)查看:
10. 獲得Servlet相關(guān)API
SpringMVC支持使用原始ServletAPI對(duì)象作為控制器方法的參數(shù)進(jìn)行注入,常用的對(duì)象如下:
- HttpServletRequest
- HttpServletResponse
- HttpSession
11. 獲得請(qǐng)求頭
11.1 @RequestHeader
使用@RequestHeader
可以獲得請(qǐng)求頭信息,相當(dāng)于web階段學(xué)習(xí)的request.getHeader(name)
@RequestHeader
注解的屬性如下:
value
:請(qǐng)求頭的名稱required
:是否必須攜帶此請(qǐng)求頭
控制臺(tái):
11.2 @CookieValue
使用@CookieValue
可以獲得指定Cookie
的值
@CookieValue
注解的屬性如下:
value
:指定cookie的名稱required
:是否必須攜帶此cookie
控制臺(tái):
12. 文件上傳
12.1 文件上傳客戶端三要素
- 表單項(xiàng)
type=“file”
- 表單的提交方式是
post
- 表單的
enctype
屬性是多部分表單形式,及enctype=“multipart/form-data”
12.2 文件上傳原理
- 當(dāng)form表單修改為多部分表單時(shí),
request.getParameter()
將失效。 enctype=“application/x-www-form-urlencoded”
時(shí),form表單的正文內(nèi)容格式是:key=value&key=value&key=value
- 當(dāng)form表單的
enctype
取值為Mutilpart/form-data
時(shí),請(qǐng)求正文內(nèi)容就變成多部分形式:
12.3 單文件上傳步驟
1.導(dǎo)入fileupload和io坐標(biāo)
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
2.配置文件上傳解析器
<!--配置文件上傳解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--上傳文件總大小--> <property name="maxUploadSize" value="5242800"/> <!--上傳單個(gè)文件的大小--> <property name="maxUploadSizePerFile" value="5242800"/> <!--上傳文件的編碼類型--> <property name="defaultEncoding" value="UTF-8"/> </bean>
3.編寫文件上傳代碼
測(cè)試:
控制臺(tái):
把文件進(jìn)行保存
控制臺(tái):
查看保存的路徑
12.4 多文件上傳實(shí)現(xiàn)
多文件上傳,只需要將頁面修改為多個(gè)文件上傳項(xiàng),將方法參數(shù)MultipartFile
類型修改為MultipartFile[]
即可
13. 知識(shí)要點(diǎn)
MVC實(shí)現(xiàn)數(shù)據(jù)請(qǐng)求方式
- 基本類型參數(shù)
- POJO類型參數(shù)
- 數(shù)組類型參數(shù)
- 集合類型參數(shù)
MVC獲取數(shù)據(jù)細(xì)節(jié)
- 中文亂碼問題
- @RequestParam 和 @PathVariable
- 自定義類型轉(zhuǎn)換器
- 獲得Servlet相關(guān)API
- @RequestHeader 和 @CookieValue
- 文件上傳
到此這篇關(guān)于Java Spring MVC獲取請(qǐng)求數(shù)據(jù)詳解操作的文章就介紹到這了,更多相關(guān)Java Spring MVC 獲取請(qǐng)求數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA配置SpringBoot熱啟動(dòng),以及熱啟動(dòng)失效問題
這篇文章主要介紹了IDEA配置SpringBoot熱啟動(dòng),以及熱啟動(dòng)失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11