SpringMVC獲取請求參數(shù)
通過ServletAPI獲取
將HttpServletRequest作為控制器方法的形參,此時HttpServletRequest類型的參數(shù)表示封裝了當前請求的請求報文的對象
index.html
<form th:action="@{/test/param}" method="post">
用戶名:<input type="text" name="username">
密碼:<input type="password" name="password">
<input type="submit" value="提交">
</form>
TestParamController.java
package com.atguigu.SpringMVC.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
@Controller
public class TestParamController {
@RequestMapping("/test/param")
public String getParamByServletAPI(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username為:"+username+",password為:"+password);
return "success";
}
}
成功獲取到表單提交的信息,這是采用原生Servlet的方式獲取
通過控制器方法的形參獲取請求參數(shù)
在控制器方法的形參位置,設(shè)置和請求參數(shù)同名的形參,當瀏覽器發(fā)送請求,匹配到請求映射時,在DispatcherServlet中就會將請求參數(shù)賦值給相應(yīng)的形參
index.html
<form th:action="@{/testParam}" method="post">
用戶名:<input type="text" name="username">
密碼:<input type="password" name="password">
<input type="submit" value="提交">
</form>
TestParamController.java
@RequestMapping("/testParam")
public String getParam(
//@RequestParam注解以鍵值對的方式獲取到值并賦值給變量
@RequestParam("username") String name,
//自動匹配
String password){
System.out.println("username為:"+name+",password為:"+password);
return "success";
}
成功獲取到表單提交的信息(可以省略
@RequestParam
注解,SpringMVC匹配到請求映射時就會自動為參數(shù)賦值)
@RequestParam注解一共有三個屬性:
- value:指定為形參賦值的請求參數(shù)的參數(shù)名
- required:設(shè)置是否必須傳輸此請求參數(shù),默認值為true,表示當前請求必須傳輸value所指定的請求參數(shù)(只要有請求參數(shù)即可,值為空都沒問題),若沒有傳輸該請求參數(shù),且沒有設(shè)置defaultValue屬性則會報錯:
400:Required String parameter 'xxx' is not present
,為false時沒有獲取到請求參數(shù)時值為null - defaultValue:不管required屬性值為true或false,當value所指定的請求參數(shù)沒有傳輸或傳輸?shù)?strong>值為
""
時,則使用默認值為形參賦值
@RequestHeader:將請求頭信息和控制器方法的形參創(chuàng)建映射關(guān)系,屬性和用法同@RequestParam
- 獲取來源信息:
@RequestHeader("referer") String referer
- 輸出結(jié)果:
http://localhost:8080/SpringMVC/
@CookieValue:將cookie數(shù)據(jù)和控制器方法的形參創(chuàng)建映射關(guān)系,屬性和用法同@RequestParam,因為
session
里面存儲的數(shù)據(jù)就是cookie的形式,所以獲取session
對象之后就有cookie數(shù)據(jù)了
獲取cookie的
JSESSIONID
信息:
xxx(HttpServletRequest request,@CookieValue("JSESSIONID") String jsessionId)
HttpSession session = request.getSession();//獲取session對象即可 System.out.println(jsessionId);
- 輸出結(jié)果:
B096EFFCB054BC496DCD805203C49690
通過POJO獲取請求參數(shù)
可以在控制器方法的形參位置設(shè)置一個實體類類型的形參,此時若瀏覽器傳輸?shù)恼埱髤?shù)的參數(shù)名和實體類中的屬性名一致,那么請求參數(shù)就會為此屬性賦值
index.html
<!--根據(jù)映射匹配,get方式和post方式都可以匹配成功-->
<form th:action="@{/testPOJO}">
ID:<input type="text" name="id">
用戶名:<input type="text" name="username">
密碼:<input type="password" name="password">
年齡:<input type="text" name="age">
成績:<input type="text" name="gender">
郵箱:<input type="email" name="email">
<input type="submit" value="提交">
</form>
TestPOJOController.java
@RequestMapping("/testPOJO")
public String testPOJO(User user){
System.out.println(user);
//User{id=6, username='yxx', password='123', age=18, gender='97', email='156899@qq.com'}
return "success";
}
解決獲取請求參數(shù)亂碼問題
在JavaWeb中解決亂碼問題采用request.setCharacterEncoding("UTF-8")
的語句解決,在SpringMVC中因為會在訪問地址對應(yīng)方法之前就自動獲取了請求參數(shù),而上述語句需要在獲取前設(shè)置才有效,為了解決獲取請求參數(shù)的亂碼問題,可以使用SpringMVC提供的編碼過濾器CharacterEncodingFilter,使用前必須在web.xml
中先進行注冊
Tomcat8及以上對于以get方式提交表單的表單信息獲取參數(shù)默認為UTF-8的編碼方式,只有post方式需要設(shè)置,而Tomcat7兩種方式都要設(shè)置
web.xml文章來源:http://www.zghlxwxcb.cn/news/detail-659059.html
<!--配置springMVC的編碼過濾器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--設(shè)置請求的編碼-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--設(shè)置響應(yīng)的編碼-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SpringMVC中處理編碼的過濾器一定要配置到其他過濾器之前,否則無效,且由于配置是全局生效,無論get還是post方式都不會再亂碼文章來源地址http://www.zghlxwxcb.cn/news/detail-659059.html
到了這里,關(guān)于34.SpringMVC獲取請求參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!