基于 Servlet、JSP 的员工管理系统的完整实现方案
源代码要求下面5个地方个性化:
- 数据表名 _姓名字母缩写
- jsp文件名 xxx_wzj.jsp
- 软件包名 cn.wzj.
- 用户表第一条数据个性化,密码不变
- 登录和主界面写上个人的姓名
① 数据库脚本
-- 创建数据库
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&characterEncoding=UTF-8&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密码 |