12.29

第四步:创建数据库连接工具类 (DBUtil.java)
这个类负责管理数据库的连接和关闭,是项目中所有数据库操作的基础。

  1. 操作步骤:
    在 IDEA 的项目视图中,依次展开 src -> main -> java -> com.company.detection。
    在 com.company.detection 包上右键 -> New -> Package,创建一个名为 util 的新包。
    然后在 util 包上右键 -> New -> Java Class,创建一个名为 DBUtil 的类。
  2. 代码实现:
    将以下代码完整地复制并粘贴到 DBUtil.java 文件中。
    java
    运行
    package com.company.detection.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**

  • 数据库连接工具类

  • 提供获取和关闭数据库连接的静态方法
    */
    public class DBUtil {

    // 数据库连接信息 (请根据你的实际情况修改)
    private static final String URL = "jdbc:mysql://localhost:3306/engineering_detection_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
    private static final String USER = "root"; // 你的MySQL用户名
    private static final String PASSWORD = "123456"; // 你的MySQL密码

    // 静态代码块,在类加载时只执行一次,用于注册JDBC驱动
    static {
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    System.out.println("JDBC驱动注册成功!");
    } catch (ClassNotFoundException e) {
    System.err.println("JDBC驱动注册失败!");
    e.printStackTrace();
    }
    }

    /**

    • 获取数据库连接
    • @return 一个有效的数据库连接对象 (Connection)
      */
      public static Connection getConnection() {
      try {
      Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
      return conn;
      } catch (SQLException e) {
      System.err.println("获取数据库连接失败!");
      e.printStackTrace();
      return null;
      }
      }

    /**

    • 关闭数据库资源
    • @param conn 连接对象
    • @param ps 预编译语句对象
    • @param rs 结果集对象
      */
      public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
      try {
      if (rs != null) {
      rs.close();
      }
      if (ps != null) {
      ps.close();
      }
      if (conn != null) {
      conn.close();
      }
      } catch (SQLException e) {
      e.printStackTrace();
      }
      }

    /**

    • 关闭数据库资源的重载方法 (当没有ResultSet时使用)
    • @param conn 连接对象
    • @param ps 预编译语句对象
      */
      public static void close(Connection conn, PreparedStatement ps) {
      close(conn, ps, null);
      }

    // 主方法,用于测试数据库连接是否成功
    public static void main(String[] args) {
    Connection connection = getConnection();
    if (connection != null) {
    System.out.println("数据库连接成功!");
    try {
    connection.close(); // 测试后关闭连接
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } else {
    System.out.println("数据库连接失败,请检查配置!");
    }
    }
    }
    重要提示:
    请务必修改 DBUtil.java 文件中的 USER 和 PASSWORD 变量,将其改为你自己的 MySQL 用户名和密码。

  1. 测试连接:
    保存文件后,右键点击 DBUtil.java 文件 -> Run 'DBUtil.main()'。
    观察 IDEA 下方的控制台输出。
    如果显示 JDBC驱动注册成功! 和 数据库连接成功!,说明你的数据库连接配置正确。
    如果报错,请仔细检查控制台的错误信息,通常是用户名、密码错误或数据库服务未启动。第五步:创建 Servlet 和 JSP 页面
  2. 创建 webapp 目录结构
    首先,请确保你的 src/main/webapp 目录下有以下结构。如果没有,请手动创建。
    plaintext
    webapp/
    ├── WEB-INF/
    │ └── web.xml # Web应用的部署描述符
    ├── login.jsp # 登录页面
    ├── client/ # 委托客户页面目录
    │ └── client_home.jsp
    ├── inspector/ # 检测员页面目录
    │ └── inspector_home.jsp
    ├── manager/ # 项目经理页面目录
    │ └── manager_home.jsp
    └── director/ # 总监页面目录
    └── director_home.jsp
  3. 配置 web.xml
    在 WEB-INF 目录下创建 web.xml 文件,用于配置 Servlet 和启动页面。
    路径: src/main/webapp/WEB-INF/web.xml
    xml

<!-- 配置欢迎页面(默认访问登录页) -->
<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

<!-- 配置登录Servlet -->
<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.company.detection.controller.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

