使用MVC和Servlet检索员工信息

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用MVC架构和Servlet 2.x实现员工信息检索功能。你将在索引页面上创建一个搜索框,用户可以在其中输入员工ID进行搜索,然后在单独的页面上显示员工信息。

👀 预览

员工搜索结果预览

🎯 任务

在这个项目中,你将学习:

  • 如何在索引页面上创建一个搜索框,允许用户输入员工ID
  • 如何实现实体类来表示员工数据
  • 如何实现JDBC实用工具类以获取数据库连接
  • 如何实现DAO类以从数据库中检索员工信息
  • 如何实现控制器类来处理请求并将员工数据转发到JSP页面
  • 如何实现JSP页面以显示查询到的员工信息

🏆 成果

完成这个项目后,你将能够:

  • 使用MVC架构来构建你的Web应用程序
  • 使用Servlet 2.x来处理HTTP请求和响应
  • 使用JDBC与数据库进行交互
  • 使用JSP在网页上显示动态数据

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java/BasicSyntaxGroup -.-> java/output("`Output`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_attributes("`Class Attributes`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("`User Input`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("`Encapsulation`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("`Exceptions`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/jdbc("`JDBC`") java/FileandIOManagementGroup -.-> java/io("`IO`") subgraph Lab Skills java/output -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/classes_objects -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/class_attributes -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/user_input -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/encapsulation -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/exceptions -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/jdbc -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} java/io -.-> lab-300392{{"`使用MVC和Servlet检索员工信息`"}} end

创建搜索框

在这一步中,你将在索引页面上创建一个搜索框,用户可以在其中输入员工ID进行搜索。

  1. 打开位于 EmployeeInfo/src/main/webapp 目录下的 index.jsp 文件。

  2. 添加以下HTML代码来创建搜索框:

<form action="/findEmpByEid" method="get">
  <input type="text" name="employeeId" /><input type="submit" value="search" />
</form>

当用户点击“搜索”按钮时,此表单将向 /findEmpByEid URL发送一个带有 employeeId 参数的GET请求。

✨ 查看解决方案并练习

实现员工实体类

在这一步中,你将根据 employees 表中的字段来实现 Employee.java 实体类。

  1. 打开位于 EmployeeInfo/src/main/java/org/labex/entity 目录下的 Employee.java 文件。

  2. 添加以下代码来定义字段及其相应的getter和setter方法:

public class Employee {
    private Integer id;
    private String name;
    private Integer gender;
    private String phone;
    private String email;
    private String address;

    // Getters and setters
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 实现其余的getter和setter方法
}
✨ 查看解决方案并练习

实现JDBC实用工具类

在这一步中,你将实现 JdbcUtil.java 类,以提供一个获取数据库连接的方法。

  1. 打开位于 EmployeeInfo/src/main/java/org/labex/jdbc 目录下的 JdbcUtil.java 文件。

  2. 添加以下代码来实现 getConn() 方法:

public class JdbcUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/test";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

此方法将使用提供的URL、用户名和密码返回一个数据库连接。

✨ 查看解决方案并练习

实现DAO类

在这一步中,你将实现 EmployeeDao.java 类,以提供一个检索员工信息的方法。

  1. 打开位于 EmployeeInfo/src/main/java/org/labex/dao 目录下的 EmployeeDao.java 文件。

  2. 添加以下代码来实现 getEmployee() 方法:

public class EmployeeDao {
    public Employee getEmployee(Integer employeeId) {
        Connection conn = JdbcUtil.getConn();
        String sql = "select * from employees where employee_id =?";
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        Employee employee = null;
        try {
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setInt(1, employeeId);
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                employee = new Employee();
                employee.setId(resultSet.getInt(1));
                employee.setName(resultSet.getString(2));
                employee.setGender(resultSet.getInt(3));
                employee.setPhone(resultSet.getString(4));
                employee.setEmail(resultSet.getString(5));
                employee.setAddress(resultSet.getString(6));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return employee;
    }
}

此方法使用 JdbcUtil.java 中的 getConn() 方法来获取数据库连接,然后使用从控制器传递过来的员工ID查询数据库并返回一个 Employee 对象。

✨ 查看解决方案并练习

实现控制器类

在这一步中,你将实现 EmployeeController.java 类来处理检索员工信息的请求。

  1. 打开位于 EmployeeInfo/src/main/java/org/labex/controller 目录下的 EmployeeController.java 文件。

  2. 添加以下代码来实现 doGet()doPost() 方法:

@WebServlet("/findEmpByEid")
public class EmployeeController extends HttpServlet {
    EmployeeDao employeeDao = new EmployeeDao();

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

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String employeeId = req.getParameter("employeeId");
        Employee employee = employeeDao.getEmployee(Integer.parseInt(employeeId));
        req.setAttribute("employee", employee);
        req.getRequestDispatcher("info.jsp").forward(req, resp);
    }
}

doGet() 方法从请求中获取 employeeId 参数,使用 EmployeeDao 类获取员工信息,将其存储在请求中,然后将请求转发到 info.jsp 页面以显示员工信息。

✨ 查看解决方案并练习

实现JSP页面

在这一步中,你将实现 info.jsp 文件来显示查询到的员工信息。

  1. 打开位于 EmployeeInfo/src/main/webapp 目录下的 info.jsp 文件。

  2. 添加以下代码以创建一个表格来显示员工信息:

<%@ page import="org.labex.entity.Employee" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>员工信息</title>
    <style>
        th, td {
            border: 1px solid black;
            padding: 8px;
        }
    </style>
</head>
<body>
    <% Object employeeObj = request.getAttribute("employee");
    if (employeeObj!= null) {
        Employee employee = (Employee) employeeObj; %>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>性别</th>
                <th>电话号码</th>
                <th>邮箱</th>
                <th>地址</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><%= employee.getId() %></td>
                <td><%= employee.getName() %></td>
                <td><%= employee.getGender() == 1? "男" : "女" %></td>
                <td><%= employee.getPhone() %></td>
                <td><%= employee.getEmail() %></td>
                <td><%= employee.getAddress() %></td>
            </tr>
        </tbody>
    </table>
    <% } else { %>
    <p>未找到信息。</p>
    <% } %>
</body>
</html>

此JSP页面从请求中获取 employee 对象,然后在表格中显示员工信息。

  1. 切换到 EmployeeInfo 目录并使用以下命令启动服务。
cd ~/project/EmployeeInfo/
mvn clean tomcat7:run

查询到的员工信息的预期结果如下:

员工信息表结果
✨ 查看解决方案并练习

总结

恭喜!你已完成此项目。你可以在LabEx中练习更多实验以提升技能。

您可能感兴趣的其他 Java 教程