以 IDEA 2025 + Jakarta EE(原 Java EE)+ Tomcat 11 + MySQL 8.x 为环境,从零开始详细讲解「用 Jakarta EE 模板创建 Java Web 项目并连接数据库」的完整步骤,每一步都标注手动操作 和关键注意点,确保你能一步步复刻:
前置环境确认
- 已安装 IDEA 2025、JDK 21(或 17)、Tomcat 11、MySQL 8.x
- 已配置好 MySQL(知道 root 密码,能正常连接,123456)
完整步骤(Jakarta EE 方式)
步骤 1:创建 Jakarta EE Web 项目(手动操作)
操作流程:
-
打开 IDEA → 顶部菜单【文件】→ 【新建】→ 【项目】;
-
左侧导航栏选择「Jakarta EE」(中文版 IDEA 显示为「Jakarta 平台」);
-
右侧配置区域(关键!逐行核对):
配置项 取值 / 操作 名称 crm(自定义,比如 student-web) 位置 自定义路径(比如 E:\code\crm) JDK 选择已安装的 JDK 21/17(必须和 Tomcat 兼容,Tomcat 11 推荐 JDK 17+) Jakarta EE 版本 选择「10」(和 Tomcat 11 完全匹配,Tomcat 10 选 9,Tomcat 9 选 8) 依赖 勾选「Servlet」(核心,仅需这一个基础依赖,JSP 可选) 构建工具 选择「Maven」(方便管理数据库 jar 包) 工件坐标(可选) GroupId:com.crm,ArtifactId:crm,Version:1.0-SNAPSHOT -
点击「创建」,IDEA 会自动:
- 生成标准的 Maven Web 项目结构;
- 自动引入 Jakarta Servlet 核心依赖(无需手动写 pom.xml);
- 初始化 web.xml 配置文件。
项目结构检查(创建后必看):
创建完成后,项目目录应包含:
crm/
├── src/
│ ├── main/
│ │ ├── java/ // 存放Java代码(Servlet、工具类)
│ │ ├── resources/ // 资源文件(可选,比如数据库配置)
│ │ └── webapp/ // Web资源目录
│ │ ├── WEB-INF/ // 核心配置目录
│ │ │ └── web.xml // Servlet配置文件(自动生成)
│ │ └── index.jsp // 默认首页(自动生成)
└── pom.xml // Maven依赖配置文件(自动生成)
步骤 2:配置数据库 JDBC 驱动(手动修改 pom.xml)
Jakarta EE 模板仅自动引入 Servlet 依赖,数据库驱动需要手动添加(两种方式,推荐 Maven 方式):
方式 1:Maven 自动引入 MySQL 驱动(推荐,无需手动下载 jar 包)
-
打开项目根目录的
pom.xml文件; -
找到
<dependencies>标签(已有 Servlet 依赖),添加 MySQL 驱动依赖:<dependencies> <!-- IDEA自动生成的Servlet依赖 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <!-- 手动添加MySQL JDBC驱动(核心) --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.4.0</version> <!-- 适配MySQL 8.x,5.x用5.1.49 --> </dependency> </dependencies> -
点击 IDEA 右侧「Maven」面板 → 点击「刷新」按钮(或按 Ctrl+Shift+O),IDEA 会自动下载 MySQL 驱动 jar 包到本地仓库(无需手动复制)。
方式 2:手动下载 jar 包(备用,适合无网络场景)
- 访问 MySQL 官网:https://dev.mysql.com/downloads/connector/j/
- 下载「Platform Independent」的 zip 包,解压后得到
mysql-connector-j-8.4.0.jar; - 在项目
src/main/webapp/WEB-INF下新建lib目录; - 将下载的 jar 包复制到
lib目录,IDEA 会自动识别该依赖。
步骤 3:编写 Servlet 类(手动 + IDEA 快捷键)
操作流程:
-
右键
src/main/java→ 【新建】→ 【包】,命名为com.crm.servlet; -
右键该包 → 【新建】→ 【Java 类】,命名为
StudentServlet; -
让类实现
jakarta.servlet.Servlet接口,并用快捷键生成方法:package com.crm.servlet; import jakarta.servlet.Servlet; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.annotation.WebServlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; // 可选:用注解替代web.xml配置(二选一) // @WebServlet("/student") public class StudentServlet implements Servlet { // IDEA快捷键Alt+Enter自动生成的5个接口方法 @Override public void init(ServletConfig servletConfig) throws ServletException {} @Override public ServletConfig getServletConfig() { return null; } // 核心:处理请求+数据库操作写在这里 @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // 1. 解决中文乱码(必须加) request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 2. 数据库连接参数(替换成你的MySQL信息) String jdbcUrl = "jdbc:mysql://localhost:3306/crm_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; String jdbcUser = "root"; // 你的MySQL用户名 String jdbcPassword = "123456"; // 你的MySQL密码 // 3. JDBC操作数据库 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 加载MySQL驱动(MySQL 8.x可省略,自动加载) Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword); out.println("<h3>✅ 数据库连接成功!</h3>"); // 执行查询SQL String sql = "SELECT id, name, age, phone FROM student"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); // 输出查询结果到浏览器 out.println("<h2>学生信息列表</h2>"); out.println("<table border='1' cellpadding='5' cellspacing='0'>"); out.println("<tr><th>ID</th><th>姓名</th><th>年龄</th><th>电话</th></tr>"); // 遍历结果集 if (!rs.next()) { out.println("<tr><td colspan='4'>暂无学生数据</td></tr>"); } else { do { out.println("<tr>"); out.println("<td>" + rs.getInt("id") + "</td>"); out.println("<td>" + rs.getString("name") + "</td>"); out.println("<td>" + rs.getInt("age") + "</td>"); out.println("<td>" + rs.getString("phone") + "</td>"); out.println("</tr>"); } while (rs.next()); } out.println("</table>"); } catch (ClassNotFoundException e) { out.println("<h3>❌ 驱动加载失败:" + e.getMessage() + "</h3>"); e.printStackTrace(); } catch (SQLException e) { out.println("<h3>❌ 数据库操作失败:" + e.getMessage() + "</h3>"); e.printStackTrace(); } catch (Exception e) { out.println("<h3>❌ 未知错误:" + e.getMessage() + "</h3>"); e.printStackTrace(); } finally { // 关闭资源(必须加,避免内存泄漏) try { if (rs != null) rs.close(); } catch (SQLException e) {} try { if (ps != null) ps.close(); } catch (SQLException e) {} try { if (conn != null) conn.close(); } catch (SQLException e) {} out.close(); } } @Override public String getServletInfo() { return "StudentServlet v1.0"; } @Override public void destroy() {} }
步骤 4:配置 Servlet 访问路径(二选一,手动操作)
方式 1:修改 web.xml(传统方式,推荐新手)
打开src/main/webapp/WEB-INF/web.xml,添加 Servlet 注册和映射:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<!-- 注册Servlet -->
<servlet>
<servlet-name>StudentServlet</servlet-name>
<servlet-class>com.crm.servlet.StudentServlet</servlet-class>
</servlet>
<!-- 映射访问路径 -->
<servlet-mapping>
<servlet-name>StudentServlet</servlet-name>
<url-pattern>/student</url-pattern> <!-- 访问路径 -->
</servlet-mapping>
</web-app>
方式 2:用注解(简化方式,无需改 web.xml)
在StudentServlet类上添加注解:
@WebServlet("/student") // 访问路径和web.xml一致
public class StudentServlet implements Servlet { ... }
步骤 5:创建 MySQL 数据库和表(手动执行 SQL)
-
打开 Navicat/MySQL Workbench/CMD,连接 MySQL;
-
执行以下 SQL(复制粘贴即可):
-- 1. 创建数据库(和Servlet中的jdbcUrl一致) CREATE DATABASE IF NOT EXISTS crm_db DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -- 2. 切换到该数据库 USE crm_db; -- 3. 创建学生表 CREATE TABLE IF NOT EXISTS student ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID(自增)', name VARCHAR(50) NOT NULL COMMENT '学生姓名', age INT(3) DEFAULT NULL COMMENT '学生年龄', phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表'; -- 4. 插入测试数据 INSERT INTO student (name, age, phone) VALUES ('张三', 20, '13800138000'), ('李四', 21, '13900139000'), ('王五', 19, '13700137000');
步骤 6:配置 Tomcat 服务器(手动操作)
-
IDEA 右上角 → 点击「添加配置」(下拉框显示「Current File」);
-
弹出的窗口中,左侧选「Tomcat Server」→ 「本地」;
-
「服务器」标签页配置:
配置项 操作 名称 Tomcat 11(自定义) 应用服务器 点击「配置」→ 选择 Tomcat 11 的安装目录(比如 E:\apache-tomcat-11.0.18) HTTP 端口 默认 8080(若被占用,改成 8081/8082) JRE 选择和项目一致的 JDK(21/17) 启动后打开浏览器 勾选(可选) -
「部署」标签页配置(核心!):
- 点击「+」→ 选择「工件」→ 选中「crm:war exploded」;
- 「应用上下文」:填写
/crm(自定义,比如/student-web); - 「在服务器启动时部署」:勾选;
-
点击「应用」→ 「确定」,完成 Tomcat 配置。
步骤 7:启动项目并访问(手动操作)
-
点击 IDEA 右上角 Tomcat 配置旁的「绿色三角」按钮,IDEA 自动:
- 编译 Java 代码;
- 部署项目到 Tomcat 临时目录;
- 启动 Tomcat 服务器;
-
启动成功后,打开浏览器,输入访问地址:
http://localhost:8081/crm/student(端口 8081 替换成你的配置,/crm 是应用上下文,/student 是 Servlet 映射路径);
-
正常情况下,页面会显示:
- ✅ 数据库连接成功;
- 学生信息表格(张三、李四、王五)。
步骤 8:常见问题排查(关键!)
| 问题现象 | 原因 + 解决方法 |
|---|---|
| 数据库连接失败 | 1. MySQL 未启动 → 启动 MySQL 服务;2. 密码错误 → 修正 jdbcPassword;3. 数据库名错误 → 修正 jdbcUrl 中的 crm_db |
| 驱动加载失败 | 1. pom.xml 依赖未刷新 → 点击 Maven 刷新;2. 驱动版本不匹配 → MySQL 8.x 用 8.4.0,5.x 用 5.1.49 |
| 404 错误 | 1. 访问路径错误 → 核对应用上下文和 Servlet 映射路径;2. web.xml 全类名错误 → 核对 com.crm.servlet.StudentServlet |
| 中文乱码 | 1. 已加request.setCharacterEncoding("UTF-8")和response.setContentType(...);2. IDEA 控制台乱码 → 【帮助】→ 【编辑自定义 VM 选项】,添加-Dfile.encoding=UTF-8和-Dconsole.encoding=UTF-8,重启 IDEA |
总结(核心关键点)
- Jakarta EE 模板优势:自动集成 Servlet 依赖,无需手动写基础 pom.xml;
- 数据库配置核心:通过 Maven 添加 MySQL 驱动(推荐),或手动复制 jar 包到 WEB-INF/lib;
- Servlet 核心 :数据库操作写在
service()方法中,必须处理乱码和资源关闭; - 访问路径规则 :
http://localhost:端口/应用上下文/Servlet映射路径; - IDEA 自动操作:编译、部署、启动 Tomcat,无需手动复制文件到 Tomcat 的 webapps。