学习路径概览
-
基础入门 - 从零开始搭建一个静态网站
(图片来源网络,侵删)- 技术: Servlet & JSP
- 案例: 个人博客首页
- 目标: 理解Web服务器如何工作,处理HTTP请求和响应。
-
核心进阶 - 构建一个动态Web应用
- 技术: Servlet + JSP + JDBC + JSTL/EL
- 案例: 留言板系统
- 目标: 学习数据库交互、表单处理、会话管理和代码组织。
-
框架革命 - 使用主流框架开发
- 技术: Spring Boot + Spring MVC + MyBatis/JPA
- 案例: 在线任务管理系统
- 目标: 掌握业界标准框架,理解IoC、AOP等核心思想,大幅提升开发效率。
-
现代实践 - 构建RESTful API与前后端分离
- 技术: Spring Boot + Spring Data REST + Vue.js (前端)
- 案例: 用户管理API及配套前端页面
- 目标: 学习现代Web开发模式,为移动端和前端工程化打下基础。
基础入门 - 个人博客首页
这个阶段我们不使用任何框架,直接使用Java EE的核心技术,这能让你深刻理解Web应用的底层原理。

核心概念
- Servlet: 运行在服务器端的Java小程序,用于接收和响应客户端请求,你可以把它想象成一个“Java版的CGI程序”。
- Tomcat: 最流行的开源Web服务器,用于运行Servlet和JSP。
- HTTP: 超文本传输协议,浏览器和服务器之间沟通的语言。
- Maven: 项目管理和构建工具,用于管理项目依赖(比如Tomcat的库)和打包。
案例:展示一个包含标题和文章列表的博客首页
目标: 当用户访问 http://localhost:8080/myblog/index 时,服务器返回一个HTML页面,显示博客标题和几篇静态文章。
步骤 1: 环境准备
- 安装JDK 8或更高版本。
- 安装Maven。
- 下载并解压Tomcat服务器。
步骤 2: 创建Maven Web项目
使用IDE(如IntelliJ IDEA或Eclipse)创建一个Maven项目,并选择 maven-archetype-webapp 模板,项目结构如下:
myblog/
├── src/
│ └── main/
│ ├── java/ <-- 存放Java源代码
│ ├── resources/ <-- 存放配置文件
│ └── webapp/ <-- 存放Web资源
│ ├── index.jsp
│ ├── WEB-INF/
│ │ └── web.xml <-- 部署描述符,核心配置文件
│ └── ...
└── pom.xml <-- Maven项目文件
步骤 3: 编写Servlet
在 src/main/java 下创建一个包,com.example.blog,然后创建一个 IndexServlet.java。
// src/main/java/com/example/blog/IndexServlet.java
package com.example.blog;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 设置响应内容类型和字符编码
response.setContentType("text/html;charset=UTF-8");
// 2. 获取输出流,向客户端写入HTML内容
// 实际开发中,我们不会在Servlet里写大量HTML,这里仅为演示
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>我的博客</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>欢迎来到我的技术博客</h1>");
out.println("<p>这里分享关于Java、编程和生活的思考。</p>");
out.println("<ul>");
out.println(" <li><a href='article1.html'>Java入门心得</a></li>");
out.println(" <li><a href='article2.html'>Servlet原理详解</a></li>");
out.println("</ul>");
out.println("</body>");
out.println("</html>");
}
}
步骤 4: 配置web.xml
web.xml 是告诉Tomcat如何处理URL请求的“地图”,我们需要将一个URL路径(/index)映射到我们刚刚创建的 IndexServlet。
<!-- src/main/webapp/WEB-INF/web.xml -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>com.example.blog.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
步骤 5: 运行和测试
- 在IDE中配置Tomcat服务器。
- 将项目部署到Tomcat。
- 启动Tomcat,并在浏览器中访问
http://localhost:8080/myblog/index。
你应该能看到: 为“我的博客”的页面,下面有两个链接。
阶段一总结: 你已经成功创建了一个Java服务器端程序!它接收一个GET请求,并返回一个静态的HTML响应,这是所有Web应用的基石。
核心进阶 - 留言板系统
让我们让应用“动”起来,留言板需要用户提交数据,并持久化存储。
核心概念
- JSP (JavaServer Pages): 在HTML中嵌入Java代码的技术,用于生成动态HTML页面,Servlet负责逻辑,JSP负责展示。
- JDBC (Java Database Connectivity): Java连接数据库的标准API。
- 数据库: 我们使用轻量级的SQLite,无需额外安装数据库服务。
- JSTL/EL: JSP标准标签库和表达式语言,让JSP页面更简洁,减少Java脚本代码。
案例功能
- 访问留言板首页,显示所有留言。
- 提供一个表单,可以输入昵称和留言内容并提交。
- 提交后,留言被保存到数据库,并刷新页面显示新留言。
步骤 1: 添加数据库依赖
在 pom.xml 中添加SQLite JDBC驱动。
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.36.0.3</version>
</dependency>
步骤 2: 创建数据库工具类
创建一个 DBUtil.java 来管理数据库连接和表初始化。
// src/main/java/com/example/guestbook/DBUtil.java
package com.example.guestbook;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static final String DB_URL = "jdbc:sqlite:guestbook.db";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(DB_URL);
}
public static void initDB() {
String sql = "CREATE TABLE IF NOT EXISTS messages ("
+ " id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ " nickname TEXT NOT NULL,"
+ " content TEXT NOT NULL,"
+ " created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
+ ");";
try (Connection conn = getConnection(); Statement stmt = conn.createStatement()) {
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
步骤 3: 编写处理留言的Servlet
创建 MessageServlet.java,处理 /message 路径的请求。
// src/main/java/com/example/guestbook/MessageServlet.java
package com.example.guestbook;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "MessageServlet", value = {"/message", "/list"}) // 使用注解简化配置
public class MessageServlet extends HttpServlet {
@Override 