基于 Servlet、JSP 的员工管理系统的完整实现方案


源代码要求下面5个地方个性化:

① 数据库脚本

-- 创建数据库
CREATE DATABASE ems_wzj DEFAULT CHARACTER SET utf8mb4;

USE ems_wzj;

-- 用户表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    username VARCHAR(32) NOT NULL COMMENT '用户名',
    password VARCHAR(32) NOT NULL COMMENT '密码',
    name VARCHAR(32) NOT NULL COMMENT '姓名'
) COMMENT='用户表';

-- 部门表
CREATE TABLE dept (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    name VARCHAR(32) NOT NULL COMMENT '部门名称'
) COMMENT='部门表';

-- 员工表
CREATE TABLE emp (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    name VARCHAR(32) NOT NULL COMMENT '姓名',
    gender VARCHAR(8) NOT NULL COMMENT '性别',
    birthday DATE NOT NULL COMMENT '生日',
    salary DOUBLE NOT NULL COMMENT '工资',
    dept_id INT NOT NULL COMMENT '部门id',
    FOREIGN KEY (dept_id) REFERENCES dept(id)
) COMMENT='员工表';

-- 插入用户数据
INSERT INTO user (username, password, name) VALUES
    ('zs', '1230', '张三'),
    ('ls', '1232', '李四');

-- 插入部门数据
INSERT INTO dept (name) VALUES
    ('人事部'),
    ('技术部');

-- 插入员工数据
INSERT INTO emp (name, gender, birthday, salary, dept_id) VALUES
    ('王五', '男', '1990-01-01', 8000, 1),
    ('赵六', '女', '1992-02-02', 9000, 2),
    ('孙七', '男', '1988-03-03', 10000, 1),
    ('周八', '女', '1995-04-04', 11000, 2);

② JavaBean 实体类

ems_wzj/src/com.ems/bean/User.java

package com.ems.bean;

public class User {
    private int id;
    private String username;
    private String password;
    private String name;

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

ems_wzj/src/com.ems/bean/Department.java

package com.ems.bean;

public class Dept {
    private int id;
    private String name;

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

ems_wzj/src/com.ems/bean/Employee.java

package com.ems.bean;

import java.util.Date;

public class Emp {
    private int id;
    private String name;
    private String gender;
    private Date birthday;
    private double salary;
    private int deptId;
    private Dept dept;

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getGender() { return gender; }
    public void setGender(String gender) { this.gender = gender; }
    public Date getBirthday() { return birthday; }
    public void setBirthday(Date birthday) { this.birthday = birthday; }
    public double getSalary() { return salary; }
    public void setSalary(double salary) { this.salary = salary; }
    public int getDeptId() { return deptId; }
    public void setDeptId(int deptId) { this.deptId = deptId; }
    public Dept getDept() { return dept; }
    public void setDept(Dept dept) { this.dept = dept; }
}

③ 工具类

ems_wzj/src/com.ems/util/DBUtils.java

package com.ems.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.*;

public class JdbcUtils {
    private static DataSource ds = new ComboPooledDataSource();

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try { if (rs != null) rs.close(); } catch (Exception e) {}
        try { if (stmt != null) stmt.close(); } catch (Exception e) {}
        try { if (conn != null) conn.close(); } catch (Exception e) {}
    }

    public static DataSource getDataSource() {
        return ds;
    }
}

c3p0-config.xml

<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://47.94.151.78:3306/ems_wzj?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai</property>
        <property name="user">root</property>
        <property name="password">Wzj.518426</property>

        <property name="maxPoolSize">20</property>
        <property name="minPoolSize">2</property>
        <property name="initialPoolSize">5</property>
        <property name="maxIdleTime">30</property>
        <property name="acquireIncrement">5</property>

        <property name="idleConnectionTestPeriod">300</property>
        <property name="testConnectionOnCheckout">false</property>
        <property name="testConnectionOnCheckin">true</property>
        <property name="preferredTestQuery">SELECT 1</property>

        <property name="checkoutTimeout">30000</property>
        <property name="unreturnedConnectionTimeout">300</property>
        <property name="debugUnreturnedConnectionStackTraces">true</property>

        <property name="maxStatements">180</property>
        <property name="maxStatementsPerConnection">20</property>

        <property name="numHelperThreads">5</property>
        <property name="breakAfterAcquireFailure">false</property>
    </default-config>
</c3p0-config>

ems_wzj/src/com.ems/servlet/LoginServlet.java


package com.ems.servlet;

import com.ems.bean.User;
import com.ems.service.UserService;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        UserService userService = new UserService();
        User user = userService.login(username, password);
        if (user != null) {
            req.getSession().setAttribute("user", user);
            resp.sendRedirect(req.getContextPath() + "/jsp/welcome.jsp");
        } else {
            req.setAttribute("msg", "用户名或密码错误");
            req.getRequestDispatcher("/jsp/login.jsp").forward(req, resp);
        }
    }
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

ems_wzj/src/com.ems/servlet/LogoutServlet.java


package com.ems.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class LogoutServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().invalidate();
        resp.sendRedirect(req.getContextPath() + "/jsp/login.jsp");
    }
}

