一、HTTP 协议入门(像写信一样的网络通信)
生活比喻:HTTP 协议就像寄信的规则 —— 你(客户端)写封信(请求)给朋友(服务器),信封上要写地址(URL)和寄信方式(请求方法),朋友收到后会回信(响应)并盖邮戳(状态码)。
1. 请求 - 响应模型(三次握手简化版)
客户端发送请求:包含三部分
- 请求行:
GET /hello HTTP/1.1
(方法 路径 协议版本) - 请求头:
Host: localhost:8080
(服务器地址)、User-Agent: Chrome/114.0
(浏览器信息) - 请求体:表单数据、JSON 等(GET 请求无请求体,像明信片;POST 请求有请求体,像信封)
- 请求行:
服务器返回响应:也包含三部分
- 状态行:
HTTP/1.1 200 OK
(协议版本 状态码 描述) - 响应头:
Content-Type: text/html
(内容类型)、Date: 2023-08-12
(响应时间) - 响应体:HTML 代码、JSON 数据等(网页内容)
- 状态行:
2. 必学状态码(服务器的 "表情符号")
状态码 | 含义(类比生活场景) | 常见场景 |
---|---|---|
200 | 😊 成功(信已收到并回复) | 正常访问网页 |
404 | 🚫 未找到(地址写错了) | 访问不存在的 URL |
500 | 🔥 服务器错误(朋友家着火了) | Java 代码抛异常未处理 |
302 | 🔄 重定向(请去新地址取信) | 登录后跳转到首页 |
403 | 🚷 禁止访问(对方拒绝收信) | 未登录访问需要权限的页面 |
3. 常用请求方法(客户端的 "动作指令")
GET:索取数据(查快递单号)
✅ 例子:http://localhost:8080/students?id=1
(查询 ID=1 的学生)
⚠️ 特点:参数在 URL 中可见,有长度限制(像明信片写字不能太多)POST:提交数据(寄包裹)
✅ 例子:表单提交用户注册信息
⚠️ 特点:参数在请求体中,安全且支持大量数据(像快递箱能装更多东西)
二、动手实践:用浏览器抓包看 HTTP
打开开发者工具
在 Chrome 浏览器中按F12
或右键 "检查",切换到Network(网络)面板,勾选Preserve log(保留日志)。观察 HelloServlet 请求
访问之前创建的http://localhost:8080/项目名/hello
,在 Network 面板找到名为hello
的请求:- 查看请求头:点击请求→Headers→Request Headers
找到Accept: text/html
(告诉服务器想要 HTML 格式) - 查看响应体:点击Response标签,能看到我们 Servlet 输出的
<h1>Hello, JavaWeb!</h1>
- 查看请求头:点击请求→Headers→Request Headers
修改 Servlet 体验 POST 请求
在HelloServlet
中添加 POST 处理方法:java
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单参数(假设前端提交了username) String username = request.getParameter("username"); response.setContentType("text/html;charset=UTF-8"); response.getWriter().println("<h1>Hello, " + username + "!</h1>"); }
创建简单 HTML 表单(保存为
web/form.html
):html
<form action="/项目名/hello" method="post"> 用户名: <input type="text" name="username"> <button type="submit">提交</button> </form>
访问
http://localhost:8080/项目名/form.html
提交表单,在 Network 面板观察 POST 请求的参数如何传递。
三、Web 应用架构扫盲(三层蛋糕模型)
表现层(蛋糕顶层 - 用户看到的奶油)
- HTML/CSS/JavaScript:负责页面展示和用户交互
- JSP:动态生成 HTML 的技术(后续课程详解)
业务逻辑层(蛋糕中层 - 巧克力夹心)
- Servlet:处理用户请求,实现业务逻辑
- Service:封装复杂业务规则(如学生成绩计算)
数据访问层(蛋糕底层 - 饼干底)
- JDBC:连接数据库,执行 CRUD 操作
- 数据库:存储数据(如学生信息表)
类比餐厅:用户(顾客)→ 服务员(表现层)→ 厨师(业务逻辑层)→ 仓库(数据访问层)