SpringMVC(一)

概念:

SpringMVC,全称是Spring Web MVC,在官方文档的描述中我们可以得知这是一种基于servlet API构建的web框架,一开始就包含在Spring框架里。由此可知,SpringMVC也是一种web框架。

MVC的定义:

MVC即------Model,View,Controller

**Model(模型):**是应用程序的主体部分,用来处理应用中数据逻辑的部分(应用程序的业务逻辑部分)

**View(视图):**应用程序中负责数据展示、与用户交互的部分,通常以页面(jsp或html模板)或其他视图插件的形式存在,接受由Controller传递的数据并渲染呈现(css以及js)

**Controller(控制层):**可以理解为一个分发层,根据接受到的请求匹配应用程序中的模型,根据模型中的业务逻辑进行请求处理得到结果,再根据相对应的模型处理结果传递进行视图展示

举个栗子:

应用程序是一个大餐厅,Model是大厨,View是服务员,Controller是前厅,客户点菜首先找的就是服务员,向服务员表达自己的需求,由服务员向前厅转达客人的请求,前厅接受到由服务员传达的客户请求再匹配到对应的后厨给客人炒菜,炒完菜之后后厨把菜递给前厅,前厅再把菜传给服务员,由服务员去和客人交互。

所以,View负责向传达请求,Controller负责接收View传过来的请求并匹配对应的Model交由对应的Model去处理请求,Model处理完请求再向Controller传递处理结果,由Controller将处理结果传递给View,最终通过View与用户之间的交互,进行数据渲染并且展示

模型图:


学习并掌握SpringMVC的三个重点:

一、建立连接(发起HTTP请求)

建立客户端(浏览器)和应用程序(SpringMVC程序)之间的请求映射关系,使得客户端在发起特定请求之后能够被SpringMVC中对应的控制器方法接收和处理

@RequestMapping注解的使用

在SpringMVC中使用@RequestMapping来实现URL路由映射

请求在进行路由映射之前要先由控制器接收,所以在使用@RequestMapping之前,主类前面需要添加@RestController注解(使用注解需要导包)

java 复制代码
@RestController
public class SpringMVC{

    @RequestMapping("/sayHi")
    public String sayHi(){
        return "hello,Spring MVC";
    }
}

如果没有添加@RestController注解,那Spring在扫描的时候根本不会扫描到这些方法,自然在运行的时候不会有对应的url映射

@RequestMapping支持Post和Get这两种请求方法,具体要用到哪种请求方法可以指定

java 复制代码
@RestController
public class SpringMVC{

    @RequestMapping(value = "/sayHi",method = RequestMethod.POST)
    public String sayHi(){
        return "hello,Spring MVC";
    }
}

二、请求(获取HTTP请求)

用户请求的同时会携带有参数,程序可以通过不同的注解或者实体类来获取请求中的参数,进一步进行执行业务逻辑

请求参数传递

参数传递可以直接在url后面直接拼接上所要传递的参数,在传参的时候通常需要保证传递的变量名与注解映射的方法参数名一致,不然就会发生报错

java 复制代码
@RestController
public class SpringMVC{

    @RequestMapping("/sayHi")
    public String sayHi(String name){
        return "hello"+name;
    }
}


//http://127.0.0.1:8080/sayHi?name = "SpringMVC"
//请求路径+?+参数名="传递参数"
//问号是拼接符


@RestController
public class SpringMVC{

    @RequestMapping("/sayHello")
    public String sayHi(String name,String sex){
        return "name:"+name+"sex"+sex;
    }
}

//多参数传递用一个&即可

后端参数修改

后端对于获得到的请求参数可以自己进行重命名,加上注解@RequestParam即可

java 复制代码
@RestController
public class SpringMVC{

    @RequestMapping("/sayHi")
    public String sayHi(@RequestParam("username")String name){
        return "hello"+name;
    }
}

当使用@RequestParam重新命名参数之后,参数就变成了必传参数,如果不进行传参就会出错。假设前端的参数是非必传参数,那只需要在绑定参数的时候进行修改

java 复制代码
@RestController
public class SpringMVC{

    @RequestMapping("/sayHi")
    public String sayHi(@RequestParam(value = "username",required = false)String name){
        return "hello"+name;
    }
}

//@RequestParam(value = "",required = True/False) 参数类型 参数名

传递JSON类型数据

通过接口工具来进行传递,JSON的数据结构是简单的键值对,后端通过@RequestBody注解来获取请求正文里的参数

java 复制代码
public class Person{
    private int age;
    private String name;
    private int height;
    @Override
    public String toString(){
        return "Person{"+"age="+age+",name="+name+",height"+height+"}"
    }
}

@RequestMapping("/Param/m7")
public Object Person(@RequestBody Person p)
{
    return p.toString();
}


//传递的JSON格式为
{
    "age": 18,
    "name": "zhangsan",
    "height": 185
}
//注意:JSON格式键值对在:后面需要用一个空格隔开不然会出错,不同的键值对之间需要用,隔开,key需要使用"",value不需要

@PathVariable注解

在请求路径上添加对应的参数并且用{}括起来,发送请求的时候@PathVariable注解会自动识别对应路径上的参数并传递到方法里(优点是书写参数简洁,缺点就是传递参数必须和方法的顺序一致不能有差错)

三、响应(根据请求计算响应并且返回响应结果)

执行了业务逻辑之后需要把响应结果返回给用户

可以使用Postman发送请求,来观察得到的响应,或者使用Fiddler抓获对应的HTTP请求,查看HTTP请求来观察响应结果。

总结:三步走------先实现建立连接进行交互达到传达用户请求,然后获取请求根据请求与业务逻辑进行结合计算响应,最后根据业务处理计算得出的结果作为响应结果返回给用户。

相关推荐
星期天要睡觉8 小时前
MySQL 综合练习
数据库·mysql
Y4090018 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook9 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月9 小时前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql
酷ku的森9 小时前
Redis中的hash数据类型
数据库·redis·哈希算法
Arva .9 小时前
Redis
数据库·redis·缓存
DemonAvenger9 小时前
MySQL与应用程序的高效交互模式:从基础到实战的最佳实践
数据库·mysql·性能优化