ems_wzj/src/com.ems/servlet/DepartmentServlet.java


package com.ems.servlet;

import com.ems.bean.Dept;
import com.ems.service.DeptService;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;

public class DeptServlet extends HttpServlet {
    private final DeptService deptService = new DeptService();

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        String action = req.getParameter("action");
        if (action == null || action.equals("list")) {
            list(req, resp);
        } else if (action.equals("add")) {
            showAdd(req, resp);
        } else if (action.equals("edit")) {
            showEdit(req, resp);
        } else if (action.equals("delete")) {
            delete(req, resp);
        } else {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND, "未知操作: " + action);
        }
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String action = req.getParameter("action");
        if (action.equals("add")) {
            add(req, resp);
        } else if (action.equals("edit")) {
            edit(req, resp);
        } else {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND, "未知操作: " + action);
        }
    }

    private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List deptList = deptService.findAll();
        req.setAttribute("deptList", deptList);
        req.getRequestDispatcher("/jsp/dept/list.jsp").forward(req, resp);
    }

    private void showAdd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/jsp/dept/add.jsp").forward(req, resp);
    }

    private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String name = req.getParameter("name");
        if (name == null || name.trim().isEmpty()) {
            req.setAttribute("error", "部门名称不能为空!");
            req.getRequestDispatcher("/jsp/dept/add.jsp").forward(req, resp);
            return;
        }
        Dept dept = new Dept();
        dept.setName(name.trim());
        deptService.add(dept);
        resp.sendRedirect(req.getContextPath() + "/DeptServlet?action=list");
    }

    private void showEdit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            int id = Integer.parseInt(req.getParameter("id"));
            Dept dept = deptService.findById(id);
            if (dept != null) {
                req.setAttribute("dept", dept);
                req.getRequestDispatcher("/jsp/dept/edit.jsp").forward(req, resp);
            } else {
                resp.sendError(HttpServletResponse.SC_NOT_FOUND, "部门不存在");
            }
        } catch (NumberFormatException e) {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "ID 格式错误");
        }
    }

    private void edit(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        try {
            int id = Integer.parseInt(req.getParameter("id"));
            String name = req.getParameter("name");
            if (name == null || name.trim().isEmpty()) {
                req.setAttribute("error", "部门名称不能为空!");
                req.setAttribute("dept", deptService.findById(id));
                req.getRequestDispatcher("/jsp/dept/edit.jsp").forward(req, resp);
                return;
            }
            Dept dept = new Dept();
            dept.setId(id);
            dept.setName(name.trim());
            deptService.update(dept);
            resp.sendRedirect(req.getContextPath() + "/DeptServlet?action=list");
        } catch (NumberFormatException e) {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "ID 格式错误");
        }
    }

    private void delete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        try {
            int id = Integer.parseInt(req.getParameter("id"));
            deptService.delete(id);
            resp.sendRedirect(req.getContextPath() + "/DeptServlet?action=list");
        } catch (NumberFormatException e) {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "ID 格式错误");
        }
    }
}

// ========== EmpServlet.java ==========
package com.ems.servlet;

import com.ems.service.EmpService;
import com.ems.bean.Emp;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;

public class EmpServlet extends HttpServlet {
    private EmpService empService = new EmpService();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        String action = req.getParameter("action");
        if (action == null || action.equals("list")) {
            list(req, resp);
        } else if (action.equals("add")) {
            showAdd(req, resp);
        } else if (action.equals("edit")) {
            showEdit(req, resp);
        } else if (action.equals("delete")) {
            delete(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String action = req.getParameter("action");
        if (action.equals("add")) {
            add(req, resp);
        } else if (action.equals("edit")) {
            edit(req, resp);
        }
    }

    private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List empList = empService.findAll();
        req.setAttribute("empList", empList);
        req.getRequestDispatcher("/jsp/emp/list.jsp").forward(req, resp);
    }

    private void showAdd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/jsp/emp/add.jsp").forward(req, resp);
    }

    private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String name = req.getParameter("name");
        String gender = req.getParameter("gender");
        String birthday = req.getParameter("birthday");
        String salary = req.getParameter("salary");
        String deptId = req.getParameter("deptId");

        Emp emp = new Emp();
        emp.setName(name);
        emp.setGender(gender);
        emp.setBirthday(java.sql.Date.valueOf(birthday));
        emp.setSalary(Double.parseDouble(salary));
        emp.setDeptId(Integer.parseInt(deptId));

        empService.add(emp);
        resp.sendRedirect(req.getContextPath() + "/EmpServlet?action=list");
    }

    private void showEdit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        Emp emp = empService.findById(id);
        req.setAttribute("emp", emp);
        req.getRequestDispatcher("/jsp/emp/edit.jsp").forward(req, resp);
    }

    private void edit(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        String name = req.getParameter("name");
        String gender = req.getParameter("gender");
        String birthday = req.getParameter("birthday");
        String salary = req.getParameter("salary");
        String deptId = req.getParameter("deptId");

        Emp emp = new Emp();
        emp.setId(id);
        emp.setName(name);
        emp.setGender(gender);
        emp.setBirthday(java.sql.Date.valueOf(birthday));
        emp.setSalary(Double.parseDouble(salary));
        emp.setDeptId(Integer.parseInt(deptId));

        empService.update(emp);
        resp.sendRedirect(req.getContextPath() + "/EmpServlet?action=list");
    }

    private void delete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        empService.delete(id);
        resp.sendRedirect(req.getContextPath() + "/EmpServlet?action=list");
    }
}

