上海红酒网站建设移动排名提升软件
一、Spring MVC介绍
a. Spring MVC是一个Web框架
b. Spring MVC是基于Servlet API构成的
MVC 是 Model View Controller 的缩写。
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。
学习Spring MVC目标:
a.连接功能:将用户(浏览器)和JAVA程序连接起来,也就是访问一个地址能调用到Spring程序。
b.获取参数的功能:用户访问的时候会带一些参数,在程序中想办法获得这些参数。
c.输出数据的功能:执行了业务逻辑之后,要把程序执行结果返回给用户。
二、连接功能实现
2.1 @RequestMapping 注解介绍
用来注册接口的路由映射
即可修饰类,也可以修饰⽅法
package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayhi")//路由映射(用户和程序的连接)@ResponseBody//当前方法返回的是一个非静态页面的数据public String sayHi(){return "Hello,Spring MVC";}
}
@RequestMapping默认支持GET请求,但也支持Post请求
2.2 只支持GET请求
三种写法:
2.3只支持Post请求
二、获取参数实现
2.1 获取单个参数
2.2 获取多个参数(或者表单参数)
2.3 获取对象
定义UserInfo对象:
2.4获取JSON对象
利用postman结果显示如下:
2.5 后端参数重命名(扩展知识)
当前端传递的参数和后端的参数不一致,就可以用这种方式。
使用注解@RequestParam
2.6获取URL中的参数
利用注解@PathVariable
2.7 上传文件(图片)
关键步骤:
a.接受前端传递的文件:
@RequestPart(“file”)MultipartFile file
b.将前端传递过来的文件保存到本地:
file.transferTo(new File(filePath + filename));
第一步:
具体实现:
@Controller
@Slf4j
@ResponseBody//当前方法返回的是一个非静态页面的数据
@RequestMapping("/user")
public class UserController {@Value("${myfile.path}")private String filePath;//从配置文件中获取图片的上传路径@RequestMapping("/upfile")public boolean upFile(String username, @RequestPart("file")MultipartFile file){boolean result = false;try {//获取原文件的名称String fileType = file.getOriginalFilename();//获取文件名称后缀fileType= fileType.substring(fileType.lastIndexOf("."));//文件名称String filename = UUID.randomUUID().toString() + fileType;file.transferTo(new File(filePath + filename));result = true;log.info(username+"上传图片成功!");} catch (IOException e) {System.out.println("图片上传失败");}return result;}
用postman模拟:
2.8获取cookie
2.8.1传统方式获取
2.8.2简洁方式获取
使用注解**@CookieValue**
2.9获取请求头header中的信息
使用注解@RequestHeader
2.10 获取Session
使用注解@SessionAttribute
//定义全局的session keyprivate final String SESSION_KEY = "SESSION_KEY";/*** 设置 session** @param request* @return*/@RequestMapping("/setsess")public boolean setsess(HttpServletRequest request){boolean result =false;//1.得到session对象try {HttpSession session = request.getSession(true);session.setAttribute(SESSION_KEY, "java");result = true;}catch (Exception e){log.info("出现了异常:" + e.getMessage());}return result;}/*** 获取session* @param data* @return*/@RequestMapping("/getsess")public String getSess(@SessionAttribute(name = "SESSION_KEY",required = false) String data){return data;}
三、返回数据
默认情况下返回的是一个页面,而不是页面中的数据。
现在因为前后端分离,所以可以只返回数据就可以了。
例如:
综上可以看到,当不加注解时,返回的是一个页面,而不是页面中的数据。
3.1使用注解@ResponseBody
当@ResponseBody加在类上,说明这个类中的所有方法,返回的都是一个非静态页面的数据。
3.2注解@RestController
@RestController = @Controller + @ResponseBody
源码:
使用@RestController一个注解可以代替之前的两个注解
四、请求转发和请求重定向
4.1具体实现
1.forward:请求转发
2.redirect:请求重定向
请求转发的结果:
请求重定向的结果:
4.2 forward和redirect的具体区别
1.请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
2.请求重定向地址发⽣变化,请求转发地址不发⽣变化。