企业级Javaweb用idea自动化实现

IDEA 2025 + Jakarta EE(原 Java EE)+ Tomcat 11 + MySQL 8.x 为环境,从零开始详细讲解「用 Jakarta EE 模板创建 Java Web 项目并连接数据库」的完整步骤,每一步都标注手动操作关键注意点,确保你能一步步复刻:

前置环境确认

  1. 已安装 IDEA 2025、JDK 21(或 17)、Tomcat 11、MySQL 8.x
  2. 已配置好 MySQL(知道 root 密码,能正常连接,123456)

完整步骤(Jakarta EE 方式)

步骤 1:创建 Jakarta EE Web 项目(手动操作)

操作流程:
  1. 打开 IDEA → 顶部菜单【文件】→ 【新建】→ 【项目】;

  2. 左侧导航栏选择「Jakarta EE」(中文版 IDEA 显示为「Jakarta 平台」);

  3. 右侧配置区域(关键!逐行核对):

    配置项 取值 / 操作
    名称 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
  4. 点击「创建」,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 包)
  1. 打开项目根目录的pom.xml文件;

  2. 找到<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>
  3. 点击 IDEA 右侧「Maven」面板 → 点击「刷新」按钮(或按 Ctrl+Shift+O),IDEA 会自动下载 MySQL 驱动 jar 包到本地仓库(无需手动复制)。

方式 2:手动下载 jar 包(备用,适合无网络场景)
  1. 访问 MySQL 官网:https://dev.mysql.com/downloads/connector/j/
  2. 下载「Platform Independent」的 zip 包,解压后得到mysql-connector-j-8.4.0.jar
  3. 在项目src/main/webapp/WEB-INF下新建lib目录;
  4. 将下载的 jar 包复制到lib目录,IDEA 会自动识别该依赖。

步骤 3:编写 Servlet 类(手动 + IDEA 快捷键)

操作流程:
  1. 右键src/main/java → 【新建】→ 【包】,命名为com.crm.servlet

  2. 右键该包 → 【新建】→ 【Java 类】,命名为StudentServlet

  3. 让类实现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)

  1. 打开 Navicat/MySQL Workbench/CMD,连接 MySQL;

  2. 执行以下 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 服务器(手动操作)

  1. IDEA 右上角 → 点击「添加配置」(下拉框显示「Current File」);

  2. 弹出的窗口中,左侧选「Tomcat Server」→ 「本地」;

  3. 「服务器」标签页配置:

    配置项 操作
    名称 Tomcat 11(自定义)
    应用服务器 点击「配置」→ 选择 Tomcat 11 的安装目录(比如 E:\apache-tomcat-11.0.18)
    HTTP 端口 默认 8080(若被占用,改成 8081/8082)
    JRE 选择和项目一致的 JDK(21/17)
    启动后打开浏览器 勾选(可选)
  4. 「部署」标签页配置(核心!):

    • 点击「+」→ 选择「工件」→ 选中「crm:war exploded」;
    • 「应用上下文」:填写/crm(自定义,比如/student-web);
    • 「在服务器启动时部署」:勾选;
  5. 点击「应用」→ 「确定」,完成 Tomcat 配置。

步骤 7:启动项目并访问(手动操作)

  1. 点击 IDEA 右上角 Tomcat 配置旁的「绿色三角」按钮,IDEA 自动:

    • 编译 Java 代码;
    • 部署项目到 Tomcat 临时目录;
    • 启动 Tomcat 服务器;
  2. 启动成功后,打开浏览器,输入访问地址:

    复制代码
    http://localhost:8081/crm/student

    (端口 8081 替换成你的配置,/crm 是应用上下文,/student 是 Servlet 映射路径);

  3. 正常情况下,页面会显示:

    • ✅ 数据库连接成功;
    • 学生信息表格(张三、李四、王五)。

步骤 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

总结(核心关键点)

  1. Jakarta EE 模板优势:自动集成 Servlet 依赖,无需手动写基础 pom.xml;
  2. 数据库配置核心:通过 Maven 添加 MySQL 驱动(推荐),或手动复制 jar 包到 WEB-INF/lib;
  3. Servlet 核心 :数据库操作写在service()方法中,必须处理乱码和资源关闭;
  4. 访问路径规则http://localhost:端口/应用上下文/Servlet映射路径
  5. IDEA 自动操作:编译、部署、启动 Tomcat,无需手动复制文件到 Tomcat 的 webapps。
相关推荐
2601_949146536 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
0思必得06 小时前
[Web自动化] Selenium无头模式
前端·爬虫·selenium·自动化·web自动化
青云计划6 小时前
知光项目知文发布模块
java·后端·spring·mybatis
赶路人儿6 小时前
Jsoniter(java版本)使用介绍
java·开发语言
探路者继续奋斗7 小时前
IDD意图驱动开发之意图规格说明书
java·规格说明书·开发规范·意图驱动开发·idd
Gofarlic_OMS7 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
dixiuapp8 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
消失的旧时光-19438 小时前
第十九课:为什么要引入消息队列?——异步系统设计思想
java·开发语言
A懿轩A8 小时前
【Java 基础编程】Java 面向对象入门:类与对象、构造器、this 关键字,小白也能写 OOP
java·开发语言
乐观勇敢坚强的老彭9 小时前
c++寒假营day03
java·开发语言·c++