功能点
-
整体页面效果无要求,做出以下功能即可
-
登录&登出(10分)
-
使用管理员登录
-
登录成功跳转首页,展示所有员工信息
-
右上角展示登录后的管理员真实姓名
-
登录失败,跳转登录页面重新登录,并给出红色错误提示
-
点击右上角退出按钮直接跳转登录页面
-
-
主页分页展现全部员工信息(10分)
-
==除基本信息外要展示员工对应的部门名称==
-
分页展示,每页展示3条数据
-
第一页和最后一页要做处理,不能出现逻辑bug
-
-
模糊搜索(10分)
-
上方设置搜索框和搜索按钮
-
模糊搜索只能根据用户名搜索
-
-
前端页面(10分)
-
主页设置框架标签,以下添加页面,更新页面应该在主页嵌套展现
-
-
添加员工(10分)
-
员工信息列表上方,设置添加按钮
-
点击添加按钮,跳转添加页面
-
页面填写员工的基本信息,==部门信息需要以下拉框展示,且下拉框中部门信息是从后台查询得出,而不是固定写死==
-
执行添加,重新发请求查询最新员工信息
-
-
更新员工信息(10分)
-
点击员工信息后的更新按钮,跳转更新页面并回显数据
-
注意回显时,==回显部门名称要是员工所在的部门名称==
-
输入完信息后,执行更新,跳转至首页展现最新员工信息
-
-
删除员工信息(10分)
-
点击删除按钮,弹出确认框,单击取消不删除
-
单击删除,删除员工信息,并展示最新的员工数据
-
-
代码规范(10分)
-
包结构
-
类名
-
请求路径
-
注释
-
这个是员工Dao存方法
package com.pst.dao;
import com.pst.entity.Emp;
import com.pst.utlis.BaseDao;
import java.util.List;
public class EmpDao extends BaseDao {
public List<Emp> selectAllEmp (Object[] objs){
String sql = "select * from emp limit ?,?";
List<Emp> query = super.query(sql, objs, Emp.class);
return query;
}
//添加数据到数据库
public int addEmp(Object[] objs){
String sql = "insert into emp (name,age,sex,salary,department) values(?,?,?,?,?)";
return super.update(sql,objs);
}
//删除数据
public int delEmp(Object[] objs){
String sql = "delete from emp where id = ?";
return super.update(sql,objs);
}
//查询一条数据的方法
public List<Emp> findServletOne (Object[] objs){
String sql = "select * from emp where id = ?";
List<Emp> query = super.query(sql, objs, Emp.class);
return query;
}
//修改一条数据
public int updataEmp(Object[] objs){
String sql = "update emp set name=?,age=?,sex=?,salary=?,department=? where id = ?";
return super.update(sql,objs);
}
public int selectAllSize(){
String sql = "select count(*) from emp";
int i = super.querySize(sql);
return i;
}
public List<Emp> selectName(Object[] objs){
String sql = "select * from emp where name like concat('%',?,'%')";
List<Emp> query = super.query(sql, objs,Emp.class);
return query;
}
}
这个是管理员的Dao
package com.pst.dao;
import com.pst.entity.EmpManager;
import com.pst.utlis.BaseDao;
import java.util.List;
public class EmpManagerDao extends BaseDao {
public List<EmpManager> selectManager(Object[] objs){
String sql = "select * from emp_manager where name=? and password = ?";
List<EmpManager> query = super.query(sql, objs, EmpManager.class);
return query;
}
}
这个是员工实体类
package com.pst.entity;
public class Emp {
private Integer id;
private String name;
private Integer age;
private String sex;
private Double salary;
private String department;
public Emp() {
}
public Emp(Integer id, String name, Integer age, String sex, Double salary, String department) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
this.department = department;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
这个是管理员实体类
package com.pst.entity;
public class EmpManager {
private Integer id;
private String name;
private String password;
public EmpManager() {
}
public EmpManager(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "EmpManager{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
这个是添加员工的Servlet
package com.pst.servlet;
import com.pst.dao.EmpDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "AddEmpServlet", value = "/AddEmpServlet")
public class AddEmpServlet extends HttpServlet {
EmpDao empDao = new EmpDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String age = request.getParameter("age");
String sex = request.getParameter("sex");
String salary = request.getParameter("salary");
String department = request.getParameter("department");
Object[] objs = {name,age,sex,salary,department};
int i = empDao.addEmp(objs);
System.out.println(i);
if (i == 1){
response.sendRedirect("IndexServlet");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个删除员工的Servlet
package com.pst.servlet;
import com.pst.dao.EmpDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "DeleteServlet", value = "/DeleteServlet")
public class DeletServlet extends HttpServlet {
EmpDao empDao = new EmpDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
System.out.println(id);
Object[] objs = {id};
//连接
int i = empDao.delEmp(objs);
if (i==1){
response.sendRedirect("IndexServlet");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个是登录的 Servlet
package com.pst.servlet;
import com.pst.dao.EmpManagerDao;
import com.pst.entity.EmpManager;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
EmpManagerDao empManagerDao = new EmpManagerDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
Object[] objs = {name,pwd};
List<EmpManager> empManagers = empManagerDao.selectManager(objs);
System.out.println(empManagers);
if (empManagers!=null){
EmpManager empManager = empManagers.get(0);
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60*60);
session.setAttribute("name",empManager.getName());
response.sendRedirect("IndexServlet");
}else {
PrintWriter writer = response.getWriter();
writer.println("<script style='color:red'>alert('用户名或者密码错误');window.location.href='login.html'</script>");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个是管理员登出Servlet
package com.pst.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "LogoutServlet", value = "/LogoutServlet")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if (session!= null){
session.invalidate();
}
response.sendRedirect("login.html");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个是搜索框模糊查询的Servlet
package com.pst.servlet;
import com.pst.dao.EmpDao;
import com.pst.entity.Emp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
@WebServlet(name = "sou suo", value = "/sou suo")
public class sousuo extends HttpServlet {
EmpDao empDao = new EmpDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
System.out.println(name);
Object[] objs = {name};
List<Emp> emps = empDao.selectName(objs);
PrintWriter writer = response.getWriter();
writer.print("<table border='4px' bordercolor='pink' width='700px' height='400'>");
writer.print("<tr>");
writer.print("<th>编号</th>");
writer.print("<th>姓名</th>");
writer.print("<th>年龄</th>");
writer.print("<th>性别</th>");
writer.print("<th>薪资</th>");
writer.print("<th>部门</th>");
writer.print("</tr>");
for (Emp emp : emps) {
writer.print("<tr align='center'>");
writer.print("<td>"+emp.getId()+"</td>");
writer.print("<td>"+emp.getName()+"</td>");
writer.print("<td>"+emp.getAge()+"</td>");
writer.print("<td>"+emp.getSex()+"</td>");
writer.print("<td>"+emp.getSalary()+"</td>");
writer.print("<td>"+emp.getDepartment()+"</td>");
writer.print("</tr>");
}
writer.print("</table>");
writer.print("</div>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
这个是更改员工 更新数据库的 两个Servlet
package com.pst.servlet;
import com.pst.dao.EmpDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "UpdateServlet", value = "/UpdateServlet")
public class UpdateServlet extends HttpServlet {
EmpDao empDao = new EmpDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String name = request.getParameter("name");
String age = request.getParameter("age");
String sex = request.getParameter("sex");
String salary = request.getParameter("salary");
String department = request.getParameter("department");
Object[] objs = {name,age,sex,salary,department};
int i = empDao.updataEmp(objs);
if (i == 1){
response.sendRedirect("IndexServlet");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package com.pst.servlet;
import com.pst.dao.EmpDao;
import com.pst.entity.Emp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
@WebServlet(name = "UpdateShowServlet", value = "/UpdateShowServlet")
public class UpdateShowServlet extends HttpServlet {
EmpDao empDao = new EmpDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String id = request.getParameter("id");
Object[] objs = {id};
List<Emp> emps = empDao.findServletOne(objs);
if (emps != null){
Emp emp = emps.get(0);
PrintWriter writer = response.getWriter();
writer.print("<div align='center'>");
writer.print("<form action='UpdateServlet?id="+emp.getId()+"' method='post'>");
writer.print("姓名:<input type='text' name='name' value='"+emp.getName()+"'><br>");
writer.print("年龄:<input type='text' name='age' value='"+emp.getAge()+"'><br>");
writer.print("性别:<input type='text' name='sex' value='"+emp.getSex()+"'><br>");
writer.print("薪资:<input type='text' name='salary' value='"+emp.getSalary()+"'><br>");
writer.print("部门:<input type='text' name='department' value='"+emp.getDepartment()+"'><br>");
writer.print("<input type='submit' value='修改'>");
writer.print("</form>");
writer.print("</div>");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
以上是主要代码 下面是需要配置的BaseDao 和JdbcUtil
package com.pst.utlis;
import org.apache.commons.beanutils.BeanUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 只有两个方法:
* 1.增删改
* 2.查
*/
public class BaseDao {
/**
* 增删改
* @param sql 需要传入sql语句
* @param parameters 对sql的?进行赋值
* @return 受影响的行数
*/
// String sql = "insert into work (name, age, info) values(?, ?,?)";
// Object[] objs = {"煮鸡蛋", 34, "cxdshjn"};
//baseDao.update(sql, objs);
public int update (String sql, Object[] parameters) {
//1.获取数据路的连接的对象 从另外一个工具类中去获取的
Connection connection = JdbcUtil.getConnection();
//2.获取预处理的搬运工对象去预处理sql语句
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection.prepareStatement(sql);
//3.现在对sql语句参数进行赋值, 你知道有几个参数吗因为参数不确定
//获取参数的个数 靠参数元数据
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//System.out.println(parameterCount);
//4.循环进行赋值
// String sql = "insert into work (name, age, info) values(?, ?,?)";
// Object[] objs = {"供电", 12, "23u"}; 3
if (parameters != null && parameters.length == parameterCount) {
//才让你赋值
for (int i = 1; i <= parameterCount; i++) {
//i = 1` setObject(1, "供电")
//i=2 setObject(2, 12)
//i=3 setObject(3, "23u")
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.执行sql语句
int i = preparedStatement.executeUpdate();
return i;
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(preparedStatement, connection);
}
return 0;
}
//查询的方法 咱们需要关注什么?查询的数据是要赋值给一个实体类对象
/**
*
* @param sql
* @param parameters
* @param cls 查询出来的数据赋值给一个对象
* @param <T>
* @return
*/
//super.query("select name,age from emp where id = ?", null, Emp.class)
public <T> List<T> query (String sql, Object[] parameters, Class<T> cls) {
//1.连接数据库的对象 获取
Connection connection = JdbcUtil.getConnection();
//2.获取预处理的搬运工对象
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(sql);
//3.获取参数的个数
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//4.对?进行赋值
if(parameters != null && parameters.length == parameterCount) {
for (int i = 1; i <= parameterCount; i++) {
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.执行sql语句
resultSet = preparedStatement.executeQuery();
//6.创建一个空的集合
List<T> list = new ArrayList<>();
//7.获取结果集元数据,通过元数据获取字段的个数和字段的名字
ResultSetMetaData metaData = resultSet.getMetaData();
//8.通过元数据的对象获取字段的个数
/**
* id name age info 《=
* 1 狗蛋 12 大数据 《=
* 2 嘻嘻 18 撒娇年休假
* 3 大黄 89 水性凝胶剂
*/
int columnCount = metaData.getColumnCount();
/**
* resultSet.next()
* 第一条数据 :
* 内层for循环
* i=1 1<4 id getObject("id") 1 i++
* i=2 2<4 name getObject("name") 狗蛋 i++
* i=3 3<4 age...
* resultSet.next()
* 第二条数据:
* 内层for循环
* * i=1 1<4 id getObject("id") 2 i++
* * i=2 2<4 name getObject("name") 嘻嘻 i++
* * i=3 3<4 age..
*/
//9.遍历数据
while (resultSet.next()) {//往下遍历每一行的数据的
//10.通过Class对象获取所对应的类对象
//Work.class->Work work = new Work()
//Person.calss->person person = new Person();
T t = cls.getConstructor(null).newInstance(null);
for (int i = 1; i <= columnCount; i++) {//获取字段的
//11.获取列(字段)的名字
String columnName = metaData.getColumnName(i);
//System.out.println(columnName);
//12.通过字段获取值
Object value = resultSet.getObject(columnName);
System.out.println(value);
//13.获取数据库重点额数据之后,将数据赋值一个对象,得有类啊
//BeanUtils.setProperty(对象, 属性, 值)
BeanUtils.setProperty(t, columnName, value);
}
//14.每次while循环一次 存到集合中
list.add(t);
}
return list.size() != 0 ? list : null;
} catch (Exception e) {
e.printStackTrace();
} finally {
//15.关闭资源
JdbcUtil.close(resultSet, preparedStatement, connection);
}
return null;
}
//获取数据总条数
//select count(*) from emp
public int querySize(String sql) {
//1.获取了连接对象
Connection connection = JdbcUtil.getConnection();
//2.预处理搬运工对象
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
//count(*)
//39
while (resultSet.next()) {
int anInt = resultSet.getInt("count(*)");
return anInt;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(resultSet, preparedStatement, connection);
}
return 0;
}
}
这个是JdbcUtil
package com.pst.utlis;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
/**
* 1.获取Connection对象
* 2.关闭资源
*/
public class JdbcUtil {
private static DataSource dataSource = null;
static {
try {
//只要JdbcUtil类加载了,就会执行静态代码块中的代码
//读取配置文件中的信息:properties文件
//Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。
// 属性列表中的每个键及其对应的值都是一个字符串。
Properties properties = new Properties();
//https://blog.csdn.net/m0_45263525/article/details/127187980
//getResourceAsStream()是获取资源的输入流。类加载器默认是从classPath路径加载资源。
//classPath目录:web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classes目录就是classPath目录。该目录放的一般是web项目运行时的class文件、资源文件(xml,properties等)。
properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection () {
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
//关闭资源
//增删改 需要关闭两个 查 关闭三个
public static void close (Connection connection) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close (Statement statement, Connection connection) {
try {
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close (ResultSet resultSet, Statement statement, Connection connection) {
try {
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
这个是德鲁伊连接
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2304?useSSL=false
username=root
password=123456
initialSize=10
maxActive=10
maxWait=4000
好的下面是html
这个是后台表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div align="center">
<form action="AddEmpServlet" method="post">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
性别:<input type="text" name="sex"><br>
薪资:<input type="text" name="salary"><br>
<select name="department">
<option value="部门1">部门1</option>
<option value="部门2">部门2</option>
<option value="部门3">部门3</option>
<option value="部门4">部门4</option>
<option value="部门5">部门5</option>
</select><br/><br/><br/><br/>
<input type="submit" value="提交">
</form>
</div>
</body>
</html>a.org
这个是登录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div align="center" >
<form action="LoginServlet" method="post">
账号<input type="text" name="name"><br>
密码<input type="password" name="pwd"><br>
<input type="submit" value="登录">
</form>
</div>
</body>
</html>
写的太潦草 也很low 仅够参考 兄弟萌