<!-- 配置委托客户Servlet -->
<servlet>
    <servlet-name>ClientServlet</servlet-name>
    <servlet-class>com.company.detection.controller.ClientServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ClientServlet</servlet-name>
    <url-pattern>/client/*</url-pattern>
</servlet-mapping>

<!-- 配置检测员Servlet -->
<servlet>
    <servlet-name>InspectorServlet</servlet-name>
    <servlet-class>com.company.detection.controller.InspectorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>InspectorServlet</servlet-name>
    <url-pattern>/inspector/*</url-pattern>
</servlet-mapping>

<!-- 配置项目经理Servlet -->
<servlet>
    <servlet-name>ManagerServlet</servlet-name>
    <servlet-class>com.company.detection.controller.ManagerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ManagerServlet</servlet-name>
    <url-pattern>/manager/*</url-pattern>
</servlet-mapping>

<!-- 配置总监Servlet -->
<servlet>
    <servlet-name>DirectorServlet</servlet-name>
    <servlet-class>com.company.detection.controller.DirectorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DirectorServlet</servlet-name>
    <url-pattern>/director/*</url-pattern>
</servlet-mapping>
3. 创建 Servlet 类 在 java 目录下创建 controller 包,并添加以下 Servlet。 a. LoginServlet.java 路径: src/main/java/com/company/detection/controller/LoginServlet.java java 运行 package com.company.detection.controller;

import com.company.detection.entity.User;
import com.company.detection.service.UserService;
import com.company.detection.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

    String userId = request.getParameter("userId");
    String password = request.getParameter("password");

    User user = userService.login(userId, password);

    if (user != null) {
        HttpSession session = request.getSession();
        session.setAttribute("user", user);

        // 根据用户类别跳转到不同主页
        switch (user.getUserCategory()) {
            case 0: // 总监
                response.sendRedirect(request.getContextPath() + "/director/home");
                break;
            case 1: // 项目经理
                response.sendRedirect(request.getContextPath() + "/manager/home");
                break;
            case 2: // 检测员
                response.sendRedirect(request.getContextPath() + "/inspector/home");
                break;
            case 3: // 委托客户
                response.sendRedirect(request.getContextPath() + "/client/home");
                break;
            default:
                response.getWriter().write("未知用户类型!");
                break;
        }
    } else {
        // 登录失败,返回登录页并提示错误
        request.setAttribute("errorMsg", "用户名或密码错误!");
        request.getRequestDispatcher("/login.jsp").forward(request, response);
    }
}

}
b. ClientServlet.java (委托客户)
路径: src/main/java/com/company/detection/controller/ClientServlet.java
java
运行
package com.company.detection.controller;

import com.company.detection.entity.Task;
import com.company.detection.entity.User;
import com.company.detection.service.TaskService;
import com.company.detection.service.impl.TaskServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class ClientServlet extends HttpServlet {
private TaskService taskService = new TaskServiceImpl();

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

    HttpSession session = request.getSession();
    User user = (User) session.getAttribute("user");
    if (user == null) {
        response.sendRedirect(request.getContextPath() + "/login.jsp");
        return;
    }

    String uri = request.getRequestURI();
    String action = uri.substring(uri.lastIndexOf("/") + 1);

    if ("home".equals(action)) {
        // 客户主页,查询自己提交的任务
        List<Task> tasks = taskService.queryTasksByRole(user.getUserId(), user.getUserCategory());
        request.setAttribute("tasks", tasks);
        request.getRequestDispatcher("/client/client_home.jsp").forward(request, response);
    } else if ("add".equals(action)) {
        // 跳转到添加任务页面
        request.getRequestDispatcher("/client/client_add.jsp").forward(request, response);
    } else if ("doAdd".equals(action)) {
        // 处理添加任务的请求
        Task task = new Task();
        task.setId(taskService.generateTaskId());
        task.setCommitDate(request.getParameter("commitDate"));
        task.setClientName(user.getUserName()); // 客户名就是当前登录用户的姓名
        task.setItemName(request.getParameter("itemName"));
        task.setItemContent(request.getParameter("itemContent"));

        int result = taskService.addTask(task);
        if (result > 0) {
            response.sendRedirect(request.getContextPath() + "/client/home");
        } else {
            response.getWriter().write("任务提交失败!");
        }
    }
}

}
注意:为了简化,我只实现了委托客户的部分功能。其他角色的 Servlet(InspectorServlet, ManagerServlet, DirectorServlet)的逻辑类似,你可以根据这个模式来实现。
4. 创建 JSP 页面
现在,我们来创建几个简单的 JSP 页面。
a. login.jsp (登录页)
路径: src/main/webapp/login.jsp
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

工程质量检测系统 - 登录 b. client_home.jsp (客户主页) 路径: src/main/webapp/client/client_home.jsp jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 委托客户 - 主页

欢迎您,${user.userName} (委托客户)

提交新任务 | 退出登录

<h2>我的任务列表</h2>
<table border="1" cellpadding="8" cellspacing="0">
    <tr>
        <th>任务编号</th>
        <th>委托日期</th>
        <th>项目名称</th>
        <th>当前状态</th>
    </tr>
    <c:forEach var="task" items="${tasks}">
        <tr>
            <td>${task.id}</td>
            <td>${task.commitDate}</td>
            <td>${task.itemName}</td>
            <td>${task.state}</td>
        </tr>
    </c:forEach>
    <c:if test="${empty tasks}">
        <tr>
            <td colspan="4" align="center">暂无任务记录</td>
        </tr>
    </c:if>
</table>
c. client_add.jsp (客户添加任务页) 路径: src/main/webapp/client/client_add.jsp jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> 委托客户 - 添加任务

提交新的检测任务

返回主页

<form action="${pageContext.request.contextPath}/client/doAdd" method="post">
    <table>
        <tr>
            <td>委托日期:</td>
            <td><input type="text" name="commitDate" placeholder="格式: YYYYMMDD" required></td>
        </tr>
        <tr>
            <td>项目名称:</td>
            <td><input type="text" name="itemName" required></td>
        </tr>
        <tr>
            <td>项目内容:</td>
            <td><textarea name="itemContent" rows="5" cols="30"></textarea></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="提交任务"></td>
        </tr>
    </table>
</form>
posted @ 2026-01-14 20:03  muyuxiaxing  阅读(1)  评论(0)    收藏  举报