2.web(HTTP,Tomcat,SpringBootWeb)

发布时间 2023-11-24 14:43:57作者: 回家太晚太悲催

web(HTTP,Tomcat,SpringBootWeb)

HTTP:

概念:

Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则;

特点;

  1. 基于TCP协议:面向连接,安全;
  2. 基于请求-响应模型的:一次请求对应一次响应;
  3. 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插件;
作用:常用于进行接口测试;
简单参数:
  1. 原始方式获取请求参数:
Controller方法形参中声明HttpServletRequest对象;
调用对象的getParameter(参数名);
  1. SpringBoot中接收简单参数:
请求参数名与方法形参变量名相同;
会自动进行类型转换;
  1. @RequestParam注解:
方法形参名称与请求参数名称不匹配,通过该注解完成映射;
该注解的required属性默认值是true,代表请求参数必须传递;
(@RequestParam(name="name",required=false,defaultValue="1")String username)
name指定数据库表中的字段名;
required表示请求参数是否必须传递;
defaultValue表示默认值,未指定就用这个默认值,如果指定了默认值,required会自动变为false;
注意事项:
  • @RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false;
实体对象参数:
规则: 请求参数名与形参对象属性名相同,既可直接通过POJO接收;
数组集合参数:
  1. 数组参数:
请求参数名与形参中数组变量名相同,可以直接使用数组封装;
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
	System.out.println(Arrays.toString(hobby));
	return "OK";
}
  1. 集合参数:
请求参数名与形参中集合变量名相同,通过@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;
	//...
}