本篇介绍什么是spring MVC ,如何使用spring MVC,了解如何连接客户端与后端,如何从前端获取各种参数;如有错误,请在评论区指正,让我们一起交流,共同进步!
spring MVC :spring MVC 是一个 基于 Servlet API 构建 的 Web框架;(spring MVC == spring Web MVC)=》使用spring MVC,客户端就能通过请求能与后端进行交互;
为什么要认识MVC?
MVC是一种思想,而spring MVC 是 MVC思想的实现;
认识MVC:
MVC: 英文 Model View Controller - 模型视图控制器,一种软件架构模式;
MVC 执行流程:(用户请求,经过Controller + Model + View处理,将结果返回前端页面的过程)
① 用户请求首先到 Controller
② Controller 将请求转发给Model
③ Model 处理业务并将数据结果返回给 Controller
④ Controller 将数据给 View 引擎
⑤ View 转换数据生成最终页面给用户;
spring MVC 连接:将浏览器(客户端)与程序连接起来;- 通过请求能调用spring程序;
如何连接客户端 与 程序呢?
方式一:通过注解 @RequestMapping() 实现路由(也就是访问路径);
【注】
@RequestMapping()可修饰类 和 修饰方法;
- @RequestMapping的参数就是路由,格式为:“/xxx”;
修饰类为一级路由,修饰方法为二级路由;- @RequestMapping支持请求类型:多种类型包括 post + get; (其他类型不介绍了,这两种是常用类型)
- 设置后端接收的请求类型:例如:修改@RequestMapping,让java程序只支持post请求:
@RequestMapping(path=“/test”, method = RequestMethod.POST)
方式二:通过@GetMapping() - 只支持get请求,写在方法上
使用方式:@GetMapping(“/xxx”)
通过@PostMapping() - 只支持post请求
使用方式:@PostMapping(“/xxx”)
spring MVC 获取参数:从请求中获取参数;
@RequestMapping("/name2")
public String getName(String name, Integer age) {
return "Name: " + name +" "+ "age: " + age;
}
@RequestMapping("/age")
public int a(@RequestParam(value = "a", required = false) String age) {
return age;//修改后端名称就可以在此方法中使用了;
}
@RequestMapping("/json")
public User addJson(@RequestBody User user) {
return user;
}
//{}来装要获取的参数:{}中的名称a 与 方法中的名称aid不一样,就需要使用();
@RequestMapping("/article/{a}")
public Integer article(@PathVariable("a") Integer aid) {
return aid;
}
//如果{}中的参数名称 与方法中设置的名称一样,就可以省略();如下:
@RequestMapping("/article2/{aid}/{name}")
public String article2(@PathVariable Integer aid ,@PathVariable String name) {
return "id: " + aid + " " + "name: " + name;
}
@RequestMapping("/upload")
public String upload(@RequestPart("my_file")MultipartFile file) throws IOException {
//1.生成一个UUid: 全球唯一ID
String name = UUID.randomUUID().toString().replace("-", "");
//2.得到源文件的后缀: 从.后开始截取;
name += (file.getOriginalFilename().
substring(file.getOriginalFilename().lastIndexOf(".")));
String path = "D:\\File_Test\\" + name;
//3.保存文件
file.transferTo(new File(path));
return path;
}
//获取cookie
//value参数: 是cookie的名称;required: 是设置非必须参数;
@RequestMapping("/get_cookie")
@ResponseBody
public String getCookie(@CookieValue(value = "test_cookie", required = false)String cookie) {
return cookie;
}
//获取session
@RequestMapping("/get_session")
@ResponseBody
public String getSession(@SessionAttribute(value = "test_session",required = false)String session) {
return session;
}
//获取header
@RequestMapping("/get_header")
@ResponseBody
public String getHeader(@RequestHeader(value = "test_Header",required = false)String header) {
return header;
}
spring MVC 输出数据:将数据返回前端页面;
为什么使用 @Controller,还要加上@ResponseBody?
之前前后端不分离的时,使用@Controller注释,返回的是一个页面;但现在前后端分离,需要返回数据就可以,这就使用到了@ResponseBody注释,加上注释后返回的就是数据,不再是页面了;
【注】组合注释@RestController == @Controller + @ResponseBody;
forward : 请求转发 与 redirect :请求重定向
区别:
- 请求重定向 会将请求定位到新的资源;请求转发服务器端转发,不会定位新资源;
- 请求重定向地址发生变化,请求转发地址不发生变化;
- 请求重定向不存在原来外部资源不能访问,请求转发存在原来的外部资源不能访问;
示例:张三 拿钱 给 李四,让李四去买饼干,如果李四去买就是请求转发;如果李四不同意去买就是请求重定向,就需要张三自己去买;
对于原外部资源能不能访问:张三自己去买(请求重定向),买的一定是自己喜欢吃的,但是让李四去买(请求转发),不一定是张三喜欢吃的;
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!