// ========== UserServlet.java ==========
package com.ems.servlet;

import com.ems.bean.User;
import com.ems.service.UserService;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;

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

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        String action = req.getParameter("action");
        if (action == null || action.equals("list")) {
            list(req, resp);
        } else if (action.equals("add")) {
            showAdd(req, resp);
        } else if (action.equals("edit")) {
            showEdit(req, resp);
        } else if (action.equals("delete")) {
            delete(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String action = req.getParameter("action");
        if (action.equals("add")) {
            add(req, resp);
        } else if (action.equals("edit")) {
            edit(req, resp);
        }
    }

    private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List userList = userService.findAll();
        req.setAttribute("userList", userList);
        req.getRequestDispatcher("/jsp/user/list.jsp").forward(req, resp);
    }

    private void showAdd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/jsp/user/add.jsp").forward(req, resp);
    }

    private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String name = req.getParameter("name");

        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setName(name);

        userService.add(user);
        resp.sendRedirect(req.getContextPath() + "/UserServlet?action=list");
    }

    private void showEdit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        User user = userService.findById(id);
        req.setAttribute("user", user);
        req.getRequestDispatcher("/jsp/user/edit.jsp").forward(req, resp);
    }

    private void edit(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String name = req.getParameter("name");

        User user = new User();
        user.setId(id);
        user.setUsername(username);
        user.setPassword(password);
        user.setName(name);

        userService.update(user);
        resp.sendRedirect(req.getContextPath() + "/UserServlet?action=list");
    }

    private void delete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        userService.delete(id);
        resp.sendRedirect(req.getContextPath() + "/UserServlet?action=list");
    }
}

// ========== LoginFilter.java ==========
package com.ems.filter;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        String uri = request.getRequestURI();
        HttpSession session = request.getSession(false);

        if (uri.contains("/login") ||
            uri.contains("LoginServlet") ||
            uri.endsWith(".css") ||
            uri.endsWith(".js") ||
            uri.endsWith(".jpg") ||
            uri.endsWith(".png") ||
            uri.endsWith(".gif") ||
            uri.contains("/fonts") ||
            uri.contains("/images")) {
            chain.doFilter(req, resp);
            return;
        }

        if (session != null && session.getAttribute("user") != null) {
            chain.doFilter(req, resp);
        } else {
            response.sendRedirect(request.getContextPath() + "/jsp/login.jsp");
        }
    }

    @Override
    public void destroy() {
        // 清理资源
    }
}

// ========== add.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>


    添加部门
    
    


// ========== login.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>


    用户登录
    




// ========== welcome.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    系统欢迎页面
    
    



// ========== user add.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>


    新增用户
    



// ========== dept list (_emp.jsp) ==========
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    部门列表
    



// ========== dept edit.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>


    编辑部门
    


// ========== emp add.jsp ==========
<%@ page contentType="text/html;charset=UTF-8" %>


    
    添加员工
    



ems_wzj
├── .idea
├── out
│   ├── artifacts
│   └── initsql
├── sql
├── src
│   └── com.ems
│       ├── bean
│       │   ├── Dept
│       │   ├── Emp
│       │   └── User
│       ├── dao
│       │   ├── DeptDao
│       │   ├── EmpDao
│       │   └── UserDao
│       ├── filter
│       │   └── LoginFilter
│       ├── service
│       │   ├── DeptService
│       │   ├── EmpService
│       │   └── UserService
│       ├── servlet
│       │   ├── DeptServlet
│       │   ├── EmpServlet
│       │   ├── LoginServlet
│       │   ├── LogoutServlet
│       │   └── UserServlet
│       ├── util
│       ├── c3p0-config.xml
│       └── Main
├── web
│   ├── jsp
│   │   ├── dept
│   │   │   ├── add.jsp
│   │   │   ├── edit.jsp
│   │   │   └── list.jsp
│   │   ├── emp
│   │   │   ├── add.jsp
│   │   │   ├── edit.jsp
│   │   │   └── list.jsp
│   │   ├── user
│   │   │   ├── add.jsp
│   │   │   ├── edit.jsp
│   │   │   └── list.jsp
│   │   ├── login.jsp
│   │   └── welcome.jsp
│   ├── WEB-INF
│   │   ├── web.xml
│   │   ├── classes
│   │   └── lib
│   ├── webx.xml
│   └── index.jsp
├── .gitignore
├── ems_wzj.html
└── 外部库
    └── <1.8> D:\Java\jdk1.8.0_201

公网ip及其密码

项目 IP地址或密码
公网ip地址 47.94.151.78
CenotOs root密码
云端MySQL root密码