文章目录
一、SpringMVC获取请求带来的各种信息
1.@RequestParam
@RequestParam
:获取请求参数,参数默认是必须带的。
- value():指定要获取的参数的key。
- required():规定这个参数是否是必须的。
- defaultValue():设置默认值。
@RequestMapping("/handler02")
public String handler02(
@RequestParam(value = "username", required = false, defaultValue = "默认值") String username) {
System.out.println("这个变量的值为:" + username);
return "success";
}
使用http://localhost:8080/3.SpringMVC_request/handler02
访问,控制台输出:
2.@RequestHeader
@RequestHeader
:获取请求头中某个key的值。
- value():指定要获取的请求头,如果请求头中没有这个值会报错。
- required():规定这个参数是否是必须的。
- defaultValue():设置默认值。
@RequestMapping("/handler02")
public String handler02(
@RequestParam(value = "username", required = false, defaultValue = "默认值") String username,
@RequestHeader(value="User-Agent",required = false, defaultValue = "默认值") String userAgent) {
System.out.println("这个变量的值为:" + username);
System.out.println("请求头中浏览器的信息为:" + userAgent);
return "success";
}
使用http://localhost:8080/3.SpringMVC_request/handler02
访问,控制台输出:
3.@CookieValue
@CookieValue
:获取请求中带来的某个cookie的值。
- value():指定要获取的JSESSIONID。
- required():规定这个参数是否是必须的。
- defaultValue():设置默认值。
@RequestMapping("/handler02")
public String handler02(@RequestParam(value = "username", required = false, defaultValue = "默认值") String username,
@RequestHeader(value = "User-Agent", required = false, defaultValue = "默认值") String userAgent,
@CookieValue(value="JSESSIONID", required = false, defaultValue = "默认值") String jid) {
System.out.println("这个变量的值为:" + username);
System.out.println("请求头中浏览器的信息为:" + userAgent);
System.out.println("cookie中的jid的值:" + jid);
return "success";
}
二、演示SpringMVC自动封装POJO
如果请求参数是POJO:
- SpringMVC会将POJO中的每一个属性,从request参数中尝试获取出来,并封装即可。
- 还可以级联封装。
1.Book类与Address类
- Book图书对象中嵌套Address对象,这是为了测试级联。
public class Book {
private String bookName;
private String author;
private Double price;
private Integer stock;
private Integer sales;
private Address address;//Address
//省略setter与getter方法
}
public class Address {
private String province;
private String city;
private String street;
//省略setter与getter方法
}
2.前端表格
- 通过表格向Handler提交图书的各种信息。
- 表格默认为POST请求方式。
<form action="book" method="post">
书名:<input type="text" name="bookName"/><br/>
价格:<input type="text" name="price"/><br/>
库存:<input type="text" name="stock"/><br/>
销量:<input type="text" name="sales"/><br/>
作者:<input type="text" name="author"/><br/>
<hr/>
作者省:<input type="text" name="address.province"/><br/>
作者市:<input type="text" name="address.city"/><br/>
作者街道:<input type="text" name="address.street"/><br/>
<input type="submit"/>
</form>
3.Handler控制器
- 接收到POST请求过来的数据,封装到book对象中。
@RequestMapping("/book")
public String addBook(Book book) {
System.out.println("需要保存的图书:" + book);
return "success";
}
4.测试
提交后,控制台打印结果如下:
需要保存的图书:Book [bookName=西游记, author=å´æ‰¿æ©, price=100.2, stock=12, sales=6, address=Address [province=æ²³å—, city=洛阳, street=è€åŸŽè¡—]]
该乱码问题可以参照:《SpringMVC解决请求乱码》
三、SpringMVC支持的原生API
Handler方法可以接收的ServletAPI还有:
HttpServletRequest
HttpServletResponse
HttpSession
- java.security.Principal
- Locale:国际化有关的区域信息对象。
- InputStream:ServletInputStream inputStream = request.getInputStream();
- OutputStream:ServletOutputStream outputStream = response.getOutputStream();
- Reader:BufferedReader reader = request.getReader();
- Writer:PrintWriter writer = response.getWriter();
控制器
@RequestMapping("/handle03")
public String handler03(HttpSession session, HttpServletRequest request) {
request.setAttribute("reqKey", "reqValue");
session.setAttribute("sessionKey", "SessionValue");
return "success";
}
success页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a>成功666</a>
请求域中的值:${requestScope.reqParam}<br/>
session域中的值:${sessionScope.sessionParam}<br/>
</body>
</html>
测试
通过http://localhost:8080/3.SpringMVC_request/handle03
访问资源,成功将HttpSession和HttpServletRequest 的值打印出来。