什么是MVC
- 3.1 使用servletAPI向request域对象共享数据
- 3.2 使用ModelAndView向request域对象共享数据
- 3.3 使用Model向request域对象共享数据
3.4 使用map向request域对象共享数据
前言
本文为一篇MVC笔记
一:SpringMVC路径
1.1:SpringMVC支持ant风格路径
?:表示任意单个字符
*:表示任意的0个或多个字符
**:表示任意的一层或多层目录
1.2:SpringMVC支持路径中的占位符
原始方式:/deleteUser?id=1
rest方式:/deleteUser/1
SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参
<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br> 1 @RequestMapping("/testRest/{id}/{username}") public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){ System.out.println("id:"+id+",username:"+username); return "success"; } //最终输出的内容为-->id:1,username:admin
二:SpringMVC获取请求参数
2.1 通过ServletAPI获取
将HttpServletRequest作为控制器方法的形参,此时HTTPServletRequest类型的参数表示封装了当前请求的请求报文对象。
@RequestMapping("/testParam") public String testParam(HttpServletRequest request){ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username:"+username+",password:"+password); return "success"; }
2.2 通过控制器方法形参获取请求参数
在控制器的方法,设置好对应的形参,当浏览器发送请求的时候,传入对应的参数,匹配成功之后,对应的DispatcherServlet中就会将请求的参数赋值给相对应的形参。
<a th:href="@{/testParam(username='admin',password=123456)}">测试获取请求参数-->/testParam</a><br> 1 @RequestMapping("/testParam") public String testParam(String username, String password){ System.out.println("username:"+username+",password:"+password); return "success"; }
2.3使用注解方式
2.3.1:@RequestParam注解
@RequestParam注解是将请求参数和控制器方法的形参创建映射关系。
@RequestParam注解一共有三个属性
a. value: 指定为形参赋值的请求参数的参数名
b. required:设置是否为必传参数。默认为true
c. defaultValue:当value所指定的请求参数没有传值或者传值为""时,使用默认值为形参赋值。
2.3.2:@RequestHeader注解
@RequestHeaders是将请求头信息和控制器方法的形参创建映射练习
@RequestHeaders注解一共有3个属性,value、required、defaultValue、用法通@RequestParam
2.3.3:@CookieValue 注解
@CookieValue是将cookie数据和控制器方法的形参创建映射关系
@CookieValue一共有三个属性value、required、defaultValue、用法通@RequestParam
2.4 通过POJO获取请求参数
在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类属性名一致,那么请求参数就会为此属性赋值
<form th:action="@{/testpojo}" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br> 年龄:<input type="text" name="age"><br> 邮箱:<input type="text" name="email"><br> <input type="submit"> </form> 12345678 @RequestMapping("/testpojo") public String testPOJO(User user){ System.out.println(user); return "success"; } //最终结果-->User{id=null, username='张三', password='123', age=23, sex='男', email='123@qq.com'}
三:域对象共享数据
3.1 使用servletAPI向request域对象共享数据
//对应的Controller方法 @RequestMapping("/testServletAPI") public String testServletAPI(HttpServletRequest request){ request.setAttribute("testScope", "hello,servletAPI"); return "success"; }
3.2 使用ModelAndView向request域对象共享数据
@RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ // ModelAndView 拥有Model和View两个功能,Model负责向请求域共享数据,View设置视图 ModelAndView mav = new ModelAndView(); //向请求域共享数据 mav.addObject("testScope","hello,ModelAndView"); //设置视图,实现页面跳转 mav.setViewName("success"); return mav; }
3.3 使用Model向request域对象共享数据
@RequestMapping("/testModel") public String testModel(Model model){ model.addAttribute("testScope", "hello,Model"); return "success"; }
3.4 使用map向request域对象共享数据
@RequestMapping("/testMap") public String testMap(Map<String, Object> map){ map.put("testScope", "hello,Map"); return "success"; }
3.5 使用ModelMap向request域对象共享数据
@RequestMapping("/testModelMap") public String testModelMap(ModelMap modelMap){ modelMap.addAttribute("testScope", "hello,ModelMap"); return "success"; }
3.6 共享数据如何展示
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>demo3真的正常</h1> <a th:href="@{/testServletAPI}">通过servletAPI向request域对象共享数据</a><br> <a th:href="@{/testModelAndView}">通过ModelAndView向request域对象共享数据</a> </body> </html> //跳转的页面,${testScope}是Controller里设置的对应的key值 <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>success</h1> <p th:text="${testScope}"></p> </body> </html>
四:总结
本文主要讲述了SpringMVC的路径、请求的参数、域对象的数据共享知识。