【web服务器】
web服务器可以对http协议进行封装,程序员不需要直接对http协议进行操作(不需要去写复杂的网络编程代码),让web开发更加便捷,所以它也有「WWW服务器」的称呼
常见的web服务器:Tomcat,Jboss,IIS等
SpringBoot内置了Tomcat服务器,无需配置即可使用
Tomcat默认端口是「8080」,所以我们程序访问时的端口号也是8080
【访问失败的问题】
【状态码】
2XX:表示成功
3XX:重定向,转移
4XX:客户端(浏览器)错误,通常指请求头有问题,检查url是否拼写有误,方法是否受限等
5XX:服务器错误,一般是代码报错,检查代码是否有问题
【无法访问】
原因:
1.服务器没有启动
2.没有权限,不能访问目标的端口号
【错误日志】
阅读日志,从下往上,从左往右以段为单位进行阅读
一直看到有蓝色信息为止,蓝色信息代表是我们的代码
【Spring Web MVC】
简称「Spring MVC」,是一个web框架
MVC是“model view controller ”的简写,一种软件架构设计模式,它把软件系统分为模型,视图,控制器三个基本部分
模型:应用程序的主体部分,用于处理程序中是数据逻辑
视图:应用程序中专门用来与浏览器进行交互,展示数据的资源
控制器:可以理解为一个分发器,用于决定对视图发来的请求,用哪一个模型进行处理,以及处理完后需要跳转回哪一个视图,即用来连接视图与模型
Spring MVC架构:
spring MVC的重点是,通过浏览器和用户程序进行交互
分为三方面:
建立连接:将用户(浏览器)和程序连接起来,也就是访问一个地址能调用到我们的spring程序
请求:用户请求时会携带一些参数,在程序中要想办法获取到这些参数,所以请求中主要是获取参数的功能
响应:执行完业务逻辑后,要把程序的结果返回给用户,也就是相应
【建立连接】
关键注解1:@RequestMapping()
括号内指定资源路径名称
这个方法可以进行「建立连接」
关键注解2:@RestController
配置环境后,附带的maven包中的代码有成百上千行,如果没有给我们写的代码打标记,这相当于Spring要一次阅读所有的代码,这对于Spring的负担很大,因此它会直接不看,并产生状态码报错
「@RestController」可以给我们写的代码“打上一个标记”,让Spring去阅读我们写的代码,这样才能生效
而「@RequestMapping」可以加在类上,也可以加在方法上,也可以都加
加在类上,就是「类路径」
加在方法上,就是「方法路径」
访问时,需要「类路径+方法路径」
因此,它既是「类注解」,也是「方法注解」
【只接收get请求,不接收post请求】
通过method属性去指定GET,从而达到只接收get请求的效果
//把「GET」改为「POST」也可以变成只接收post请求,不接收get请求
但也可以使用这样的一个简洁方法:「@GetMapping」
这两个是划等号的
同理
v3,v4这两个也是划等号的
【请求】
可以使用「postman」软件进行辅助操作
//测试后端代码时还需要写前端代码,这样麻烦又痛苦,因此「接口测试工具」应运而生,它让后端工程师即便不写前端代码也可以进行测试,「postman」就是一个这样的工具软件
这个代码的含义是传入一个name的key值,并返回对应的value值
传递的普通参数,默认类型为「String」,后端接收时,根据后端定义的类型来转换
【传多个参数】
除此之外,还可以传递多个参数,且访问时参数的顺序可以不一样
上面的spring代码是下面http代码的简洁化,也可以理解为下面是上面的源码,二者含义相同
【传递对象】
传多个参数可能会产生修改不方便的问题,因此为了方便,可以构造一个包含多个参数的对象来进行传递
此外传递对象时,如果其中有些参数不传,也不会报错(因为对象中的参数是成员变量,不传时初始值为0)
【给参数重命名】
需要掌握一个新注解「@RequestParam」
这个代码可以确保在接收到前端的“userName”参数时,后端按照“name”去处理
因此,这个注解的作用是「参数绑定」,在该代码中将userName与name进行绑定
但如果进行了这样的参数绑定,那么这个参数就变成了一个「必传参数」:前端url所传的参数必须要是userName,否则会报错
这是因为RequestParam源码中,boolean类型的required方法默认为true,要想避免这种事,我们需要设置required属性为false
因此注解中可以用这样的形式去写,这么一来后端没有收到userName这样的参数时,会返回一个null
【传递数组】
【传递list】
这样是会报错的
因为我们当前所使用的方式和传递数组的方式是一样的,但接收list是没办法用这个接收的,因此我们可以使用「@RequestParam」注解
这个注解表示参数绑定,当发送信息时,默认会把“zhangsan,lisi,wangwu”封装成一个数组,因此使用数组接收是OK的,但使用list就不行了,所以我们需要把数组转换为list
这就相当于把数组绑定为了list