• 什么是MVC-02


    前言

    本文为一篇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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二: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";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3使用注解方式

    2.3.1:@RequestParam注解

    1. @RequestParam注解是将请求参数和控制器方法的形参创建映射关系。
    2. @RequestParam注解一共有三个属性
      a. value: 指定为形参赋值的请求参数的参数名
      b. required:设置是否为必传参数。默认为true
      c. defaultValue:当value所指定的请求参数没有传值或者传值为""时,使用默认值为形参赋值。

    2.3.2:@RequestHeader注解

    1. @RequestHeaders是将请求头信息和控制器方法的形参创建映射练习
    2. @RequestHeaders注解一共有3个属性,value、required、defaultValue、用法通@RequestParam

    2.3.3:@CookieValue 注解

    1. @CookieValue是将cookie数据和控制器方法的形参创建映射关系
    2. @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'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三:域对象共享数据

    3.1 使用servletAPI向request域对象共享数据

    //对应的Controller方法
    @RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request){
        request.setAttribute("testScope", "hello,servletAPI");
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.3 使用Model向request域对象共享数据

    @RequestMapping("/testModel")
    public String testModel(Model model){
        model.addAttribute("testScope", "hello,Model");
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.4 使用map向request域对象共享数据

    @RequestMapping("/testMap")
    public String testMap(Map<String, Object> map){
        map.put("testScope", "hello,Map");
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.5 使用ModelMap向request域对象共享数据

    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("testScope", "hello,ModelMap");
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.6 共享数据如何展示

    DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    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>Titletitle>
    head>
    <body>
    <h1>successh1>
    <p th:text="${testScope}">p>
    body>
    html> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    四:总结

    本文主要讲述了SpringMVC的路径、请求的参数、域对象的数据共享知识。

  • 相关阅读:
    接口自动化测试思路和实战(2):模块化测试脚本框架
    V853开发板硬件资料——RISC-V核E907用户手册
    Spring Boot 9 :详细描述Spring Boot + Vue项目部署过程:Centos为例(重点)
    软件兼容性测试对软件产品起到什么作用?CMA、CNAS软件测评中心分享
    李沐大神动手学深度学习——学习笔记(连载)
    C++ 运算符重载
    MSP430F5529库函数定时器A——定时中断
    CoinW TOKEN2049 After Party落幕,分享如何在加密寒冬保持增长
    大型企业网如何部署NAT实现需求
    算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)
  • 原文地址:https://blog.csdn.net/hlzdbk/article/details/126656537