回顾:SpringMVC快速入门,搭建SpringMVC开发环境
回顾:RequestMapping注解详解
@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";
}
}
@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";
}
}
@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方法
/*
属性
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";
}
}
@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";
}
}
后台
@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>Titletitle>
head>
<body>
<h3>你已入门啦h3>
<div>
${name}
div>
body>
html>
@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
@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