1. Spring MVC
- 三层架构 : 表现层、业务层、数据访问层。
MVC :
Model:模型层 ;View: 视图层;Controller: 控制层。
2. Get到的小技巧:关于SpringBoot的自动配置
- get 到的小技巧关于
SpringBoot的自动配置,可以通过Ctrl + shift + N进行全局搜索xxxAutoConfiguration。查看其xxxxProperties.class。
- 比如
Thymeleaf的自动配置:

通过Ctrl + shift + N 搜索Thymeleaf的全局自动配置类 ThymeleafAutoConfiguration

找到Thymeleaf的自动配置属性文件
3. 简单的请求响应案例理解 SpringMVC
@RequestMapping(path = "/http", method = RequestMethod.GET)
public void sendHttp(HttpServletRequest request, HttpServletResponse response) {
// 获取请求数据
System.out.println(request.getMethod());
System.out.println(request.getServletPath());
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String headerValue = request.getHeader(name);
System.out.println(name + " ===> " + headerValue);
}
// 获取请求地址发送的params query
System.out.println(request.getParameter("code"));
// 向浏览器响应数据
response.setContentType("text/html;charset=utf-8");
try (
// 这是jdk 7 之后的写法如果实例有close方法最后会自动关闭进行释放
PrintWriter writer = response.getWriter()
) {
writer.write("<h2>恭喜恭喜!</h2>");
} catch (IOException e) {
e.printStackTrace();
}
}
4. GET 请求
4.1 处理GET请求中传递 query 的请求
需要使用的几个注解
@ResponseBody: 当需要向页面返回一个字符串或者JSON数据的时候需要使用该注解修饰方法;@RequestParam: 处理请求中传递的query参数,name 指定前端 query 中传递的参数的名称;required 设置是否为必传递的参数;defaultValue 当前端为传递参数的时候设置一个默认值;-
下图为具体请求发起图例:
get请求前端传递query的方式 实现代码:
/**
* path : students?current=1&limit=20
*
* @param current
* @param limit
* @return
* @RequestParam 注解
* 1. name 指定前端 query 中传递的参数的名称;
* 2. required 是否为必传递的参数;
* 3. defaultValue 当前端为传递参数的时候设置一个默认值
*/
@RequestMapping(path = "/students", method = RequestMethod.GET)
@ResponseBody
public String getStudents(
@RequestParam(name = "current", required = false, defaultValue = "1") Integer current,
@RequestParam(name = "limit", required = false, defaultValue = "10") Integer limit) {
System.out.println(current); // 20
System.out.println(limit); // 100
return "success";
}
4.2 处理 GET 请求中传递 params 参数的请求
需要使用的几个注解
@PathVariable: 用于指定路径中请求的参数。请求图例:

处理 GET 请求中传递 params 参数的请求
/**
* path : /students/123
*
* @param id
* @param param
* @return
*/
@RequestMapping(path = "/student/{id}/{param}", method = RequestMethod.GET)
@ResponseBody
public String getStudent(@PathVariable(name = "id") Integer id, @PathVariable(name = "param") String param) {
System.out.println(id); // 10086
System.out.println(param); // 王华
return "student";
}
5. POST 请求模拟添加一个学生信息
- 准备一个前端
form表单,注意 :input 中的 name 属性对应的属性值需要和方法中的参数名称一致。
<form method="post" action="/circle/alpha/student">
<input type="text" name="name">
<input type="text" name="age">
<input type="submit" value="添加学生">
</form>
- 后端处理请求的代码:前端
input中的name属性值需要与后端方法中的参数保持一致。
/**
* 发送一个Post请求进行学生信息的添加
* Post 请求
*
* @param name input 中的 name 属性对应的属性值需要和方法中的参数名称一致
* @param age
* @return
*/
@RequestMapping(path = "/student", method = RequestMethod.POST)
@ResponseBody
public String saveStudent(String name, String age) {
System.out.println(name);
System.out.println(age);
return "success";
}
- 访问 项目
static文件夹下的页面:
addStudent.html所在的文件夹

访问 项目`static`文件夹下的页面

