Spring
Spring 是一个广泛应用于 Java 企业级开发的开源框架。
它具有以下重要特点和优势:
轻量级和非侵入式
对代码的侵入性较小,开发者可以在遵循 Spring 规范的基础上,灵活运用其功能。
控制反转(IoC)和依赖注入(DI)
帮助管理对象之间的依赖关系,降低模块之间的耦合度,提高代码的可维护性和可测试性。
面向切面编程(AOP)
能够将横切关注点(如日志记录、事务管理、权限控制等)从业务逻辑中分离出来,提高代码的模块化和可复用性。
支持声明式事务
简化了事务的管理和配置。
丰富的模块
包括 Spring MVC 用于 Web 开发、Spring Data 用于数据访问、Spring Security 用于安全管理等,提供了全面的企业级解决方案。
社区活跃和生态丰富
拥有庞大的社区支持,有大量的开源项目和扩展可供选择。
Spring 框架极大地提高了 Java 开发的效率和质量,使得开发者能够更专注于业务逻辑的实现。
SpringBoot
快速配置Spring应用程序,简化Spring的开发流程
SpringBootWeb入门
记得选择Maven进行项目构建。因为之前给Maven配置了Ali云的源所以下载起来会略快
请求控制类
在 Web 开发中,“请求控制类” 通常指的是用于处理 HTTP 请求的控制器类。
这类控制器类一般具有以下特点和功能:
接收请求
能够获取客户端发送的 HTTP 请求,包括请求方法(GET、POST、PUT、DELETE 等)、请求路径、请求参数等。
调用业务逻辑
根据请求的内容,调用相应的业务逻辑处理方法或服务,以完成具体的业务操作。
数据处理与封装
对从业务逻辑获取到的数据进行处理和封装,使其符合响应的要求。
响应生成
决定返回给客户端的响应状态码(如 200 表示成功、404 表示未找到等)、响应头信息以及响应体数据。
在不同的 Web 框架中,请求控制类的实现方式可能会有所不同。例如,在 Spring MVC 框架中,通常使用 @Controller 或 @RestController 注解来标识一个类为控制器类,并通过注解方法来处理不同的请求路径和请求方法。
下列代码为请求控制类函数接收到/hello请求后打印HelloController的函数
@RestController
public class hellocontroller
{
@RequestMapping("/hello")
public String hello() {
System.out.println("Hello Controller");
return "Hello World";
}
}
在浏览器中访问 http:localhost:8080/hello
Http协议
http请求的格式:
请求行
包含请求方法(如 GET、POST、PUT、DELETE 等)、请求的 URL 路径以及 HTTP 协议版本,各部分之间用空格分隔。例如:GET /index.html HTTP/1.1
请求头
由一系列的键值对组成,每行一个,键和值之间用冒号和空格分隔。常见的请求头有 User-Agent(客户端信息)、Host(目标主机)、Content-Type(请求体的数据类型)、Content-Length(请求体的长度)等。
空行
用于分隔请求头和请求体。
请求体
并非所有的请求都有请求体,只有在 POST、PUT 等需要向服务器发送数据的请求方法中才会包含。请求体中的数据格式由 Content-Type 请求头指定。
GET /example?param1=value1¶m2=value2 HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
在这个示例中,没有请求体。如果是 POST 请求并带有数据,例如表单数据或 JSON 数据,会在空行之后添加相应的请求体内容。
get和post请求的区别
GET 和 POST 请求主要有以下区别:
数据传递方式
GET 请求将数据作为 URL 的一部分进行传递,数据以查询字符串的形式附加在 URL 后面,例如:http://example.com/page?param1=value1¶m2=value2。
POST 请求将数据放在请求体中进行传递。即get请求没有请求体
数据长度限制
GET 请求的 URL 长度通常有限制,不同的浏览器和服务器可能有所不同。
POST 请求对数据长度没有限制,理论上可以传输更大量的数据。
安全性
GET 请求的数据在 URL 中可见,不太安全,不适合传输敏感信息。
POST 请求的数据在请求体中,相对更安全。
用途
GET 请求常用于获取数据,不应用于修改数据(如数据库更新),因为它的本质是幂等的(多次相同的请求产生相同的结果)。
POST 请求通常用于提交表单数据、上传文件等,可能会对服务器数据产生修改。
缓存
GET 请求的结果可以被浏览器缓存。
POST 请求的结果通常不会被缓存。
综上所述,GET 和 POST 请求在数据传递、安全性、用途等方面存在差异,应根据具体的业务需求选择合适的请求方式。
Http响应的格式:
状态行
包含 HTTP 协议版本、状态码和状态描述,各部分之间用空格分隔。例如:HTTP/1.1 200 OK ,其中 200 是状态码,OK 是对状态码的描述。
响应头
由一系列的键值对组成,每行一个,键和值之间用冒号和空格分隔。常见的响应头有 Content-Type(响应体的数据类型)、Content-Length(响应体的长度)、Server(服务器信息)、Set-Cookie(设置 Cookie)等。
空行
用于分隔响应头和响应体。
响应体
服务器返回给客户端的实际数据,其内容和格式由响应头中的 Content-Type 字段指定。
HTTP/1.1 200 OK 状态行
Content-Type: text/html; charset=UTF-8
Content-Length: 120 响应头
空行
<html> 响应体
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
常见状态码及其含义
1xx 信息性状态码
100 Continue:服务器收到了部分请求,客户端应继续发送其余部分。
101 Switching Protocols:服务器切换协议,如从 HTTP 切换到 WebSocket。
2xx 成功状态码
200 OK:请求成功,服务器成功返回了请求的数据。
201 Created:请求成功并且服务器创建了新的资源。
202 Accepted:服务器已接受请求,但尚未处理完成。
204 No Content:服务器成功处理了请求,但没有返回任何内容。
3xx 重定向状态码
301 Moved Permanently:请求的资源已被永久移动到新的 URL,浏览器会自动重定向到新 URL。
302 Found:请求的资源临时被移动,浏览器会重定向到临时的 URL。
304 Not Modified:客户端的缓存资源仍然有效,服务器未返回新内容。
4xx 客户端错误状态码
400 Bad Request:客户端发送的请求存在语法错误,服务器无法理解。
401 Unauthorized:请求需要用户认证,但未提供有效的认证信息。
403 Forbidden:服务器理解请求,但拒绝执行,通常是因为权限不足。
404 Not Found:服务器未找到请求的资源。
5xx 服务器错误状态码
500 Internal Server Error:服务器内部发生错误,无法完成请求。
502 Bad Gateway:作为网关或代理的服务器,从上游服务器接收到无效的响应。
503 Service Unavailable:服务器暂时不可用,通常是由于过载或维护。
504 Gateway Timeout:网关或代理服务器在等待上游服务器响应时超时。
这只是一些常见的状态码,HTTP 协议定义了更多的状态码以涵盖各种可能的情况。
具体状态码含义由开发人员自己定义,但是一般默认遵守以上的规则
一些常见响应头
TomCat
实际上springboot已经内嵌了tomcat,所以可以直接从main方法对网页资源进行访问