web(HTTP,Tomcat,SpringBootWeb)
HTTP:
概念:
Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则;
特点;
- 基于TCP协议:面向连接,安全;
- 基于请求-响应模型的:一次请求对应一次响应;
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的;
- 缺点:多次请求间不能共享数据;
- 优点:速度快;
请求数据格式(request):
概述:
请求行:请求数据第一行(请求方式、资源路径、协议);
请求头:第二行开始,格式key:value;
请求体:POST请求,存放请求参数;
请求方式:
GET:请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1;GET请求大小是有限制的;
POST:请求参数在请求体中,POST请求大小是没有限制的;
响应数据格式(response):
概述:
响应行: 响应数据第一行(协议,状态码,描述);
响应头: 第二行开始,格式key:value;
响应体: 最后一部分,存放响应数据;
状态码大类:
状态码分类 | 说明 |
---|---|
1xx | 响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |
2xx | 成功——表示请求已经被成功接收,处理已完成 |
3xx | 重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。 |
4xx | 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |
5xx | 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |
常见的响应状态码:
状态码 | 英文描述 | 解释 |
---|---|---|
200 | OK |
客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 | Found |
指示所请求的资源已移动到由Location 响应头给定的 URL,浏览器会自动重新访问到这个页面 |
304 | Not Modified |
告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 | Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
403 | Forbidden |
服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
404 | Not Found |
请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
405 | Method Not Allowed |
请求方式有误,比如应该用GET请求方式的资源,用了POST |
428 | Precondition Required |
服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 | Too Many Requests |
指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 | Request Header Fields Too Large |
请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
500 | Internal Server Error |
服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 | Service Unavailable |
服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
状态码大全:https://cloud.tencent.com/developer/chapter/13553
Tomcat:
web服务器:
- 对HTTP协议操作进行封装,简化web程序开发;
- 部署web项目,对外提供网上信息浏览服务;
Tomcat概述:
- 一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范;
- 也被称为web容器、servlet容器;
- 官网:https://tomcat.apache.org/
基本使用:
- 安装:直接解压;
- 卸载:将目录直接删除;
- 启动:bin/startup.bat
- 停止:bin/shutdown.bat
- 部署:应用复制到webapps目录;
SpringBootWeb:
概念:
SpringBoot,就是一个javaweb的开发框架
创建请求处理类:
1.创建springboot工程,并勾选web开发相关依赖;
2.定义HelloController类,添加方法hello,并添加注解;
添加类的注解: @RestController;
@RestController = @Controller + @ResponseBody;
3.浏览器路径: http://localhost:8080/hello
起步依赖:
- spring-boot-starter-web
- spring-boot-starter-test
内嵌Tomcat服务器:
- 基于Springboot开发的web应用程序,内置了tomcat服务器,当启动类运行时,会自动启动内嵌的tomcat服务器;
请求:
概述:
- 请求(HttpServletRequest):获取请求数据;
- 在方法上添加注解: @RequestMapping("需要处理的请求路径,如:/hello"); 表示处理接收的请求;
- 在类上添加注解: @RequestMapping("需要处理的请求路径,如:/hello"); 表示成为默认的公共路径;
- 注解@RequestMapping可以通过method属性设置请求方式,例:
- @RequestMapping(value = "/depts",method = RequestMethod.GET)
- 注解@GetMapping或@PostMapping;
postman:
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件;
作用:常用于进行接口测试;
简单参数:
- 原始方式获取请求参数:
Controller方法形参中声明HttpServletRequest对象;
调用对象的getParameter(参数名);
- SpringBoot中接收简单参数:
请求参数名与方法形参变量名相同;
会自动进行类型转换;
- @RequestParam注解:
方法形参名称与请求参数名称不匹配,通过该注解完成映射;
该注解的required属性默认值是true,代表请求参数必须传递;
(@RequestParam(name="name",required=false,defaultValue="1")String username)
name指定数据库表中的字段名;
required表示请求参数是否必须传递;
defaultValue表示默认值,未指定就用这个默认值,如果指定了默认值,required会自动变为false;
注意事项:
- @RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false;
实体对象参数:
规则: 请求参数名与形参对象属性名相同,既可直接通过POJO接收;
数组集合参数:
- 数组参数:
请求参数名与形参中数组变量名相同,可以直接使用数组封装;
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
- 集合参数:
请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系;
@RequestMapping("/listParam")
public String arrayParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
日期参数:
使用@DateTimeFormat注解完成日期参数格式转换;
形参类型为日期类即可;
@DateTimeFormat(pattern = "与传过来的日期一致的格式");
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
JSON参数:
JSON参数: JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识;
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
public class User{
private String name;
private Integer age;
private Address address;
}
public class Address{
private String province;
private String city;
}
路径参数:
路径参数: 通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数;
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String id){
System.out.println(id);
System.out.println(name);
return "OK";
}
文件上传:
前端页面三要素:
- 表单项 type = "file"
- 表单提交方式post
- 表单的enctype属性 multipart/form-data
服务器接收文件;
- 使用UUID.randomUUID()来获取不重复的文件名;
MultipartFile类:
- 使用springbootweb中 MultipartFile类来接收文件;
常用方法:
//获取原始文件名:
String getOriginalFilename();
//将接收的文件转存到磁盘文件中:
void transferTo(File dest();
//获取文件的大小,单位: 字节(byte):
long getSize();
//获取文件内容的字节数组:
byte[] getBytes();
//获取接收到的文件内容的输入流:
InputStream getInputStream();
SpringBoot文件上传配置:
#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB
响应:
概述:
- 响应(HttpServletResponse):设置响应数据;
@ResponseBody:
- 类型:方法注解、类注解;
- 位置:Controller方法上/类上;
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应;
- 说明:@RestController = @Controller + @ResponseBody;
统一响应结果:
public class Result{
//响应码,1代表成功;0代表失败
private Integer code;
//提示信息
private String msg;
//返回数据
private Object data;
//...
}
标签:web,HTTP,请求,SpringBootWeb,响应,参数,服务器,String
From: https://www.cnblogs.com/chj020415/p/17853672.html