SpringBoot 学习笔记 - 第一天
1. 前后端请求
简单来说,当一个用户访问网站(假设该网站的服务器在本地主机上)时,我方收到消息后,可以给予反馈。同样,对方也可以通过请求向我方发送信息,从而实现交互。下面介绍其实现方式。
1.1 用户请求方式
用户的请求主要有以下两种方式:
- Get 请求
- Post 请求
这两种请求方式都属于 HTTP 协议,在传输方式上没有本质区别,但在格式和内容上存在一些差异。假设我们请求的数据为 name="tom"&age=18
,它们的主要区别如下:
格式上的区别
- Get 请求:将请求内容直接附加在 URL 末尾,例如:
http://localhost:8091/test?name="tom"&age=18
- Post 请求:将请求内容放在消息主体中进行传输。
内容上的区别
- Get 请求:只允许发送 ASCII 字符,其他字符将被视为非法。
- Post 请求:没有字符限制,允许二进制数据的传输。
优缺点对比
-
Get 请求:
- 不适合传输大量数据,因为 URL 有长度限制。
- URL 中直接显示请求内容,安全性较低。
- 由于请求内容直接在 URL 中,速度比 Post 请求稍快。
-
Post 请求:
- 没有长度限制,可以发送任意大小的数据(取决于带宽)。
- 不会将内容直接显示在 URL 中,相对更安全。
注:无论是 Get 还是 Post 请求,HTTP 传输内容均为明文,只要在网络节点抓包,即可获取完整的数据报文。
1.2 服务器处理
在 Java 中,我们可以使用 Spring Boot 框架来接收和处理请求。处理流程如下:
-
创建一个请求处理类,并在类上方通过注解
@RestController
声明该类为请求处理类。@RestController public class HelloController { // 方法定义在此处 }
-
在类中定义不同的处理方法,并使用
@RequestMapping("/路径")
进行路径映射。请求 URL 与@RequestMapping
中的路径匹配成功后,将执行对应的方法。
例如,对方访问的 URL 为 http://localhost:8091/test
,则会查询是否存在 @RequestMapping("/test")
注解的函数来进行处理。
请求处理类示例
以下是一个简单的 Spring Boot 请求处理类,通过 @RestController
和 @RequestMapping
实现前后端交互。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController // 声明该类为请求处理类
public class HelloController {
// 处理 /test 请求
@RequestMapping("/test")
public String hello() {
System.out.println("Hello World");
return "Success to call test";
}
// 处理 /request 请求,演示通过 HttpServletRequest 获取参数
@RequestMapping("/request")
public String simple(HttpServletRequest request) {
// 获取请求参数
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name + ": " + age);
return "Success to call request";
}
}
在上面的代码中:
@RestController
注解将HelloController
类声明为一个请求处理类。@RequestMapping("/test")
注解的hello()
方法用于处理/test
请求,返回字符串Success to call test
。@RequestMapping("/request")
注解的simple()
方法演示了如何通过HttpServletRequest
获取请求参数,并返回字符串Success to call request
。
以上代码展示了如何通过路径映射和请求参数获取,实现前后端的基本交互功能。