文章目錄
回顧:SpringMVC快速入門,搭建SpringMVC開發環境
常用註解
1.RequestMapping註解:建立請求URL和處理方法之間的對應關係
2.RequestParam註解:把請求中的指定名稱的參數傳遞給控制器中的形參賦值
@Controller
@RequestMapping(value ="/param")
public class RequestParamController {
/*
屬性
value:請求參數中的名稱
required:請求參數中是否必須提供此參數。不寫默認是true,必須提供該請求參數,否則404
defaultValue:默認值
*/
@RequestMapping(value ="/test")
public String add(@RequestParam(value = "name",required = false,defaultValue = "無名氏") String name,
@RequestParam(value = "age") Integer age){
System.out.println(name+" "+age);
//http://localhost:8080/param/test?name=張三三&age=10 控制檯輸出: 張三三 10
//http://localhost:8080/param/test?name=張三三 控制檯輸出: HTTP Status 400 – Bad Request
//http://localhost:8080/param/test?age=18 控制檯輸出: 無名氏 18
return "login";
}
}
3.RequestBody註解:獲取請求體的內容,參數拼接成一個字符串
@Controller
@RequestMapping(value = "/body")
public class RequestBodyController {
/*接收前端傳入的參數,並將參數拼接成一個字符串 注意:用於POST請求
屬性
required:是否必須有請求體,默認值是true
*/
@RequestMapping(value = "/test")
public String show(@RequestBody String body){
System.out.println(body);
//name=%E5%91%A8%E5%93%88%E5%93%88&age=23&address=%E6%B1%9F%E8%A5%BF
return "login";
}
}
4.PathVariable註解:綁定url中的佔位符
@Controller
@RequestMapping(value = "/pathVariable")
public class PathVariableController2 {
/*@PathVariable:提供對RestFul風格的支持
Restful風格的URL:請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法
可以通過 GET、 POST、 PUT、 PATCH、 DELETE 等方式對服務端的資源進行操作。其中,GET 用於查詢資源,POST 用於創建資源,
PUT 用於更新服務端的資源的全部信息,PATCH 用於更新服務端的資源的部分信息,DELETE 用於刪除服務端的資源。
根據ID刪除
請求: http://localhost:8080/pathVariable/1
http://localhost:8080/pathVariable/2
......
...
*/
@RequestMapping(value = {"/{id}"},method = RequestMethod.DELETE)
public String delete(@PathVariable(value = "id")Integer id){
System.out.println("刪除服務端的資源 id爲"+id);
return "login";
}
//根據ID查詢
@RequestMapping(value = {"/{id}"},method = RequestMethod.GET)
public String getById(@PathVariable(value = "id")Integer id){
System.out.println("查詢資源 id爲"+id);
return "login";
}
}
使用HTTP Client工具測試體現:請求路徑一樣,可以根據不同的請求方式執行後臺的不同方法
DELETE 方式,執行delete方法
GET方式,執行getById方法
5.RequestHeader註解:獲取指定請求頭的值
/*
屬性
value:請求頭的名稱
required:請求參數中是否必須提供此請求頭。不寫默認是true,必須提供有該請求頭。
defaultValue:默認值
*/
@Controller
@RequestMapping(value ="/header")
public class RequestHeaderController {
@RequestMapping(path="/test")
public String show(@RequestHeader(value="Host",required = true,defaultValue = "沒有值") String header) {
System.out.println(header);
//請求 http://localhost:8080/header/test 控制檯輸出 localhost:8080
return "login";
}
}
6.CookieValue註解:獲取指定cookie的名稱的值
@Controller
@RequestMapping(value = "/cookie")
public class CookieValueController {
/*
屬性
·value:cookie的名稱
required:請求參數中是否必須提供此cookie的名稱。不寫默認是true,必須提供有該cookie的名稱。
defaultValue:默認值
*/
@RequestMapping(value = "/test")
public String show(@CookieValue(value = "JSESSIONID",required = false,defaultValue = "JSESSIONID沒有值")String jsid){
System.out.println(jsid);
//6598974983EC4013BFC5375337B6EBFC
return "login";
}
}
7.SessionAttributes註解:用於多次執行控制器方法間的參數共享(全局Session設置)
①Model(模型信息)的使用
- 作用:SpringMVC會把Model(模型信息)中的的數據放入到request域對象中,頁面可以通過EL表達式來取request域中的數據。
- 示例:後臺使用Model的addAttribute方法,頁面使用EL表達式取數據。
後臺
@Controller
@RequestMapping(value = "/model")
public class ModelController {
/* SpringMVC會把Model(模型信息)中的的數據放入到request域對象中
後臺使用Model的addAttribute方法添加信息
前臺頁面使用EL表達式可取數據
*/
@RequestMapping(value = "/test")
public String getUser(Model model){
//添加name信息,SpringMVC會把name存儲到HttpServletRequest作用域中
model.addAttribute("name","周哈哈");
return "login";
}
}
前臺 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>你已入門啦</h3>
<div>
${name}
</div>
</body>
</html>
②SessionAttributes註解
@Controller
@RequestMapping(value = "/session")
/*@SessionAttributes:把數據存入到session域對象中
value = "name":表示將Request域中的name值獲取並存入到Session中
types:將request中指定的數據類型存入到Session中
*/
@SessionAttributes(value= {"username","password","age"},types= {Integer.class})
public class SessionAttributesController {
//添加Session(向session中存入值)
@RequestMapping(path="/save")
public String save(Model model) {
System.out.println("把數據存入到session域對象中");
model.addAttribute("username", "root");
model.addAttribute("password", "666");
model.addAttribute("age", 18);
return "test";
}
//後臺查詢Session(從session中獲取值)
@RequestMapping(path="/find")
public String find(ModelMap modelMap) {
String username = (String) modelMap.get("username");
String password = (String) modelMap.get("password");
Integer age = (Integer) modelMap.get("age");
System.out.println(username + " "+password +" "+age);
return "test";
}
//刪除session
@RequestMapping(path="/delete")
public String delete(SessionStatus status) {
status.setComplete();
System.out.println("已刪除session");
return "test";
}
}
分別依次訪問:
http://localhost:8080/session/save
http://localhost:8080/session/find
http://localhost:8080/session/delete
控制檯輸出:
8.ModelAttribute註解:用於初始化相關屬性數據
①作用在方法上,初始化相關屬性
@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {
/**
作用在方法上,初始化相關參數(優先執行)
如下,先給user的level屬性賦值,再返回到add方法的入參,綁定所提交表單的值。
*/
@ModelAttribute
public User initUser(){
System.out.println("ModelAttribute方法執行 初始化用戶Level");
User user = new User();
user.setLevel(1);
return user;
}
/*
增加用戶 http://localhost:8080/modelattribute/add?name=張三三
此時的user的Level已經被賦值爲1了
*/
@RequestMapping(value = "/add")
public String add(User user){
System.out.println("add方法執行");
System.out.println(user);
return "login";
}
}
User
public class User {
private String name;
//等級
private Integer level;
.....
...
}
訪問: http://localhost:8080/modelattribute/add?name=張三三
控制檯輸出:Level已被初始化爲1
②作用在參數上,初始化相關屬性
@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {
//初始化數據
@ModelAttribute
public void initUserInfo(Map<String,User> map){
System.out.println("ModelAttribute方法執行 初始化用戶Level");
User user = new User();
user.setLevel(10);
map.put("user",user);
}
// @ModelAttribute:作用在參數上 http://localhost:8080/modelattribute/param/add?name=張三三
@RequestMapping(value = "/param/add")
public String addUser(@ModelAttribute("user")User user){
System.out.println("addUser方法執行");
System.out.println(user);
return "login";
}
}
訪問: http://localhost:8080/modelattribute/add?name=張三三
控制檯輸出:Level已被初始化爲10