发送一个请求进行添加信息
6. 响应 HTML 页面并携带数据
6.1 使用 ModelAndView 的方式
-
mav.setViewName()设置的是将要返回并携带数据到的页面。该页面在resources/templates/demo/teacher.html
/**
* 响应HTML的第一种方式 ModelAndView
*
* @return
*/
@RequestMapping(path = "/teacher", method = RequestMethod.GET)
public ModelAndView getTeacher() {
ModelAndView mav = new ModelAndView();
mav.addObject("name", "zhansgan");
mav.addObject("age", 23);
// 设置将数据返回的模板页面
mav.setViewName("/demo/teacher");
return mav;
}
6.2 使用 Model 的方式
- 方法的返回值就是请求将要到达的页面:
resources/templates/demo/employee.html
@RequestMapping(path = "/company", method = RequestMethod.GET)
public String getEmpToTemplate(Model model) {
model.addAttribute("name", "王小五");
model.addAttribute("age", 23);
// 返回模板页面
return "/demo/employee";
}
7. 响应 JSON 数据
/**
* Java对象 转换为 JSON字符串 => JS 对象
*
* @return
*/
@RequestMapping(path = "/emp", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> getEmp() {
Map<String, Object> map = new HashMap<>();
map.put("name", "王五");
map.put("age", 23);
return map;
}
/**
* 返回List集合形式的JSON
*
* @return
*/
@RequestMapping(path = "/employees", method = RequestMethod.GET)
@ResponseBody
public List<Map<String, Object>> getEmployees() {
List<Map<String, Object>> employees = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("name", "王五");
map.put("age", 23);
employees.add(map);
map = new HashMap<>();
map.put("name", "赵六");
map.put("age", 26);
employees.add(map);
map = new HashMap<>();
map.put("name", "田七");
map.put("age", 27);
employees.add(map);
return employees;
}
8. Cookie的简单使用
Cookie是由服务器端创建发送到浏览器端,用于保存浏览器端的一小块数据。首先创建的Cookie会存在于响应体中,当发送请求的时候,请求体中会将Cookie携带到请求体中带到服务器。Cookie存在于浏览器端,安全性未知。
8.1 设置Cookie
- 在响应体中设置
Cookie它会随着响应体来到浏览器的请求体中 :

响应体中的cookie信息
/**
* cookie的使用
*
* @param response
* @return
*/
@GetMapping("/cookie/set")
@ResponseBody
public String setCookie(HttpServletResponse response) {
Cookie cookie = new Cookie("code", NewsUtils.generateUUID());
// 设置cookie的生效范围
cookie.setPath("/circle/alpha");
// 设置cookie的有效时间
cookie.setMaxAge(60 * 10);
// 发送cookie到response中
response.addCookie(cookie);
return "set cookie";
}
8.2 获取cookie信息
- 获取
cookie信息可以通过一个注解@CookieValue:

获取请求体中的Cookie信息
/**
* 获取cookie 可以通过一个注解 @CookieValue
*
* @return
*/
@GetMapping("/cookie/get")
@ResponseBody
public String getCookie(@CookieValue("code") String code) {
System.out.println(code);
return "get cookie";
}
9. Session的使用
服务器会创建一个
Session对象,当响应数据的时候,服务器会依赖于Cookie传递一个sessionId回到浏览器。当再次请求服务器的时候请求体中的Cookie会将sessionId携带到服务器,服务器就会根据对应的sessionId去查找服务器端的session。Session存在于服务器端安全,但是会给服务器端造成压力。
9.1 设置 Session
- 设置
Session通过HttpSession:

响应体中会通过cookie携带sessionId
/**
* 设置Session
*
* @param session
* @return
*/
@GetMapping("/session/set")
@ResponseBody
public String setSession(HttpSession session) {
session.setAttribute("username", "zhangsan");
session.setAttribute("code", 123);
return "set Session";
}
- 获取
Session:再次发送请求的的时候请求中会通过请求体中的cookie将sessionId传回到服务器

再次发送请求的的时候请求中会通过请求体中的cookie将sessionId传回到服务器
/**
* 设置Session
*
* @param session
* @return
*/
@GetMapping("/session/get")
@ResponseBody
public String getSession(HttpSession session) {
System.out.println(session.getAttribute("username"));
System.out.println(session.getAttribute("code"));
return "get Session";
}
}

