欢迎转载,转载请注明原文来源!
一、项目结构简述
1.结构简图:
2.准备工作:
(1)安装jdk-8u271 安装教程网址:https://editor.csdn.net/md/?articleId=109662074
(2)安装eclipse2020 安装教程网址:https://editor.csdn.net/md/?articleId=109667675
(3)安装Tomcat8 下载网址:https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.60/bin/apache-tomcat-8.5.60-windows-x64.zip
(4)安装jstl标签库 下载网址:http://archive.apache.org/dist/jakarta/taglibs/standard/source/jakarta-taglibs-standard-1.1.2-src.zip
(4)安装数据库mysql和操作软件Navicat 安装教程网址:https://editor.csdn.net/md/?articleId=109675469
(4)下载数据库连接包mysql-connector-java-8.0.14.jar 百度搜索下载
最后附所遇见问题汇总及解决方法
二、项目搭建与配置
1.创建项目:

2.配置项目到Tomcat服务器中(如果在创建项目时没有配置,请参照如下操作),完成这些剩下的就是编写代码了
三、简易版代码(servlet代码写在jsp中,有助于复习jsp部分内容)
1.com.study.pojo包的实体类Employee.java:
package com.study.pojo;
import java.sql.Date;
public class Employee {
private int id;
private String name;
private int age;
private String job;
private Date hireDate;
private double salary;
private String deptName;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
2.com.study.dao包的数据获取类EmployeeDao.java:
package com.study.dao;
import com.study.pojo.Employee;
import com.study.utils.GetConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class EmployeeDao {
/**
* 鏌ヨ鍛樺伐鍏ㄩ儴淇℃伅
* @param sql
* @return
*/
public ArrayList<Employee> queryEmployeeList(String sql) throws SQLException {
//创建list对象集合
ArrayList<Employee> list=new ArrayList<>();
//连接数据库
Connection con=GetConnection.getConnection();
//执行sql语句
PreparedStatement preparedStatement = con.prepareStatement(sql);
//获得结果
ResultSet resultSet = preparedStatement.executeQuery();
//读取数据,并把数据封装到对象中,对象添加到集合中
while (resultSet.next()){
Employee employee=new Employee();
employee.setId(resultSet.getInt("id"));
employee.setName(resultSet.getString("name"));
employee.setAge(resultSet.getInt("age"));
employee.setJob(resultSet.getString("job"));
employee.setHireDate(resultSet.getDate("hireDate"));
employee.setSalary(resultSet.getInt("salary"));
employee.setDeptName(resultSet.getString("deptName"));
list.add(employee);
}
//关闭资源
resultSet.close();
preparedStatement.close();
con.close();
return list;
}
/**
* 娣诲姞銆佷慨鏀瑰拰鍒犻櫎
* @param sql
* @return
* @throws SQLException
*/
public boolean updateEmployee(String sql) throws SQLException {
Connection con=GetConnection.getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql);
int row = preparedStatement.executeUpdate();
preparedStatement.close();
con.close();
return row > 0 ? true : false;
}
}
3.com.study.service包的业务类EmployeeService.java:
package com.study.service;
import com.study.dao.EmployeeDao;
import com.study.pojo.Employee;
import com.study.utils.Condition;
import java.sql.SQLException;
import java.util.ArrayList;
public class EmployeeService {
EmployeeDao employeeDao=new EmployeeDao();
//查询职工
public ArrayList<Employee> queryEmployeeList(Condition cd){
ArrayList<Employee> list=new ArrayList<>();
//查询语句
String sql="select * from employee where 1=1";
if(cd.id !=null && cd.id !=""){
sql +=" and id="+cd.id;
}
if(cd.name !=null && cd.name !=""){
sql +=" and name='"+cd.name+"'";
}
if(cd.deptName !=null && cd.deptName !=""){
sql +=" and deptName='"+cd.deptName+"'";
}
try {
list=employeeDao.queryEmployeeList(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//查询单个职工
public Employee queryEmployee(Employee employee){
ArrayList<Employee> list=new ArrayList<>();
String sql="select * from employee where id="+employee.getId();
try {
list =employeeDao.queryEmployeeList(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return list.size() > 0 ? list.get(0) : null;
}
//添加职工
public boolean addEmployee(Employee employee){
String sql="insert into employee(id,name,age,job,hireDate,salary,deptName) values(null,'"+employee.getName()+"',"+employee.getAge()+",'"+employee.getJob()+"','"+employee.getHireDate()+"',"+employee.getSalary()+",'"+employee.getDeptName()+"')";
try {
return employeeDao.updateEmployee(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
//修改职工
public boolean updateEmployee(Employee employee){
String sql="update employee set name='"+employee.getName()+"',age="+employee.getAge()+",job='"+employee.getJob()+"',hireDate='"+employee.getHireDate()+"',salary="+employee.getSalary()+",deptName='"+employee.getDeptName()+"'where id="+employee.getId();
try {
return employeeDao.updateEmployee(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
//删除职工
public boolean deleteEmployee(Employee employee){
String sql="delete from employee where id="+employee.getId();
try {
return employeeDao.updateEmployee(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
4.com.study.utils包的工具类:
package com.study.utils;
//查询条件封装类
public class Condition {
public String id;
public String name;
public String deptName;
public Condition(String id, String name, String deptName) {
this.id = id;
this.name = name;
this.deptName = deptName;
}
}
package com.study.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库连接工具类
*/
public class GetConnection {
private static String url="jdbc:mysql://localhost:3306/emps?useSSL=false&serverTimezone=UTC";
private static String user="root";
private static String password="YCF500095";
public static Connection getConnection(){
Connection con=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("鏁版嵁搴撹繛鎺ュけ璐ワ紒");
}
return con;
}
}
5.jsp部分:
<%@ page import="com.study.service.EmployeeService" %>
<%@ page import="com.study.utils.Condition" %>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--jsp的脚本应用实例:用于编辑具体业务逻辑 --%>
<%
EmployeeService es=new EmployeeService();
//获取查询条件参数
String cd_id = request.getParameter("id");
String cd_name = request.getParameter("name");
String cd_deptName = request.getParameter("deptName");
//封装查询条件
Condition cd=new Condition(cd_id,cd_name,cd_deptName);
//调用查询业务,获取查询结果
ArrayList<Employee> empList = es.queryEmployeeList(cd);
//将结果保存到request作用域中
request.setAttribute("list",empList);
%>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_index.jsp">首页</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_addPage.jsp">添加员工</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_other.jsp">其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<!--条件查询-->
<br /><form action="http://localhost:8080/empsys1/emp_index.jsp" method="get" style="width: 100%;">
条件查询: 员工id <input type="number" style="width: 100px;" name="id"/>
姓名 <input type="text" style="width: 100px;" name="name"/>
部门 <select style="width: 160px; height: 25px;" name="deptName">
<option value="">所有</option>
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select>
<input type="submit" value="查询员工"/>
<input type="reset" value="清空"/>
</form><br />
<!--数据显示-->
<table border="1px" style="width:80%" align="center" valign="center">
<tr>
<td width="5%">员工id</td>
<td width="10%">姓名</td>
<td width="5%">年龄</td>
<td width="15%">职位</td>
<td width="20%">入职日期</td>
<td width="10%">薪资</td>
<td width="15%">部门</td>
<td width="20%">操作</td>
</tr>
<%--使用foreach标签展现列表数据 --%>
<c:forEach items="${requestScope.list}" var="emp">
<tr>
<%--EL表达式应用范例 --%>
<td>${emp.id}</td>
<td>${emp.name}</td>
<td>${emp.age}</td>
<td>${emp.job}</td>
<td>${emp.hireDate}</td>
<td>${emp.salary}</td>
<td>${emp.deptName}</td>
<%--当修改或删除时挈带参数ID,以便获取要修改或删除的数据 --%>
<td><a href="http://localhost:8080/empsys1/emp_update.jsp?id=${emp.id}">修改</a> <a href="http://localhost:8080/empsys1/emp_del.jsp?id=${emp.id}">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="com.study.service.EmployeeService" %>
<%@ page import="java.sql.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工信息管理--添加员工信息</title>
</head>
<body>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_index.jsp">首页</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_addPage.jsp">添加员工</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_other.jsp">其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<%--主要是展示添加员工信息 --%>
<!--增加表单-->
<form action="http://127.0.0.1:8080/empsys1/emp_add.jsp" method="get" style="margin-left: 50px; margin-top: 30px;">
姓名:<input type="text" name="name"/><br /><br />
年龄:<input type="number" name="age"/><br /><br />
职位:<input type="text" name="job"/><br /><br />
部门:<select style="width: 160px; height: 25px;" name="deptName">
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select><br /><br />
入职日期:<input type="date" name="hireDate"/><br /><br />
工资:<input type="number" name="salary"/><br /><br />
<input type="submit" value="确定添加"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="com.study.service.EmployeeService" %>
<%@ page import="java.sql.Date" %><%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 16:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>添加提交处理页面</title>
</head>
<body>
<%--处理添加员工信息页面 --%>
<%
EmployeeService es=new EmployeeService();
//获取添加员工的信息
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String job = request.getParameter("job");
Date hireDate = Date.valueOf(request.getParameter("hireDate"));
double salary = Double.parseDouble(request.getParameter("salary"));
String deptName = request.getParameter("deptName");
//封装添加员工的信息
Employee employee=new Employee();
employee.setName(name);
employee.setAge(age);
employee.setJob(job);
employee.setHireDate(hireDate);
employee.setSalary(salary);
employee.setDeptName(deptName);
//调用service方法,完成添加
boolean b = es.addEmployee(employee);
if(b){
out.print("<h3>添加成功!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_index.jsp'>点击跳转首页</a>");
}else{
out.print("<h3>添加失败!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_addPage.jsp'>点击跳转首页</a>");
}
%>
</body>
</html>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="com.study.service.EmployeeService" %>
<%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 15:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>员工信息管理--修改员工信息</title>
</head>
<body>
<%--主要是显示员工信息页面 --%>
<%
EmployeeService es=new EmployeeService();
String id1 = request.getParameter("id");
int id2=0;
if(id1 !=null && id1 !=""){//防止空值程序中断
id2 = Integer.parseInt(id1);
}
Employee employee1=new Employee();
employee1.setId(id2);
Employee employee = es.queryEmployee(employee1);
request.setAttribute("emps",employee);
%>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_index.jsp">首页</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_addPage.jsp">添加员工</a></td>
<td width="10%"><a href="http://localhost:8080/empsys1/emp_other.jsp">其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<!--修改表单-->
<form action="http://localhost:8080/empsys1/emp_up.jsp" method="get" style="margin-left: 50px; margin-top: 30px;">
<input type="text" hidden="true" name="id" value="${requestScope.emps.id}"/><br /><br />
姓名:<input type="text" name="name" value="${requestScope.emps.name}"/><br /><br />
年龄:<input type="number" name="age" value="${requestScope.emps.age}"/><br /><br />
职位:<input type="text" name="job" value="${requestScope.emps.job}"/><br /><br />
部门:<select style="width: 160px; height: 25px;" name="deptName" value="${requestScope.emps.deptName}">
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select><br /><br />
入职日期:<input type="date" name="hireDate" value="${requestScope.emps.hireDate}"/><br /><br />
工资:<input type="number" name="salary" value="${requestScope.emps.salary}"/><br /><br />
<input type="submit" value="确定修改"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="com.study.service.EmployeeService" %>
<%@ page import="java.sql.Date" %><%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 16:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>修改提交处理页面</title>
</head>
<body>
<%--修改员工信息的处理业务页面 --%>
<%
EmployeeService es=new EmployeeService();
//获取修改员工信息
String id1 = request.getParameter("id");
int id=0;
if(id1 !=null && id1 !=""){//防止空值程序中断
id = Integer.parseInt(id1);
}
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String job = request.getParameter("job");
Date hireDate = Date.valueOf(request.getParameter("hireDate"));
double salary = Double.parseDouble(request.getParameter("salary"));
String deptName = request.getParameter("deptName");
//封装信息到对象中
Employee employee=new Employee();
employee.setId(id);
employee.setName(name);
employee.setAge(age);
employee.setJob(job);
employee.setHireDate(hireDate);
employee.setSalary(salary);
employee.setDeptName(deptName);
//调用service方法,执行结果返回
boolean b = es.updateEmployee(employee);
if(b){
out.print("<h3>修改成功!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_index.jsp'>点击跳转首页</a>");
}else{
out.print("<h3>修改失败!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_update.jsp'>点击跳转首页</a>");
}
%>
</body>
</html>
<%@ page import="com.study.pojo.Employee" %>
<%@ page import="com.study.service.EmployeeService" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工信息管理--删除员工信息</title>
</head>
<body>
<%
EmployeeService es=new EmployeeService();
int id = Integer.parseInt(request.getParameter("id"));
Employee employee=new Employee();
employee.setId(id);
boolean b = es.deleteEmployee(employee);
if(b){
out.print("<h3>删除成功!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_index.jsp'>点击跳转首页</a>");
}else{
out.print("<h3>删除失败!</h3>");
out.print("<a href='http://localhost:8080/empsys1/emp_index.jsp'>点击跳转首页</a>");
}
%>
</body>
</html>
视频演示结果:
人力资源简易web工程演示.mp4
四、优化版代码(创建web包写servlet代码)
1.com.study.pojo部分:和上面一样,没有改变
2.com.study.web部分:
package com.study.web;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@WebServlet(name = "BaseServlet")
public class BaseServlet extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
try {
req.setCharacterEncoding("utf-8");
String method = req.getParameter("method");
Class clazz=this.getClass();
Method method1 = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
method1.invoke(this,req,res);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
package com.study.web;
import com.study.pojo.Employee;
import com.study.service.EmployeeService;
import com.study.utils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@WebServlet(name = "EmployeeServlet",urlPatterns = "/empsys")
public class EmployeeServlet extends BaseServlet {
public void getEmployeeList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Map<String, String[]> parameterMap = request.getParameterMap();
Employee employee=new Employee();
BeanUtils.populate(employee,parameterMap);
EmployeeService employeeService=new EmployeeService();
List<Employee> list = employeeService.queryEmployeeByCondition(employee);
if(list.size()>0){
request.setAttribute("emps",list);
}
request.getRequestDispatcher("/emp_list.jsp").forward(request,response);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void addEmployee(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Map<String, String[]> parameterMap = request.getParameterMap();
Employee employee=new Employee();
BeanUtils.populate(employee,parameterMap);
EmployeeService employeeService=new EmployeeService();
boolean addEmployee = employeeService.addEmployee(employee);
if(addEmployee){
response.sendRedirect(request.getContextPath()+"/empsys?method=getEmployeeList");
}else{
response.sendRedirect(request.getContextPath()+"/errorMessage.jsp");
}
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateEmployee(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//获取前端参数
Map<String, String[]> parameterMap = request.getParameterMap();
//创建封装对象
Employee employee=new Employee();
//把参数封装到对象中
BeanUtils.populate(employee,parameterMap);
//调用service方法
EmployeeService employeeService=new EmployeeService();
boolean updateEmployee = employeeService.updateEmployee(employee);
//结果处理
if(updateEmployee){
response.sendRedirect(request.getContextPath()+"/empsys?method=getEmployeeList");
}else{
response.sendRedirect(request.getContextPath()+"/errorMessage.jsp");
}
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteEmployee(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Map<String, String[]> parameterMap = request.getParameterMap();
Employee employee=new Employee();
BeanUtils.populate(employee,parameterMap);
EmployeeService employeeService=new EmployeeService();
boolean deleteEmployee = employeeService.deleteEmployee(employee);
if(deleteEmployee){
response.sendRedirect(request.getContextPath()+"/empsys?method=getEmployeeList");
}else{
response.sendRedirect(request.getContextPath()+"/errorMessage.jsp");
}
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.com.study.service部分:
package com.study.service;
import com.study.dao.EmployeeDao;
import com.study.pojo.Condition;
import com.study.pojo.Employee;
import java.sql.SQLException;
import java.util.List;
public class EmployeeService {
EmployeeDao employeeDao=new EmployeeDao();
//根据条件获取员工列表信息
public List queryEmployeeByCondition(Employee employee) throws SQLException {
return employeeDao.queryEmployeeByCondition(employee);
}
//添加员工信息
public boolean addEmployee(Employee employee) throws SQLException {
return employeeDao.addEmployee(employee);
}
//修改员工信息
public boolean updateEmployee(Employee employee) throws SQLException {
return employeeDao.updateEmployee(employee);
}
//删除员工信息
public boolean deleteEmployee(Employee employee) throws SQLException {
return employeeDao.deleteEmployee(employee);
}
}
4.com.study.dao部分:
package com.study.dao;
import com.study.pojo.Condition;
import com.study.pojo.Employee;
import com.study.utils.BeanHandler;
import com.study.utils.BeanListHandler;
import com.study.utils.DataSources;
import com.study.utils.QueryRunner;
import java.sql.SQLException;
import java.util.List;
public class EmployeeDao {
/**
* 鏍规嵁鏉′欢鏌ヨ鍛樺伐鍏ㄩ儴淇℃伅
*
* @param condition
* @return List<Employee>
*/
@SuppressWarnings("unchecked")
public List<Employee> queryEmployeeByCondition(Employee employee) throws SQLException {
DataSources dataSources = new DataSources();
QueryRunner queryRunner = new QueryRunner(dataSources);
List<Employee> list = null;
// 榛樿鏌ヨ鎵?鏈?
String sql = "select * from employee";
if (employee.getId() != 0) {
if (employee.getName() != null && employee.getName() != "") {
if (employee.getDeptName() != null && employee.getDeptName() != "") {
sql += " where id=? and name=? and deptName=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getId(),
employee.getName(), employee.getDeptName());
} else {
sql += " where id=? and name=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getId(),
employee.getName());
}
} else {
if (employee.getDeptName() != null && employee.getDeptName() != "") {
sql += " where id=? and deptName=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getId(),employee.getDeptName());
} else {
sql += " where id=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getId());
}
}
} else {
if (employee.getName() != null && employee.getName() != "") {
if (employee.getDeptName() != null && employee.getDeptName() != "") {
sql += " where name=? and deptName=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getName(),employee.getDeptName());
} else {
sql += " where name=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), employee.getName());
}
} else {
if (employee.getDeptName() != null && employee.getDeptName() != "") {
sql += " where deptName=?";
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class),employee.getDeptName());
}else {
list = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class));
}
}
}
System.out.println("sql = "+sql);
return list;
}
public boolean addEmployee(Employee employee) throws SQLException {
DataSources dataSources = new DataSources();
QueryRunner queryRunner = new QueryRunner(dataSources);
String sql = "insert into employee values(null,?,?,?,?,?,?)";
int row = queryRunner.update(sql, employee.getName(), employee.getAge(), employee.getJob(),
employee.getHireDate(), employee.getSalary(), employee.getDeptName());
return row > 0 ? true : false;
}
public boolean updateEmployee(Employee employee) throws SQLException {
DataSources dataSources = new DataSources();
QueryRunner queryRunner = new QueryRunner(dataSources);
String sql = "update employee set name=?,age=?,job=?,hireDate=?,salary=?,deptName=? where id=?";
int row = queryRunner.update(sql, employee.getName(), employee.getAge(), employee.getJob(),
employee.getHireDate(), employee.getSalary(), employee.getDeptName(), employee.getId());
return row > 0 ? true : false;
}
public boolean deleteEmployee(Employee employee) throws SQLException {
DataSources dataSources = new DataSources();
QueryRunner queryRunner = new QueryRunner(dataSources);
String sql = "delete from employee where id=?";
int row = queryRunner.update(sql, employee.getId());
return row > 0 ? true : false;
}
}
5.com.study.utils部分:db.properties文件放置src目录之下;更详细的工具类请移步相关内容:https://mp.csdn.net/editor/html/110188286
//db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/emps?serverTimezone=GMT&useSSL=false
name=root
password=YCF500095
package com.study.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
//import java.net.URL;
public class DataSources {
private static String driver;
private static String URL;
private static String USER;
private static String PASSWORD;
static {
try {
ClassLoader classLoader=DataSources.class.getClassLoader();
//URL resources=classLoader.getResource ("db.properties");
InputStream resources=classLoader.getResourceAsStream("db.properties");
Properties properties=new Properties();
properties.load(resources);
//properties.load (new FileReader (resources.getPath ()));
driver=properties.getProperty("driver");
URL=properties.getProperty("url");
USER=properties.getProperty("name");
PASSWORD=properties.getProperty("password");
//System.out.println(driver+"\t"+URL+"\t"+USER+"\t"+PASSWORD);
} catch (IOException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
Connection con=null;
try {
Class.forName(driver);
con=DriverManager.getConnection(URL,USER,PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
package com.study.utils;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public class QueryRunner {
DataSources dataSources;
public QueryRunner(DataSources dataSources) {
this.dataSources = dataSources;
}
@SuppressWarnings({"rawtypes", "unchecked"})
public List query(String sql, BeanListHandler beanListHandler, Object... params) throws SQLException {
List list = new ArrayList();
try {
Connection con = dataSources.getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject((i + 1), params[i]);
System.out.println(params[i]);
}
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
list.add(beanListHandler.reflectMethod(resultSet));
}
resultSet.close();
preparedStatement.close();
con.close();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return list;
}
public Object query(String sql, BeanHandler beanHandler, Object... params) throws SQLException{
Object obj=null;
try {
Connection con = dataSources.getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject((i + 1), params[i]);
}
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
obj=beanHandler.reflectMethod(resultSet);
}
resultSet.close();
preparedStatement.close();
con.close();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return obj;
}
public int update(String sql,Object...params) {
int row=0;
try {
Connection con=dataSources.getConnection();
PreparedStatement preparedStatement=con.prepareStatement(sql);
for(int i=0;i<params.length;i++) {
preparedStatement.setObject((i+1), params[i]);
}
row =preparedStatement.executeUpdate();
preparedStatement.close();
//con.close();
}catch (SQLException e) {
e.printStackTrace();
}
return row;
}
}
package com.study.utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class BeanUtils{
public static void populate(Object obj,Map<String,String[]> parameterMap) throws InvocationTargetException, IllegalAccessException{
Class cls = obj.getClass();
Method[] mt = cls.getDeclaredMethods();
Set<String> keySet = parameterMap.keySet();
for (Method e : mt) {
if (e.getReturnType().equals(Void.TYPE)) {
String str = getMethodParameterName(e.getName());
if (str != null) {
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String key = it.next();
String[] value = parameterMap.get(key);
if (key.equals(str)) {
if(e.getParameterTypes()[0].getTypeName().equals("java.lang.String")) {
e.invoke(obj, value[0]);
}else if(e.getParameterTypes()[0].getTypeName().equals("java.sql.Date")){
e.invoke(obj, Date.valueOf(value[0]));
}else if(e.getParameterTypes()[0].getTypeName().equals("java.lang.Double")){
if(value[0] !="" && value[0] !=null) {
e.invoke(obj, Double.parseDouble(value[0]));
}
}else {
if(value[0] !="" && value[0] !=null) {
e.invoke(obj, Integer.parseInt(value[0]));
}
}
break;
}
}
}
}
}
}
public static String getMethodParameterName(String ss) {
if(ss.substring(0,3).equals("set")) {
return ss.substring(3, ss.length()).substring(0, 1).toLowerCase() + ss.substring(4, ss.length());
}
return null;
}
}
package com.study.utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BeanListHandler<T>{
@SuppressWarnings("rawtype")
Class obj;
public BeanListHandler(Class obj){
this.obj=obj;
}
public T reflectMethod(ResultSet resultSet) throws NoSuchMethodException, IllegalAccessException, InstantiationException, SQLException, InvocationTargetException {
T t=(T) obj.newInstance();
Method[] mt=obj.getDeclaredMethods();
for(Method e:mt) {
if(e.getReturnType().equals(Void.TYPE)) {
Method met=obj.getDeclaredMethod(e.getName(), e.getParameterTypes()[0]);
String str=this.getMethodParameterName(e.getName());
if(str !=null) {
if(e.getParameterTypes()[0].getTypeName().equals("java.util.Date")){
met.invoke(t, resultSet.getDate(str));
}else if(e.getParameterTypes()[0].getTypeName().equals("java.sql.Date")){
met.invoke(t, resultSet.getDate(str));
}else{
met.invoke(t, resultSet.getObject(str, e.getParameterTypes()[0]));
}
}
}
}
return t;
}
public String getMethodParameterName(String ss) {
if(ss.substring(0,3).equals("set")) {
return ss.substring(3, ss.length()).substring(0, 1).toLowerCase() + ss.substring(4, ss.length());
}
return null;
}
}
6.jsp部分:
<%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 22:26
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工信息列表</title>
</head>
<body>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="${pageContext.request.contextPath}/empsys?method=getEmployeeList">首页</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_add.jsp" >添加员工</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_other.jsp" >其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<!--条件查询-->
<br/>
<form action="empsys" method="post" style="width: 100%;">
<input hidden="true" name="method" value="getEmployeeList"/>
条件查询: 员工id <input type="text" style="width: 100px;" name="id"/>
姓名 <input type="text" style="width: 100px;" name="name"/>
部门 <select style="width: 160px; height: 25px;" name="deptName">
<option value="">所有</option>
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select>
<input type="submit" value="查询员工"/>
<input type="reset" value="清空"/>
</form><br />
<!--数据显示-->
<table border="1px" style="width:80%" align="center" valign="center">
<tr>
<td width="5%">员工id</td>
<td width="10%">姓名</td>
<td width="5%">年龄</td>
<td width="15%">职位</td>
<td width="20%">入职日期</td>
<td width="10%">薪资</td>
<td width="15%">部门</td>
<td width="20%">操作</td>
</tr>
<c:forEach items="${emps}" var="emp">
<tr>
<td>${emp.id}</td>
<td>${emp.name}</td>
<td>${emp.age}</td>
<td>${emp.job}</td>
<td>${emp.hireDate}</td>
<td>${emp.salary}</td>
<td>${emp.deptName}</td>
<td>
<a href="http://127.0.0.1:8080/empsys2/emp_update.jsp?id=${emp.id}&name=${emp.name}&age=${emp.age}&job=${emp.job}&hireDate=${emp.hireDate}&salary=${emp.salary}&deptName=${emp.deptName}">修改</a>
<a href="${pageContext.request.contextPath}/empsys?method=deleteEmployee&id=${emp.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
<div>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>员工信息管理--添加员工信息</title>
</head>
<body>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="${pageContext.request.contextPath}/empsys?method=getEmployeeList">首页</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_add.jsp">添加员工</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_other.jsp">其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<!--增加表单-->
<form action="empsys" method="post" style="margin-left: 50px; margin-top: 30px;">
<input hidden="true" name="method" value="addEmployee">
姓名:<input type="text" name="name"/><br /><br />
年龄:<input type="number" name="age"/><br /><br />
职位:<input type="text" name="job"/><br /><br />
部门:<select style="width: 160px; height: 25px;" name="deptName">
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select><br /><br />
入职日期:<input type="date" name="hireDate"/><br /><br />
工资:<input type="number" name="salary"/><br /><br />
<input type="submit" value="确定添加"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 15:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>员工信息管理--修改员工信息</title>
</head>
<body>
<!--头部-->
<div style="background-color: cornflowerblue; color: white; width: 100%;height:80px;">
<h1 style="line-height: 80px; margin-left:30px;">51人力资源系统</h1>
</div>
<!--菜单-->
<table style="border:1px solid cornflowerblue ; width: 100%; ">
<tr>
<td width="10%"><a href="${pageContext.request.contextPath}/empsys?method=getEmployeeList">首页</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_add.jsp">添加员工</a></td>
<td width="10%"><a href="${pageContext.request.contextPath}/emp_other.jsp">其他</a></td>
<td></td>
<td></td>
<td width="50%"></td>
</tr>
</table>
<!--修改表单-->
<form action="empsys" method="post" style="margin-left: 50px; margin-top: 30px;">
<input hidden="true" name="method" value="updateEmployee">
<input type="text" hidden="true" name="id" value="${param.id}"/><br /><br />
姓名:<input type="text" name="name" value="${param.name}"/><br /><br />
年龄:<input type="number" name="age" value="${param.age}"/><br /><br />
职位:<input type="text" name="job" value="${param.job}"/><br /><br />
部门:<select style="width: 160px; height: 25px;" name="deptName" value="${param.deptName}">
<option value="董事会">董事会</option>
<option value="销售部">销售部</option>
<option value="研发部">研发部</option>
<option value="行政部">行政部</option>
<option value="财务部">财务部</option>
</select><br /><br />
入职日期:<input type="date" name="hireDate" value="${param.hireDate}"/><br /><br />
工资:<input type="number" name="salary" value="${param.salary}"/><br /><br />
<input type="submit" value="确定修改"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 22:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>建设中的网页</title>
</head>
<body>
网页正在建设中......
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: shinelon
Date: 2020/12/2
Time: 15:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>其它</title>
</head>
<body>
操作失败!
</body>
</html>
五、问题总汇(所有前提应该是:检查所有代码有没有问题,比如servlet中的urlPattern="/......"有没有少了"/"之类的)
1.创建工程阶段:
5.1.1 找不到创建web工程的Dynamic Web Project
(1)创建方法:https://blog.csdn.net/xukaiup/article/details/82953259
(2)查看eclipse版本方法:https://blog.csdn.net/duqian94/article/details/52386076/
5.1.2 运行Tomcat发现运行不了(首先检查版本匹配问题,主要是jdk和Tomcat以及eclipse版本兼容等问题)
(1)web.xml文件误删了
(2)访问时应该加上项目名,如,http://localhost:8080/empsys/emp_index.jsp;同时对应的jsp文件中应该也要加上
(3)网上查阅修改了了Tomcat的overview下的一项,链接:https://blog.csdn.net/m0_37482190/article/details/86610039
2.执行阶段:
5.2.1 给工程的lib包添加对应使用的Tomcat安装包下lib包下的jsp-api.jar就没有报错了
5.2.2 运行报错:我更换了Tomcat低一点版本8.5.42,其次由于前面多次更换不同版本的Tomcat,在本工程的severs(就在eclipse项目下面可以看到)的server.xml中的最后一个context重复部分删除即可
5.2.3 运行报错:我更换了Tomcat低一点版本8.5.42,再次运行,发现可以
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:483)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:832)