一、引言:Java Web 不只是 Spring Boot

说起 Java Web ,你的第一反应是不是 Spring Boot。但 Spring Boot 只是把底层的东西封装好了——HTTP 协议怎么走的、Tomcat 怎么部署的、JDBC 怎么连数据库的、XML 怎么配置的,这些都需要我们进行深入学习。

二、前端:HTML、CSS、JavaScript

2.1 HTML

HTML 用标签来标记内容的结构——标题、段落、表格、表单、图片、链接。标签成对出现(<p></p>)或者自闭合(<img />),属性控制样式或行为。

表单是前后端交互的入口,<form> 的action指定提交地址,method指定 GET 还是 POST。

2.2 CSS

CSS 控制布局、颜色、字体、边距、背景。引入方式有三种:行内(style属性)、页内(<style>标签)、外部(.css文件)。是写死的,不可改变的。

可以使用盒模型,每个元素都是一个盒子,包含内容区、内边距(padding)、边框(border)、外边距(margin)。

2.3 JavaScript

JavaScript 可以操作 DOM(改变页面内容)、操作 BOM(控制浏览器窗口)、发 Ajax 请求、处理事件。其本质是和数据库交互,可以展示数据库的数据。事件驱动是 JS 的核心——用户点击按钮、移动鼠标、提交表单,都会触发事件,绑定的回调函数就会执行。

2.4 jQuery

jQuery 封装了 DOM 操作、事件处理、动画效果和 Ajax 请求,用 $()选择元素,链式调用非常方便。

三、AJAX 与 JSON

3.1 AJAX:是前后端的连接

AJAX 的核心是 XMLHttpRequest对象,它在后台和服务器交换数据,页面不用整体刷新,只更新需要变的部分。

步骤:
1. 创建XMLHttpRequest对象
2. open()设置请求方式和 URL
3. send()发送请求
4. 监听 onreadystatechange 事件,readyState === 4且 status === 200时处理响应

这个步骤需要记住

来一个小栗子,这里我们使用 jQuery 封装:

$.ajax({
    url: "http://localhost:8080/user/list",
    type: "post",
    data: { name: "张三" },
    success: function(res) {
        console.log("后端返回:", res);
    }
});

3.2 JSON

JSON 是轻量级的数据交换格式,用键值对组织数据,结构清晰,几乎所有编程语言都支持解析和生成。

但是它的格式要求很严格:键必须用双引号,字符串也必须用双引号,不支持注释、函数undefined。

举个例子,javaScript 操作 JSON:

// 对象 → JSON 字符串
let jsonStr = JSON.stringify({ name: "张三", age: 20 });
// JSON 字符串 → 对象
let obj = JSON.parse(jsonStr);
FastJSON(Java 端):
// 对象 → JSON 字符串
String json = JSON.toJSONString(user);
// JSON 字符串 → 对象
User user = JSON.parseObject(json, User.class);

四、Tomcat:Web 应用的“家”

4.1 Tomcat 

Tomcat 是 Apache 基金会的开源 Servlet 容器,是 Java Web 开发中最常用的轻量级应用服务器。它接收 HTTP 请求,交给部署在里面的 Web 应用处理,再把结果返回给浏览器。说白了,就是接受请求,再把这个给web,拿到结果给浏览器,就这么简单。

4.2 目录结构

目录 作用
bin 启动和关闭脚本(startup.bat/ shutdown.bat)
conf 配置文件,server.xml 是核心
lib Tomcat 运行依赖的 jar 包
logs 日志文件
webapps 默认的应用部署根目录
work JSP 编译后的 Servlet 类文件

4.3 部署项目的三种方式

1. 直接复制:把 war 包或文件夹扔进 webapps目录,Tomcat 启动时自动部署。
2. Context 配置:在 conf/server.xml的 <Host>里加 <Context>标签,指定 docBase(项目路径)和 path访问路径)。
3. 独立描述文件:在 conf/Catalina/localhost/下创建 xxx.xml,内容为 <Context docBase="项目路径" />,访问路径就是文件名 xxx。

4.4 IDEA 整合 Tomcat

那么我们如何在IDEA里面整合呢?

答:在 IDEA 的 Run/Debug Configurations 里添加 Tomcat Server Local,这里记得指定 Tomcat 路径和 JRE。创建 Web 项目时选 Java Enterprise 或使用 Maven 的 maven-archetype-webapp骨架。

部署时配置 Artifacts(打包产出),选 Web Application: Exploded(展开目录,方便热部署),在 Deployment 里添加并设置 Application Context(访问路径)。

五、HTTP 协议:浏览器和服务器怎么聊天

5.1 请求-响应模式

HTTP 是应用层协议,客户端主动把请求发过去,服务端被动返回响应。

5.2 无状态

HTTP 本身是不保存请求之间的状态信息,每次请求都是独立的,服务端不记得你是谁。那我们每次操作都得验证信息太麻烦,所以我们引入了 Cookie、Session、Token 这些机制来维持登录状态。

5.3 请求结构

请求行:方法(GET/POST/PUT/DELETE)、URI、协议版本
请求头:键值对,Host、User-Agent、Content-Type、Accept等
请求体:POST/PUT 时携带的数据(表单参数或 JSON)

5.4 响应结构

