目录
一、什么是 Spring MVC
二、MVC定义
三、简述 SpringMVC 起到的作用有哪些?
四、注解
五、请求转发或请求重定向
一、什么是 Spring MVC
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。从上述定义我们可以得出两个关键信息:1. Spring MVC 是⼀个 Web 框架。2. Spring MVC 是基于 Servlet API 构建的。
二、MVC定义
MVC 是 Model View Controller 的缩写,它是软件工程中的⼀种软件架构模式,它把软件系统分 为模型、视图和控制器三个基本部分。
- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据 库中存取数据。
- View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据, 控制用户输入,并向模型发送数据。
MVC 和 Spring MVC 的关系:MVC 是⼀种思想,而 Spring MVC 是对 MVC 思想的具体实现。总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框架,那么当用户在浏览器中输入了 url 之后,我们的 Spring MVC 项目就可以感知到用户的请求。
三、简述 SpringMVC 起到的作用有哪些?
SpringMVC 是一个 Spring 内置的 MVC 框架,使用它可以开发出 RESTful 接口,为网站或手机 APP 提供接口支持,并且它可以轻松的解决 WEB 开发中常见的问题,如参数接收、文件上传、表单验证、国际化等等,且使用简单。
四、注解
@RequestMapping:支持 GET/POST 类型的请求。
@GetMapping:支持 GET 类型的请求。
@PostMapping:支持 POST 类型的请求。
@ResponseBody:返回非静态 HTML 页面数据。
@RequestParam:接收前端参数。
@RequestBody:接收 JSON 对象参数。
@PathVariable :获取URL中参数
例子: @PostMapping("/m6/{name}/{password}") public Object method_6(@PathVariable String name, @PathVariable String pass word) {System.out.println("name:" + name);System.out.println("password:" + password);return "redirect:/index.html"; }
注意事项:@PostMapping("/m6/{name}/{password}") 中的 {password} 参数不能省略。
@RequestPart:获取上传的文件。
@RequestMapping("/param9") public String param9(String name, @RequestPart("myfile") MultipartFile fil e) throws IOException {// 获取⽂件后缀名String fileName = file.getOriginalFilename().substring(file.getOrigina lFilename().lastIndexOf("."));// ⽂件保存地址String filePath = ClassUtils.getDefaultClassLoader().getResource("stat ic").getPath() +"/" + UUID.randomUUID() + fileName;// 保存⽂件file.transferTo(new File(filePath));return filePath + " 上传成功."; }
获取项目目录的几种方式:
ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath(); new ClassPathResource("").getFile().getAbsolutePath(); ClassUtils.getDefaultClassLoader().getResource("").getPath(); ResourceUtils.getFile("classpath:static/").getPath();
@CookieValue:获取 Cookie 信息。
@RequestHeader : 获取头部信息
传统获取 header/cookie :@RequestMapping("/param10") @ResponseBody public String param10(HttpServletResponse response, HttpServletRequest requ est) {String name = request.getParameter("name");// 获取所有 cookie 信息Cookie[] cookies = request.getCookies();String userAgent = request.getHeader("User-Agent");return name + ":"+userAgent; }
简洁的获取 Cookie—@CookieValue@RequestMapping("/cookie") @ResponseBody public String cookie(@CookieValue("cookie") String cookie) {return "cookie:" + cookie; }
简洁获取 Header—@RequestHeader@RequestMapping("/header") @ResponseBody public String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent; }
Session 存储和获取Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的,如下代码所示:@RequestMapping("/setsess") @ResponseBody public String setsess(HttpServletRequest request) {// 获取 HttpSession 对象,参数设置为 true 表示如果没有 session 对象就创建⼀个 sessionHttpSession session = request.getSession(true);if(session!=null){session.setAttribute("username","java");}return "session 存储成功"; }
读取 Session 可以使用 HttpServletRequest,如下代码所示:@RequestMapping("/sess") @ResponseBody public String sess(HttpServletRequest request) {// 如果 session 不存在,不会⾃动创建HttpSession session = request.getSession(false);String username = "暂⽆";if(session!=null && session.getAttribute("username")!=null){username = (String) session.getAttribute("username");}return "username:"+username; }
获取 Session 更简洁的方式 - @SessionAttribute :@RequestMapping("/sess2") @ResponseBody public String sess2(@SessionAttribute(value = "username",required = false) String username) {return "username:"+username; }
五、请求转发或请求重定向
forward - 请求转发 VS redirect - 请求重定向请求转发和重定向的使用对比:// 请求重定向 @RequestMapping("/index") public String index(){return "redirect:/index.html"; } // 请求转发 @RequestMapping("/index2") public String index2(){return "forward:/index.html"; }
举例说明 forward 和 redirect:forward(请求转发)和 redirect(请求重定向)的区别,举例来说,例如,你告诉你妈妈,你想吃辣 条,如果你妈妈,说好,我帮你去买,这就是 forward 请求转发;如果你妈妈让你自己去买,那么就是请求 redirect 重定向。
forward 和 redirect 具体区别如下:1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。2. 请求重定向地址发生变化,请求转发地址不发生变化。3. 请求重定向与直接访问新地址效果⼀样,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。