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注解(使用注解需要导包)
@RestController
public class SpringMVC{@RequestMapping("/sayHi")public String sayHi(){return "hello,Spring MVC";}
}
如果没有添加@RestController注解,那Spring在扫描的时候根本不会扫描到这些方法,自然在运行的时候不会有对应的url映射
@RequestMapping支持Post和Get这两种请求方法,具体要用到哪种请求方法可以指定
@RestController
public class SpringMVC{@RequestMapping(value = "/sayHi",method = RequestMethod.POST)public String sayHi(){return "hello,Spring MVC";}
}
二、请求(获取HTTP请求)
用户请求的同时会携带有参数,程序可以通过不同的注解或者实体类来获取请求中的参数,进一步进行执行业务逻辑
请求参数传递
参数传递可以直接在url后面直接拼接上所要传递的参数,在传参的时候通常需要保证传递的变量名与注解映射的方法参数名一致,不然就会发生报错
@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即可
@RestController
public class SpringMVC{@RequestMapping("/sayHi")public String sayHi(@RequestParam("username")String name){return "hello"+name;}
}
当使用@RequestParam重新命名参数之后,参数就变成了必传参数,如果不进行传参就会出错。假设前端的参数是非必传参数,那只需要在绑定参数的时候进行修改
@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注解来获取请求正文里的参数
public class Person{private int age;private String name;private int height;@Overridepublic 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请求来观察响应结果。
总结:三步走——先实现建立连接进行交互达到传达用户请求,然后获取请求根据请求与业务逻辑进行结合计算响应,最后根据业务处理计算得出的结果作为响应结果返回给用户。