[适合初学者]javaweb工程之人力资源表的CRUD(简易详细版)

欢迎转载,转载请注明原文来源!

 

一、项目结构简述

       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)

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
项目中使用的技术: 1、前端:jsp、css、javascript、jQuery(js框架)、jquery.form.js、HTML富文本编辑器、        My97时间控件(添加员工)2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等3、数据库:Mysql4、服务器:Tomcat项目中涉及的功能: 1、项目以及数据库搭建2、用户异步登录、退出3、拦截器功能实现以及整合动态代理4、公告模块的增加、修改、删除、查询以及预览功能实现、文件异步上传5、文档模块的增加、修改、删除、查询以及文档的上传下载6、员工信息的增加、修改、删除、查询以及员工头像异步上传、员工信息导出至Excel文件7、自定义分页标签实现(24种样式随意切换)8、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好,2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值