• SpringMVC


    1.什么是SpringMVC

    1、SpringMVC是一个Web框架

    2、SpringMVC是基于Servlet API构建的

    但是要深层次的理解SpringMVC,我们就需要搞清楚什么是MVC

    1.1 MVC的定义

    MVC是Model View Controller 的缩写,它是软件工程的一种软件架构模式,他把软件系统分为模型、视图和控制器三个基本部分。

                                                                                                                                                                                                                                   

    • Model(模型):使应用程序中用于处理应用程序数据逻辑部分,通常模型对象负责在数据库中存取数据
    • View(视图):是应用程序中处理数据的显示的部分,通常视图时依据模型数据创建的。
    • Controller(控制器):是应用程序中处理用户交互的部分,通常控制器负责从事途中读取数据,控制用户输入,并向模型发送数据。 

    1.2 MVC执行流程

    1、用户请求首相发到Controller

    2、Controller将请求转发给Model

    3、Model处理业务并将数据结果给Controller

    4、Controller会将数据给View引擎

    5、View转换数据生成最终的页面给用户

    2. 如何学习Spring MVC

    学习Spring MVC我们只需要掌握一下三个功能:

    1. 连接的功能:将用户和Java程序连接,也就是范文一个地址就能够调用我们的Spring程序
    2. 获取参数的功能:用户访问的时候会带一些参数,在程序中要想办法获取到参数
    3. 输出数据的功能:执行业务逻辑之后,要把程序执行的结果返回给用户

    2.1 创建Spring MVC项目

    Spring MVC 可以基于 Spring Boot 创建,也就是创建⼀个 Spring Boot 项⽬,勾选上 Spring Web 模块即可,如下图所示:

    创建一个UserController类,实现用户到Spring程序的互联互通

    1. @RestController
    2. @RequestMapping("/user")//路由器规则注册
    3. public class UserController {
    4. @RequestMapping("/hi")
    5. public String sayHi(){
    6. return "

      sayHi

      "
      ;
    7. }
    8. }

    2.2 @RequestMapping基础使用

    @RequestMapping即可以修饰类,亦可以修饰方法,当修饰了·方法时访问地址就是注解中的参数:类+方法

    2.2.1@RequestMapping是post还是get请求?

    我们可以使用Postman测试一下:

    测试可知既可以接受Post也可以接受get方法

    2.1.2 指定GET/POST方法类型

    我们可以显示指定@RequestMapping来接受POST的情况

    1. @RestController
    2. @RequestMapping("/user")//路由器规则注册
    3. public class UserController {
    4. @RequestMapping(value = "/hi",method = RequestMethod.POST)
    5. public String sayHi(){
    6. return "

      sayHi

      "
      ;
    7. }
    8. }

    此时我们使用postman发送一个get请求就接受不到了

    GET请求的三种写法:

    1. // 写法1
    2. @RequestMapping("/index")
    3. // 写法2
    4. @RequestMapping(value = "/index",method = RequestMethod.GET)
    5. // 写法3
    6. @GetMapping("/index")

    POST的两种写法:

    1. // 写法1
    2. @RequestMapping(value = "/index",method = RequestMethod.POST)
    3. // 写法2
    4. @PostMapping("/index")

     2.2 获取参数

    2.2.1 传递单个参数

    在Spring MVC中可以直接用方法中的参数来实现传参

    1. @RestController
    2. @RequestMapping("/user")//路由器规则注册
    3. public class UserController {
    4. @RequestMapping(value = "/hi",method = RequestMethod.POST)
    5. public String sayHi(){
    6. return "

      sayHi

      "
      ;
    7. }
    8. @RequestMapping("/test")
    9. public String test(String name){
    10. return name;
    11. }
    12. }

    使用Postman 发送请求

    2.2.2 传递对象

    Spring MVC可以自动实现参数对象赋值

    1. @Data
    2. public class Person {
    3. private String name;
    4. private String password;
    5. private int id;
    6. }
    7. @RestController
    8. @RequestMapping("/user")//路由器规则注册
    9. public class UserController {
    10. @RequestMapping(value = "/hi",method = RequestMethod.POST)
    11. public String sayHi(){
    12. return "

      sayHi

      "
      ;
    13. }
    14. @RequestMapping("/test")
    15. public String test(String name){
    16. return name;
    17. }
    18. @RequestMapping("/test2")
    19. public void test2(Person person){
    20. System.out.println(person.getName());
    21. System.out.println(person.getPassword());
    22. System.out.println(person.getId());
    23. }
    24. }

    Postman发送请求

    最终执行结果;

     

    2.2.3 后端参数重命名

    某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个 name 给后端,⽽后端⼜是有 name111 字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值

    1. @RequestMapping("/test3")
    2. public String test3(@RequestParam("name")String name111){
    3. return name111;
    4. }

     Postman返回结果:

    2.2.4 @RequestBody接受JSON对象

    我们在postman中构造一个json数据

    1. @RequestMapping("test4")
    2. public void test4(@RequestBody(required = false) Person person){
    3. System.out.println(person);
    4. }

     

    我们可以尝试去掉@RequestBody试试,

    @RequestBody 是Spring框架中的一个注解,用于指示一个方法参数应该从请求的body部分中获取数据。通常在处理POST请求时使用,特别是当请求的数据是JSON格式时。               

    2.2.5 获取URL中参数@PathVariable

    后端实现代码:

    1. @RequestMapping("/test5/{name}/{password}")
    2. public void test5(@PathVariable String name,@PathVariable String password){
    3. System.out.println(name);
    4. System.out.println(password);
    5. }

    Postman发送请求:

     运行结果:

    注意事项:@PostMapping("test5/lisi/123")不可以省略

    2.2.6 上传文件@RequestPart

    我们上传一个照片文件为例子:

    1. @RequestMapping("/test6")
    2. public String test6(@RequestPart("myfile")MultipartFile file) throws IOException {
    3. //生成一个唯一的id|UUID=全球唯一id
    4. String name = UUID.randomUUID().toString().replace("-","");
    5. //得到源文件的后缀名
    6. name+=(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
    7. String path = "D:\\test\\"+name;
    8. //保存文件
    9. file.transferTo(new File(path));
    10. return path;
    11. }

    Postman发送请求:

    2.2.7 获取Cookie/Session/header

    获取Session

    1. private static String _SESSION_KEY = "SESSION_KEY";
    2. @RequestMapping("/set_sess")
    3. public String setSess(HttpServletRequest request){
    4. HttpSession session = request.getSession();
    5. if(session != null){
    6. session.setAttribute(_SESSION_KEY,"张三");
    7. return "session set success";
    8. }else{
    9. return "session set fail";
    10. }
    11. }
    12. @RequestMapping("/get_sess")
    13. public String getSess(@SessionAttribute(required = false,value = "SESSION_KEY")String name){
    14. return name;
    15. }

    Postman运行结果:

     获取Cookie

    1. @RequestMapping("/getcookie")
    2. public String getCookie(@CookieValue(value="java",required = false)String ck){
    3. return ck;
    4. }

    获取Header

    1. @RequestMapping("/header")
    2. @ResponseBody
    3. public String header(@RequestHeader("User-Agent") String userAgent) {
    4. return "userAgent:"+userAgent;
    5. }

  • 相关阅读:
    【1】请问什么是 AQS?
    22-Docker-常用命令详解-docker pull
    008-break语句与continue语句的使用,循环嵌套
    开发个人Go-ChatGPT--5 模型管理 (三)
    Temu如何提高销量,Temu能做无货源吗?——站斧浏览器
    学 Python 都用来干嘛的?
    [数据结构]链表OJ--环形链表判断是否有环(快慢指针法)
    Transformer机器翻译模型(代码实现案例)
    好用的办公软件有哪些
    MongoDB之MongoDBConnectorBI安装与使用
  • 原文地址:https://blog.csdn.net/loss_rose777/article/details/134421837