状态行:协议版本、状态码、状态描述
响应头:Content-Type、Content-Length、Set-Cookie等
响应体:实际返回的数据(HTML、JSON、图片等)

这些状态码分类记住,可以便于我们排查错误,修改代码:
2xx:成功(200 OK)
3xx:重定向(302 Found、304 Not Modified)
4xx:客户端错误(404 Not Found、403 Forbidden)
5xx:服务端错误(500 Internal Server Error)后端代码要修改

六、JDBC:后台和数据库的连接

6.1 JDBC介绍

JDBC 是 Java 访问数据库的标准 API,不同数据库厂商提供不同的驱动实现,开发者面向 JDBC 接口编程就行。

它的标准如下:
1. 加载驱动(高版本可自动加载)
2. 获取连接(`DriverManager.getConnection()`)
3. 创建 Statement / PreparedStatement
4. 执行 SQL
5. 处理 ResultSet
6. 释放资源

,太干了,拿个小栗子过来:

// 获取连接
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/db", "root", "password");
// 预编译 SQL(防注入)
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE id = ?");
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    String name = rs.getString("name");
    int age = rs.getInt("age");
}
// 释放资源(finally 里关)
rs.close();
ps.close();
conn.close();

6.2 PreparedStatement 为什么比 Statement 安全

Statement是拼接字符串执行 SQL,参数内容可能被当作 SQL 语法执行——这就是 SQL 注入。

PreparedStatement用占位符 ? 绑定参数,参数值会被转义处理,不会改变 SQL 结构,从根本上防止了注入。而且预编译的 SQL 可以复用,性能也更好。

这个SQL注入是曾经黑客常用来获取我们信息的一种技术,不过现在大家不用担心,java以及改进了。

6.3 事务控制

JDBC 事务控制的核心是确保一组数据库操作要么全部成功,要么全部失败。基本流程如下:

// 1. 关闭自动提交,开启事务
conn.setAutoCommit(false);
try {
// 2. 执行多条 SQL 操作
ps1.executeUpdate();
ps2.executeUpdate();
// 3. 所有操作成功,提交事务
conn.commit();
System.out.println("事务提交成功");
} catch (Exception e) {
// 4. 发生异常,回滚事务,撤销所有操作
conn.rollback();
System.out.println("事务回滚,原因:" + e.getMessage());
throw e; // 可选择继续向上抛出异常
} finally {
// 5. 恢复自动提交模式(可选,取决于后续操作)
conn.setAutoCommit(true);
}

关键点:

setAutoCommit(false):关闭自动提交,开启事务。

commit():所有操作成功后,手动提交,使更改永久生效。

rollback():发生异常时回滚,撤销本次事务内的所有操作。

finally 块:通常用于释放资源(如关闭 Statement、ResultSet),这里也可用于恢复自动提交模式。

事务这一块最典型的案例就是转账,必须同时成功,或同时失败,不然,一个人钱转过去了,另一个人收钱失败了,这个钱不翼而飞了,这也太可怕了。

七、数据库:SQL 与表设计

7.1 SQL 四大类

分类 全称 常用语言 作用
DDL 数据定义语言 CREATE、ALTER、DROP 操作数据库和表的结构
DML 数据操作语言 INSERT、UPDATE、DELETE 操作表中的数据
DQL 数据查询语言 SELECT 查询数据(最常用)
DCL 数据控制语言 GRANT、REVOKE 管理权限

7.2 多表查询

内连接(INNER JOIN):返回两张表匹配的记录,不匹配的不要。


SELECT * FROM user u INNER JOIN order o ON u.id = o.user_id;


左外连接(LEFT JOIN)**:左表全返回,右表没匹配的填 NULL。

SELECT * FROM user u LEFT JOIN order o ON u.id = o.user_id;

子查询:一个查询嵌套在另一个查询里。逻辑清晰但性能通常不如 JOIN。

 7.3 表关系设计

关系 实现方式
一对多 在“多”的一方加外键指向“一”的一方
多对多 引入中间表,存两个外键
一对一 共享主键,或在一方加唯一外键

八、XML:配置文件的老朋友

8.1 XML 的结构  (主包对这块也不太了解,所以这里只放了官方的定义,等主包学习了之后再写一篇博客,详细介绍)

XML 是可扩展标记语言,标签自定义,常用于配置文件和数据传输。

文档声明:第一行,指定版本和编码
根元素:有且只有一个
元素:起始标签 + 结束标签,可嵌套
属性:为元素添加附加信息,值必须加引号
CDATA:原样输出特殊字符,不被解析

8.2 XML 约束

约束规定了 XML 文档的结构和数据类型。常见的有 DTD 和 Schema(XSD)。Schema 比 DTD 强大——支持更多数据类型、命名空间、继承,现在用得更多。

九、总结

Java Web 开发的知识体系可以概括为一条链路:

浏览器发请求 → HTTP 协议传输 → Tomcat 接收 → Web 应用处理 → JDBC 操作数据库 → 返回响应

每一个环节都有对应的技术:前端用 HTML/CSS/JS,通信靠 HTTP/AJAX/JSON,服务器用 Tomcat,后端用 Servlet/JSP,数据层用 JDBC/SQL。

感谢浏览我的博客,希望对你有所帮助~(^ - ^)~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