1. RequestParam
示例:(在上篇代码的基础上进行编写)
webapp — anno.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="anno/testRequestParam?name=哈哈">RequestParam</a>
</body>
</html>
controller — AnnoController.java
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value = "name") String username) {
System.out.println("执行了。。。");
System.out.println(username);
return "success";
}
}
正常运行。
@RequestParam(value = “name”) 中的 “name” 必须和anno.jsp 中 name=哈哈" 相同。
2. RequestBody(用于异步)
anno.jsp
<form action="anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username"><br/>
用户年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交">
</form>
AnnoController
//RequestBody:获取请求体内容
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("执行了。。。");
System.out.println(body);
return "success";
}
输出:
3. PathVariable
anno.jsp:
<a href="anno/testPathVariable/10">testPathVariable</a>
AnnoAnnoController.java:
//PathVariable:用于绑定url中的占位符
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id) {
System.out.println("执行了。。。");
System.out.println(id);
return "success";
}
restful 编程风格
- rest——英文:Representational State Transfer——中文:表现层状态转化
- HTTP 协议里面,四个表示操作方式的动词: GET、 POST、 PUT、DELETE。它们分别对应四种基本操作: GET 用来获取资源, POST 用来新建资源, PUT 用来更新资源, DELETE 用来删除资源。
- restful 的实例:
HTTP GET : /account/1 —— 得到 id = 1 的 account
HTTP DELETE: /account/1 —— 删除 id = 1 的 account
HTTP PUT: /account/1 —— 更新 id = 1 的 account
HTTP POST: /account —— 新增 account
4. RequestHeader
anno.jsp:
<a href="anno/testRequestHeader">testRequestHeader</a>
AnnoController.java:
//RequestHeader:用于获取请求消息头
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println("执行了。。。");
System.out.println(header);
return "success";
}
5. CookieValue
anno.jsp:
<a href="anno/testCookieValue">testCookieValue</a>
AnnoController.java:
//CookieValue:用于获取Cookie的值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookie) {
System.out.println("执行了。。。");
System.out.println(cookie);
return "success";
}
6. ModelAttribute
anno.jsp:
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="username"><br/>
用户年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交">
</form>
AnnoController.java:
//ModelAttribute
@RequestMapping("/testModelAttribute")
public String testModelAttribute() {
System.out.println("testModelAttribute执行了。。。");
return "success";
}
@ModelAttribute
public void showUser(){
System.out.println("showUser执行了。。。");
}
ModelAttribute的应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
① ModelAttribute 修饰的方法无返回值
AnnoController.java:
//ModelAttribute
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "abc") User user) {
System.out.println("testModelAttribute执行了。。。");
System.out.println(user);
return "success";
}
//该方法会先执行
//无返回值
@ModelAttribute
public void showUser(String uname, Map<String, User> map) {
System.out.println("showUser执行了。。。");
//通过用户查询数据库(模拟)
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc", user);
}
② ModelAttribute 修饰的方法带返回值
//ModelAttribute
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("testModelAttribute执行了。。。");
System.out.println(user);
return "success";
}
//该方法会先执行
//有返回值
@ModelAttribute
public User showUser(String uname) {
System.out.println("showUser执行了。。。");
//通过用户查询数据库(模拟)
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
return user;
}
7. SessionAttribute
succsee.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Success</title>
</head>
<body>
<h3>入门成功h3</h3>
${ msg }
${ sessionScope }
</body>
</html>
anno.jsp:
<a href="anno/testSessionAttributes">testSessionAttributes</a>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
<a href="anno/delSessionAttributes">delSessionAttributes</a>
AnnoController.java:
//SessionAttributes:用于多次执行控制器方法间的参数共享
//添加值
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes。。。");
model.addAttribute("msg", "开发");
return "success";
}
//获取值
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
System.out.println("testSessionAttributes。。。");
String msg = (String) modelMap.get("msg");
System.out.println(msg);
return "success";
}
//清除值
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status) {
System.out.println("delSessionAttributes。。。");
status.setComplete();
return "success";
}