- 1WEB 基础HTTP / Browser / WebServer静态页面写死,人人看到一样
- 2Servlet手写 if-else 分发不可扩展,无生命周期/并发管理
- 3JSP:参数散字符串参数散成一堆 String,取值靠字段名硬记
- 3JSP:scriptlet 塞逻辑scriptlet 把逻辑塞进页面,代码与 HTML 糊在一起
- 3JavaBean:数据对象化对象全靠 new、层层硬依赖
- 4Spring IoCWeb 路由仍手写 web.xml/if-else、手动取参绑定,展示/业务/数据访问没分开
- 5MVC · SpringMVC数据在库里,访问是重复样板 + 拼串有注入风险
- 6MySQLJava 连库要手写五步,连接与资源管理全手动
- 7JDBCSQL 与 Java 混写、结果集逐行手映射、没有动态 SQL
- 8MyBatis四份配置 + web.xml 装配繁琐,部署要外部 Tomcat
- 9SpringBoot链尾 · 不考核
WEB 基础与开发环境
WEB 基础与开发环境
目标:理解 WEB 基本概念与 HTTP 协议;能搭建 Eclipse + Tomcat 环境,创建 / 发布 / 调试最简单的 WEB 项目。
本模块是整门课的「世界观」:先搞清浏览器敲一个网址到看到页面中间发生了什么,再落到怎么搭环境、怎么写第一个 WEB 程序。贯穿示例用手写 HTTP 服务器(
workspace-ssm/HttpWebServerV1..V7/)——从最简 socket 一步步长成 Tomcat。
一、Internet / WWW / 网站 / 网页
先分清四个常被混用的词:
- Internet(互联网):全球互联的网络基础设施,是「路」;
- WWW(万维网):跑在 Internet 上的一套以 HTTP 协议 + URL 定位 + HTML 呈现的应用——是「路上的交通规则 + 门牌系统」;
- 网站(website):一个组织/个人在 WWW 上的一组相关网页的集合,通常对应一个域名;
- 网页(web page):用 HTML(或动态技术)描述、浏览器渲染出的单个页面。
一句话:Internet 是路,WWW 是规则,网站是一串门牌,网页是其中一扇门。
二、浏览器(Browser):客户端
「浏览器敲一个网址」这动作里,浏览器干了四件事:
- 解析 URL:把
http://host:port/path拆成协议 / 主机 / 端口 / 路径; - 发请求:按 HTTP 向服务器发一个请求报文(方法 + 首部);
- 收响应、渲染:拿到 HTML/CSS/JS,解析 DOM、应用样式、执行脚本,画出你看到的页面;
- 保存状态:把 Cookie 存下来、管理缓存——这是后面「登录态」的客户端一半。
浏览器是客户端:它只负责「问 + 显示」,不存业务数据;真正算内容的是服务器端(模块2+ 的 Servlet/JSP)。所以同一个
.jsp,浏览器每次看到的 HTML 都是服务器现算后返回的。
三、静态网页 vs 动态网页
判定一个网页「静」还是「动」,关键看内容是不是服务器端现算的:
| 维度 | 静态网页 | 动态网页 |
|---|---|---|
| 典型后缀 | .html / .htm | .jsp / .asp / .aspx / .php |
| 内容来源 | 文件里写死的,人人看到都一样 | 服务器端解释执行后生成,可因人而异、因时而变 |
| 能否交互 | 基本不能(只有表单提交到别处) | 能:读参数、查数据库、写会话 |
| 代表技术 | 纯 HTML + CSS | JSP / ASP.NET / PHP / J2EE(本站主线) |
动态网页的本质:浏览器请求的是一个「模板」,服务器端把 Java/脚本跑一遍、把结果拼成 HTML 再返回——你看到的永远是「算出来的 HTML」。这正是后面 JSP / Servlet 要解决的问题。
四、IP / URL / 域名
- IP 地址:机器在网里的「门牌号」。IPv4 形如
192.168.1.10(4 段),IPv6 更长(8 段十六进制); - URL:统一资源定位符,把「用哪个协议、找哪台机器、访问哪个资源」写在一行里——
http://host:port/path。浏览器地址栏、new URL(...)都是它; - 域名与虚拟主机:域名(如
example.com)是 IP 的「好记别名」,由 DNS 解析成 IP;一台服务器可用虚拟主机按域名/端口托管多个网站。
五、HTTP 请求—响应模型
HTTP 是无状态的请求—响应协议:客户端发一个请求报文,服务器回一个响应报文,一次交互结束。常见方法 GET(取资源)/POST(提交数据);常见状态码 200 OK(成功)/302(重定向)/404(未找到)/500(服务器内部错误)。
下面把一次完整通信拆成五步,逐帧看请求/响应报文里真正在用的字段(方法 / 首部 / 状态码):
交互实验:HTTP 请求/响应报文逐步动画(HttpRequestFlowDiagram)
点「下一步」逐帧走查一次完整通信:浏览器 → 请求报文 → 服务器 → 响应报文 → 浏览器。 每一步会高亮当前真正在用的报文字段(方法 / 首部 / 状态码)。
① 浏览器发起请求:用户在地址栏输入 URL,浏览器解析出 host 与 path,构造出 HTTP 请求报文。
请求报文(Request)
GET /index.html HTTP/1.1localhost:8080Mozilla/5.0 (Windows NT 10.0)text/html,application/xhtml+xml␣
响应报文(Response)
HTTP/1.1 200 OKtext/html; charset=UTF-8132␣<html><body><h1>你好,JavaEE</h1></body></html>
无状态的含义:服务器不记得「上次是谁」。要跨请求记住用户(登录、购物车),就得靠 Cookie + Session——这是模块3 JSP 内置对象
session的由来。
六、Web 服务器:Apache / IIS / Tomcat
- Apache / Nginx:主要服务静态资源与反向代理;
- IIS:Windows 系的 Web 服务器(ASP/ASP.NET);
- Tomcat:轻量级 Servlet 容器,能运行 JSP / Servlet——本站所有动态示例都部署在它上面。它本质是一个「实现了 Servlet API 的 Java 程序」,读
WEB-INF/web.xml、管理 Servlet 生命周期。
一个 WEB 应用长什么样、怎么发布到 Tomcat,下面交互实验把目录结构和部署五步摊开看:
交互实验:WEB 应用结构与 Tomcat 部署(WebAppDeployFlow)
左边是一个 WEB 应用的目录结构,右边是发布到 Tomcat 的五步。点步骤看当前用到了哪些目录/文件—— 注意 WEB-INF/ 是浏览器访问不到的私有区。
应用目录结构
Tomcat 部署五步
① 编写代码:在 WebRoot 写 JSP 页面,在 src 写 Servlet / JavaBean——源码与页面分开放。
七、动态 WEB 技术选型
| 技术 | 语言/平台 | 容器 | 定位 |
|---|---|---|---|
| JSP / Servlet(J2EE) | Java | Tomcat | 本站主线:企业级、跨平台、类型安全 |
| ASP.NET | C#/.NET | IIS | Windows 系企业开发 |
| PHP | PHP | Apache | 快速 Web 应用 |
本站统一按教材口径:SSM(Spring / SpringMVC / MyBatis)+
javax.servlet(Tomcat 8.5/9,Java EE 8),不引入jakarta.*混淆。
八、贯穿示例:手写 HTTP 服务器 V1–V7
与其把 Tomcat 当黑盒,不如自己从 socket 写起,看它每一层是怎么长出来的。workspace-ssm/HttpWebServerV1..V7/ 是同一工程的七个版本——点时间线看每版新增了什么能力、代表类是什么:
交互实验:手写 HTTP 服务器 V1–V7 演进(HttpServerTimeline)
从一个最简 socket 程序一步步长成 Tomcat:每升一版就补上一种 Web 能力。点时间线上的节点,看该版本新增了什么、代表类是什么——这正是模块1–3(Servlet / Filter / Listener)的活教材。
V1 · 最简 socket 服务器
新增能力:ServerSocket 监听 + 收请求/回响应,支持 request/response 内置对象
代表类:SimpleWebServerRequestResponse
第一个能跑的网络程序:绑定端口、读请求行、回一段 HTML。
到 V1 为止,已叠加 1 / 7 项核心能力——V7 凑齐 SSM 三件套雏形。
V1(最简 socket)就是模块1 的「第一个能跑的网络程序」;V3/V4/V5 分别对应后面模块2 的 Servlet / Filter / Listener——本模块埋的线,模块2 会逐一接上。
九、搭建开发环境(Eclipse + Tomcat + Maven)
- JDK:装 JDK 8+(本站示例按 Java EE 8 口径),配好
JAVA_HOME; - Eclipse:建工作空间 → New Dynamic Web Project → 选 Target Runtime(Tomcat)→ 生成
WebContent/+WEB-INF/web.xml; - Maven:用
pom.xml管理依赖(servlet-api、Spring、MyBatis…),mvn clean package出 war; - Tomcat:把 war / 目录放进
webapps/,启动后访问http://localhost:8080/<app>/; - 调试:Eclipse 里对 Servlet/JSP 打断点,浏览器触发请求即可单步——容器把请求转成对
service()的调用。
思考题
- 一个
.html页面和一个.jsp页面,浏览器最终收到的都是 HTML——它们的区别到底在哪? - HTTP 是「无状态」的,那网站怎么知道「当前登录的是谁」?(提示:Cookie / Session)
- Tomcat 为什么能运行 JSP / Servlet?它和 Apache 这类静态服务器分工有什么不同?
学习小测验
学习小测验
判定一个网页是「动态网页」的核心依据是( )
URL http://localhost:8080/guestbook/index.jsp 中,8080 表示( )
浏览器向服务器提交表单数据(如登录)时,最常用的 HTTP 方法是( )
Tomcat 在这套技术栈里的角色是( )
HTTP 是「无状态」协议,网站要记住「当前用户」应依赖( )
浏览器(客户端)在一次网页访问里不负责( )
浏览器地址栏里 http://localhost:8080/guestbook/index.jsp,浏览器首先做的是( )