【springMVC篇1】初识springMVC

目录

一、什么是springMVC

1.1springMVC定义:

模型(Model)

视图(View) 

第一大类:服务器端的视图

第二大类:客户端的视图

springMVC的工作流程 

1.2 MVC和springMVC之间的关系

二、学习SpringMVC的目标

2.1实现用户和程序之间的映射

     使用@RequestMapping注解

关于方法的返回值

@RequestMapping注解的参数

2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

第二种:传递多个参数的情况(本质上和单个一样的)

第三种方式:获取一个对象

第四种方式:JSON格式传递对象

第五种方式:后端参数的重命名@RequestParam

@RequestParam的required属性

第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)


一、什么是springMVC

SpringMVC是一个web框架,这个框架是基于MVC思想Servlet的API实现的一个Web框架。


1.1springMVC定义:

MVC是Model View Controller的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为:

模型(Model)视图(View)控制器(Controller)三个部分。


模型(Model)

       是应用程序当中用于处理应用数据逻辑的部分。通常情况下,模型对象用于负责在数据库当中存储数据。


视图(View) 

是应用程序当中处理数据显示的部分,通常视图是依据模型数据创建的。

视图分为两大类:

第一大类:服务器端的视图

运行在服务器端的视图:负责解析数据和模板


第二大类:客户端的视图

运行在客户端的视图:负责展示实际的前端页面


springMVC的工作流程 

【springMVC篇1】初识springMVC_第1张图片


1.2 MVC和springMVC之间的关系

     MVC是一种软件设计的思想,而springMVC是MVC思想的具体实现

     同时SpringMVC又是Spring框架当中的一个Web模块,它是随着Spring的诞生而存在的一个框架。

【springMVC篇1】初识springMVC_第2张图片


二、学习SpringMVC的目标

有下面的三个步骤:

步骤1:实现用户和程序的映射(在浏览器输入URL地址之后,能够在程序当中匹配到相应的方法);

步骤2:服务器端要得到用户请求的参数

步骤3:服务器端要把结果返回给用户

下面,将分别介绍这三个步骤的具体实现: 


2.1实现用户和程序之间的映射

     使用@RequestMapping注解

      这个注解可以作用于类上面,也可以作用于方法上面,但是一定要作用在方法上面。

       当这个注解作用在类(Controller)上面的时候,意味着:当访问这一个类下面的所有方法的时候,请求的一级路径就是@RequestMappping(路径)。

       二级路径:就是作用在方法上面的路径。

【springMVC篇1】初识springMVC_第3张图片


关于方法的返回值

  当这一个方法

  没有被@ResponseBody注解作用的时候:那么返回值将会是一个待跳转的页面。

  如果被@ResponseBody注解作用的时候:那么返回值就是往页面回写的数据(相当于response.getWriter().write())

@RequestMapping注解的参数

@RequestMapping(method = RequestMethod.POST,value = "/get2")

 method参数:可以指定是get,还是post,还是delete等等方法。

 value参数:指的是访问的路径。

但是这个方法是一个枚举类型。 

【springMVC篇1】初识springMVC_第4张图片

        除了@RequestMapping以外,还可以使用@GetMapping@PostMapping@DeleteMapping等等的注解来处理请求。分别是:Get请求Post请求delete请求等等。


2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

    /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(Integer id){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword("123");
       return user;
    }

测试: 

       需要注意的是:括号内的参数一定要和前端传递的参数名称一致。如上图:"?"后面的id需要和方法当中的参数名称保持一致

【springMVC篇1】初识springMVC_第5张图片


第二种:传递多个参数的情况(本质上和单个一样的)

 /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(Integer id,String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

       前端传递参数的时候,需要使用queryString的方式进行传参。 因此获取1个参数和多个参数的格式是一致的。

【springMVC篇1】初识springMVC_第6张图片


第三种方式:获取一个对象

       当queryString特别多的时候,那么这样代码的可读性、可维护性就变得非常差。因此,可以考虑使用对象来接受。

/**
     * 用户注册
     * 用户实体@param user
     * 注册成功的提示@return
     */
    @RequestMapping("/register")
    @ResponseBody
    public String register(User user){
        return "用户注册成功:"+user;
    }

 然后,前端提交信息的时候,只需要指定user的各个属性即可。

【springMVC篇1】初识springMVC_第7张图片

以上的几种方式,支持使用URL进行传递,也支持使用form表单进行实体提交。


第四种方式:JSON格式传递对象

       在上面,我们演示了以queryString的格式来传递一个对象,下面,将演示以json的格式传递user对象。

       需要在参数User前面加一个注解:@RequestBody

       当使用这一个注解修饰参数的时候,那么这个参数将会被以json的格式进行提交。

/**
     * 用户注册
     * 用户实体@param user
     * 注册成功的提示@return
     */
    @RequestMapping("/register")
    @ResponseBody
    public String register(@RequestBody User user){
        System.out.println(user);
        return "用户注册成功:"+user;
    }

【springMVC篇1】初识springMVC_第8张图片

 运行结果:【springMVC篇1】初识springMVC_第9张图片

       @RequestBody当中也有一个参数是required,默认是true,前端必须要提交user对象,否则报400

       如果把这个参数设置为false,那么前端就不一定需要提交user对象 


第五种方式:后端参数的重命名@RequestParam

使用@RequestParam注解,当中指定的名称就是前端传递的参数

    /**
     * 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数
     * 用户的id@param id
     * user对象@return
     */
    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(@RequestParam("userId")Integer id, String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

这种情况,用于前后端出现了差异的时候,后端为了改变参数列表的名称,改用的一种方式:

【springMVC篇1】初识springMVC_第10张图片


@RequestParam的required属性

@RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(@RequestParam(value = "userId",required = false)Integer id, String password){
       User user=new User();
       user.setAge(18);
       user.setId(id);
       user.setPassword(password);
       return user;
    }

       如果使用@RequestParam注解的时候,不指定required参数,那么默认就是true,也就意味着前端一定要传递一个名称为"userId"的参数,否则就会报错。

       只有改成了false,才不会令userId这个参数设置为"必传"的。


第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)

第一步:需要在@RequestMapping当中使用{}来指定参数;

第二步:需要在方法当中使用@PathVariable来修饰参数。

代码实现:

    @RequestMapping("/url/{username}/{password}")
    @ResponseBody
    public User getFromUrl(@PathVariable String username,@PathVariable String password){
        User user=new User();
        user.setUserName(username);
        user.setPassword(password);
        return user;
    }

运行结果: 

【springMVC篇1】初识springMVC_第11张图片

你可能感兴趣的:(spring,boot)