JavaWeb 人员管理系统

1 需求:用户信息的增删改查功能

技术选型:Servlet+Jsp+Mysql+JDBCTempleat+Druid+BeanUtils+Tomcat

效果图展示





简单功能 1.列表查询 2 .添加功能 3.删除功能 4.修改功能 5.修改功能
复杂功能 1.条件查询 2.分页查询 3.对选删除

数据库设计

创建两张表 一张管理员表 以及 一张用户表

-- 创建数据库  Day18
CREATE DATABASE day18;
USE day18;-- 管理员表
CREATE TABLE manager(username VARCHAR(32) PRIMARY KEY,PASSWORD VARCHAR(32)
);INSERT INTO manager (username,PASSWORD) VALUES('zhangsan','123');
INSERT INTO manager(username,PASSWORD)VALUES('lisi',123);SELECT * FROM manager;-- 用户表
CREATE TABLE  USER(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(32) NOT NULL,gender VARCHAR(32),age INT,address VARCHAR(32),qq VARCHAR(32),email VARCHAR(32)
);-- 添加人员信息
INSERT INTO USER(id,NAME,gender,age,address,qq,email) VALUES(1,'张三','男',21,'北京','123','123@qq.com');
INSERT INTO USER(id,NAME,gender,age,address,qq,email) VALUES(NULL,'李四','女',20,'上海','456','456@qq.com');SELECT * FROM USER;

创建一个新的Module

将目录下的文件拷到web包中 所需jar包(项目中有 直接拷贝)

好了 准备工作 已经完成了 开始敲代码

创建manager 和 user 表的Bean对象

//manager
package cn.tll.domain;public class Manager {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Manager{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

user

package cn.tll.domain;public class User {private int id;private String name;private String gender;private int age;private String address;private String qq;private String email;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", address='" + address + '\'' +", qq='" + qq + '\'' +", email='" + email + '\'' +'}';}
}

PageBean

package cn.tll.domain;import java.util.List;
//添加一个泛型
public class PageBean<T> {private int totalCount;         //总记录数private int totalPage;          //总页码数private List<T> list;           //每页的数据private int currentPage;        //当前页码private int rows;               //每页显示的记录数public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}@Overridepublic String toString() {return "PageBean{" +"totalCount=" + totalCount +", totalPage=" + totalPage +", list=" + list +", currentPage=" + currentPage +", rows=" + rows +'}';}
}
添加配置文件 druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day18
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

创建JDBC工具类 ,使用Druid连接池

package cn.tll.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;/*** JDBC工具类  使用Druid数据库连接池*/
public class JDBCUtils {private static DataSource ds;//使用静态代码块 好处不需要实例化就可以调用static {try {//1.加载配置文件Properties pro = new Properties();//2.使用ClassLoder加载配置文件,获取字节输入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//初始化连接池对象ds =  DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/***获取数据库连接池对象*/public static DataSource getDataSource(){return ds;}/*** 获取连接Connection对象*/public static Connection getConnection() throws SQLException {return ds.getConnection();}
}

使用mvc架构设计 创建service 与 dao

文件夹目录

UserDaoimpl 代码

package cn.tll.dao.impl;import cn.tll.dao.UserDao;
import cn.tll.domain.Manager;
import cn.tll.domain.User;
import cn.tll.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;public class UserDaoimpl implements UserDao {//Spring对数据库的操作在jdbc上做了深层次的封装,使用Spring的诸如功能,可以把DataSource注入到JdbcTemplate中private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 查询所有用户信息* @return*/@Overridepublic List<User> findAll() {//1.定义查询sql语句String sql = "select * from user";List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));return users;}/*** 登录验证* @param username* @param password* @return*/@Overridepublic Manager findByUsernameAndPassword(String username, String password) {try {String sql = "select * from manager where username = ? and password =?";//因为要返回一个Manager对象   所有用quertForObjectManager manager = template.queryForObject(sql, new BeanPropertyRowMapper<Manager>(Manager.class), username, password);return manager;} catch (DataAccessException e) {e.printStackTrace();return null;}}/*** 添加用户信息* @param user*/@Overridepublic void addUser(User user) {String sql = "insert into user(id,name,gender,age,address,qq,email) values(null,?,?,?,?,?,?)";template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());}/*** 删除用户* @param id*/@Overridepublic void delUser(int id) {String sql = "delete from user where id = ?";template.update(sql,id);}//通过id 查询整个User对象@Overridepublic User findUser(String _id) {int id = Integer.parseInt(_id);String sql = "select * from user where id = ?";return template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);}//更新User对象@Overridepublic void updateUser(User user) {String sql = "update user set name = ?,gender = ? ,age = ? , address = ? ,qq = ?, email = ? where id =?";template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());}/*** 查询总记录数* @param contition* @return*/@Overridepublic int findByPageTotal(Map<String, String[]> contition) {String sql ="select count(*) from user where 1=1 ";//使用StringBuilder 拼接字符串StringBuilder sb = new StringBuilder(sql);//2.遍历mapSet<String> keySet = contition.keySet();//定义参数集合List<Object> params = new ArrayList<>();for (String key : keySet) {//排除分页查询条件if ("currentPage".equals(key)||"rows".equals(key)){continue;}String value = contition.get(key)[0];if (!"".equals(value)&&value!=null){//value有值sb.append(" and "+key+" like ?");params.add("%"+value+"%");  //条件值}}System.out.println(sb.toString());System.out.println(params);return template.queryForObject(sb.toString(),Integer.class,params.toArray());}/*** 查询符合复杂用户数据集合* @param start* @param rows* @param contition* @return*/@Overridepublic List<User> findByPage(int start, int rows, Map<String, String[]> contition) {String sql ="select * from user where 1 =1 ";StringBuilder sb = new StringBuilder(sql);//获取参数值Set<String> keySet = contition.keySet();List<Object> parms = new ArrayList<>();for (String key : keySet) {//排除分页 和查询条数if ("currentPage".equals(key)||"rows".equals(key)){continue;}String value = contition.get(key)[0];if (value !=null&&!"".equals(value)){sb.append(" and "+key+" like ?");parms.add("%"+value+"%");}}sb.append(" limit ?,?");parms.add(start);parms.add(rows);System.out.println("查询用户数据"+sb.toString());System.out.println(parms);return template.query(sb.toString(),new BeanPropertyRowMapper<User>(User.class),parms.toArray());}
}

UserDao 代码

package cn.tll.dao;import cn.tll.domain.Manager;
import cn.tll.domain.User;import java.util.List;
import java.util.Map;public interface UserDao {List<User> findAll();Manager findByUsernameAndPassword(String username, String password);void addUser(User user);void delUser(int id);User findUser(String id);void updateUser(User user);int findByPageTotal(Map<String, String[]> contition);List<User> findByPage(int start, int rows, Map<String, String[]> contition);
}

Service

UserService 接口类

package cn.tll.service;import cn.tll.domain.Manager;
import cn.tll.domain.PageBean;
import cn.tll.domain.User;import java.util.List;
import java.util.Map;public interface UserService {/*** 查询所有用户信息* @return*/List<User> findAll();Manager login(Manager manager);void addUser(User user);void delUser(String id);User findUser(String id);void updateUser(User user);PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> contition);void delSelect(String[] uids);
}

UserServiceImpl方法实现类

package cn.tll.service.impl;import cn.tll.dao.UserDao;
import cn.tll.dao.impl.UserDaoimpl;
import cn.tll.domain.Manager;
import cn.tll.domain.PageBean;
import cn.tll.domain.User;
import cn.tll.service.UserService;import java.util.List;
import java.util.Map;public class UserServiceImpl implements UserService {//创建UserDao对象private UserDao dao = new UserDaoimpl();@Overridepublic List<User> findAll() {//调用dao完成查询return dao.findAll();}/*** 查询管理员表中是否有相应的数据  登录验证* @param manager* @return*/@Overridepublic Manager login(Manager manager) {return dao.findByUsernameAndPassword(manager.getUsername(),manager.getPassword());}/*** 添加用户信息* @param user*/@Overridepublic void addUser(User user) {dao.addUser(user);}/*** 删除用户* @param id*/@Overridepublic void delUser(String id) {dao.delUser(Integer.parseInt(id));}//通过id  查询整个user对象@Overridepublic User findUser(String id) {return dao.findUser(id);}//更新用户信息@Overridepublic void updateUser(User user) {dao.updateUser(user);}@Overridepublic PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> contition) {int currentPage = Integer.parseInt(_currentPage);int rows = Integer.parseInt(_rows);//健壮性判断if (currentPage<=0){currentPage = 1;}//创建新的PageBean对象            向下兼容PageBean<User> pb = new PageBean<User>();pb.setCurrentPage(currentPage);pb.setRows(rows);//条用dao查询总记录数int totalCount = dao.findByPageTotal(contition);pb.setTotalCount(totalCount);//调用dao查询用户集合//计算开始查询的索引int start = (currentPage -1)*rows;List<User> list = dao.findByPage(start,rows,contition);pb.setList(list);//计算总页码int totalPage = (totalCount%rows) == 0 ? totalCount/rows : (totalCount/rows)+1 ;pb.setTotalPage(totalPage);return pb;}/*** 删除多选的人员信息* @param uids*/@Overridepublic void delSelect(String[] uids) {//遍历 一个一个删除if (uids != null&&uids.length>0){for (String uid : uids) {//调用dao删除dao.delUser(Integer.parseInt(uid));}}}
}

测试方法类

package cn.tll.test;import cn.tll.domain.Manager;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;
import org.junit.Test;public class TestAnli {@Testpublic void loginTest(){Manager manager = new Manager();manager.setUsername("zhangsan");manager.setPassword("123");UserService service = new UserServiceImpl();Manager login = service.login(manager);System.out.println(login);}
}
Servlet

AddServlet 添加用户信息类

package cn.tll.web.servlet;import cn.tll.domain.User;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;
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.util.Map;@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取添加的信息  并且封装成user对象Map<String, String[]> map = request.getParameterMap();User user = new User();try {BeanUtils.populate(user,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.创建UserService对象UserService service = new UserServiceImpl();service.addUser(user);//4.添加成功后重定向到response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

ChecckedCodeServlet 二维码更新类

package cn.tll.web.servlet;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;/*** 验证码*/
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//服务器通知浏览器不要缓存response.setHeader("pragma","no-cache");response.setHeader("cache-control","no-cache");response.setHeader("expires","0");//在内存中创建一个长80,宽30的图片,默认黑色背景//参数一:长//参数二:宽//参数三:颜色int width = 80;int height = 30;BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//获取画笔Graphics g = image.getGraphics();//设置画笔颜色为灰色g.setColor(Color.GRAY);//填充图片g.fillRect(0,0, width,height);//产生4个随机验证码,12EyString checkCode = getCheckCode();//将验证码放入HttpSession中request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);//设置画笔颜色为黄色g.setColor(Color.YELLOW);//设置字体的小大g.setFont(new Font("黑体",Font.BOLD,24));//向图片上写入验证码g.drawString(checkCode,15,25);//将内存中的图片输出到浏览器//参数一:图片对象//参数二:图片的格式,如PNG,JPG,GIF//参数三:图片输出到哪里去ImageIO.write(image,"PNG",response.getOutputStream());}/*** 产生4位随机字符串 */private String getCheckCode() {String base = "0123456789ABCDEFGabcdefg";int size = base.length();Random r = new Random();StringBuffer sb = new StringBuffer();for(int i=1;i<=4;i++){//产生0到size-1的随机值int index = r.nextInt(size);//在base字符串中获取下标为index的字符char c = base.charAt(index);//将c放入到StringBuffer中去sb.append(c);}return sb.toString();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
}

DelSelectServlet 多选 删除人员信息

package cn.tll.web.servlet;import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/DelSelectServlet")
public class DelSelectServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取参数String[] uids = request.getParameterValues("uid");//3.调用Uservice 删除UserService service = new UserServiceImpl();service.delSelect(uids);//4.跳转到findUserByPageresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

DelUserServlet

package cn.tll.web.servlet;import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/delUserServlet")
public class DelUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取要删除的idString id = request.getParameter("id");//3.调用UserviceUserService service = new UserServiceImpl();service.delUser(id);//4.重转发到UserListServletresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

FindUserByPage 分页查询用户信息

package cn.tll.web.servlet;import cn.tll.domain.PageBean;
import cn.tll.domain.User;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;import javax.servlet.ServletException;
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.util.Map;@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取参数String currentPage = request.getParameter("currentPage");       //当前页码数String rows = request.getParameter("rows");                     //每页显示条数//默认页码数为1   显示条数为5if (currentPage == null ||"".equals(currentPage)){currentPage = "1";}if (rows == null || "".equals(rows)){rows = "5";}//获取查询参数Map<String, String[]> contition = request.getParameterMap();//条用Uservice 分页查询UserService service = new UserServiceImpl();PageBean<User> pb = service.findUserByPage(currentPage,rows,contition);//将pb存储到request中request.setAttribute("pb",pb);//查询条件存储到request中    查询完后查询信息显示到查询框中request.setAttribute("contition",contition);//转发到list.jsp中request.getRequestDispatcher("/list.jsp").forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

LoginServlet 登录

package cn.tll.web.servlet;import cn.tll.domain.Manager;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码格式request.setCharacterEncoding("utf-8");//2.获取数据//2.1获取用户填写验证码String verifycode = request.getParameter("verifycode");//3.获取CheckCodeServlet存储的验证码HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");//获取完成后 确保验证码一次性session.removeAttribute("CHECKCODE_SERVER");//判断验证码是否一致if (!checkcode_server.equalsIgnoreCase(verifycode)){//验证码错误//提示信息request.setAttribute("login_msg","验证码错误");//跳转到登录界面request.getRequestDispatcher("/login.jsp").forward(request,response);return;}//使用BeanUtils封装User对象Map<String, String[]> map = request.getParameterMap();Manager manager = new Manager();try {BeanUtils.populate(manager,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用Uservice查询UserService service = new UserServiceImpl();Manager loginUser = service.login(manager);//判断是否登录成功if (loginUser!=null){//管理员登录成功//将用户存入sessionsession.setAttribute("loginSucc",loginUser);//重定向 经过一次重定向后,request内的对象将无法使用,request中存放的变量全部失效//必须是绝对路径response.sendRedirect(request.getContextPath()+"/index.jsp");}else {//登录失败  存储错误信息request.setAttribute("login_msg","用户名或密码错误");//转发到登录界面    转发  可以是相对路径也可以是绝对路径request.getRequestDispatcher("/login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

FindUserservlet 根据id 查询 id对应的user所有信息 (用于更新信息时将原信息存放到更新表中)

package cn.tll.web.servlet;import cn.tll.domain.User;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取id参数String id = request.getParameter("id");//3.调用UserviceUserService service = new UserServiceImpl();User user = service.findUser(id);//4.储存到request中request.setAttribute("user",user);//5.转发到update.jsprequest.getRequestDispatcher("/update.jsp").forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

UpdateUserservlet 更新信息

package cn.tll.web.servlet;import cn.tll.domain.User;
import cn.tll.service.UserService;
import cn.tll.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;
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.util.Map;@WebServlet("/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取更新数据  并封装Map<String, String[]> map = request.getParameterMap();User user = new User();try {BeanUtils.populate(user,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.使用service 更新UserService service = new UserServiceImpl();service.updateUser(user);//4.重定向到UserListServletresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

交互界面 jsp

login,jsp 登录界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>管理员登录</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><script type="text/javascript">//切换验证码function refreshCode() {//获取验证码图像对象var vcode = document.getElementById("vcode");//设置其src属性,加上时间撮   获取虚拟目录vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time ="+new Date().getTime();}</script>
</head>
<body>
<div class="container" style="width: 400px;"><h3 style="text-align: center;">管理员登录</h3><form action="${pageContext.request.contextPath}/loginServlet" method="post"><div class="form-group"><label for="user">用户名:</label><input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/></div><div class="form-group"><label for="password">密码:</label><input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/></div><div class="form-inline"><label for="vcode">验证码:</label><input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/><a href="javascript:refreshCode()"><img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a></div><hr/><div class="form-group" style="text-align: center;"><input class="btn btn btn-primary" type="submit" value="登录"></div></form><!-- 出错显示的信息框 --><div class="alert alert-warning alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert" ><span>&times;</span></button><strong>${login_msg}</strong></div>
</div>
</body>
</html>

index.jsp 登录成功跳转的界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>首页</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><script type="text/javascript"></script>
</head>
<body>
<div align="center" style="text-decoration:none;font-size:33px">${loginSucc.username},欢迎你</div>
<div align="center"><ahref="${pageContext.request.contextPath}/findUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息</a>
</div>
</body>
</html>

list.jsp 查询界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head><!-- 指定字符集 --><meta charset="utf-8"><!-- 使用Edge最新的浏览器的渲染方式 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。width: 默认宽度与设备的宽度相同initial-scale: 初始的缩放比,为1:1 --><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>用户信息管理系统</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><style type="text/css">td, th {text-align: center;}</style><script>function deleteUser(id) {//用户安全提示if(confirm("你确定要删除么?")){//访问路径location.href = "${pageContext.request.contextPath}/delUserServlet?id="+id;}}window.onload = function (){//给删除选中按钮添加点击事件document.getElementById("delSelected").onclick = function (){if (confirm("你确定要删除选中条目么?")){var falg = false;//判断是否有选中条目var Cbs = document.getElementsByName("uid");for (var i = 0; i <Cbs.length ; i++) {if (Cbs[i].checked){//有一个条目选中了falg = true;break;}}if (falg){//表单提交document.getElementById("form").submit();}}}//获取第一个复选框document.getElementById("firstCb").onclick = function (){//获取下面所有的idvar cbs = document.getElementsByName("uid");//遍历for (var i = 0; i <cbs.length ; i++) {//设置下面的复选框和首选框一致cbs[i].checked = this.checked;}}}</script>
</head>
<body>
<div class="container"><h3 style="text-align: center">用户信息列表</h3><div style="float: left"><form class="form-inline" action="${pageContext.request.contextPath}/findUserByPageServlet" method="post"><div class="form-group"><label for="exampleInputName1">姓名</label><input type="text" class="form-control" name="name" value="${contition.name[0]}" id="exampleInputName1"></div><div class="form-group"><label for="exampleInputName2">籍贯</label><input type="text" class="form-control" name="address" value="${contition.address[0]}" id="exampleInputName2"></div><div class="form-group"><label for="exampleInputEmail2">邮箱</label><input type="text" class="form-control" name="email" value="${contition.email[0]}" id="exampleInputEmail2" ></div><button type="submit" class="btn btn-default">查询</button></form></div><div style="float: right;margin: 5px;"><a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a><a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a></div><form id="form" action="${pageContext.request.contextPath}/DelSelectServlet" method="post"><table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox" id="firstCb"></th><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>籍贯</th><th>QQ</th><th>邮箱</th><th>操作</th></tr><c:forEach items="${pb.list}" var="user" varStatus="s"><tr><td><input type="checkbox" name="uid" value="${user.id}"></td><td>${s.count}</td><td>${user.name}</td><td>${user.gender}</td><td>${user.age}</td><td>${user.address}</td><td>${user.qq}</td><td>${user.email}</td><td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})">删除</a></td></tr></c:forEach></table></form><div><nav aria-label="Page navigation"><ul class="pagination"><c:if test="${pb.currentPage == 1}"><li class="disabled"></c:if><c:if test="${pb.currentPage != 1}"><li></c:if><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage - 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><c:forEach begin="1" end="${pb.totalPage}" var="i"><c:if test="${pb.currentPage == i}"><li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${contition.name[0]}&address=${cotition.address[0]}&email=${contition.email[0]}">${i}</a></li></c:if><c:if test="${pb.currentPage != i}"><li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${contition.name[0]}&address=${cotition.address[0]}&email=${contition.email[0]}">${i}</a></li></c:if></c:forEach><c:if test="${pb.currentPage == pb.totalPage}"><li class="disabled"></c:if><c:if test="${pb.currentPage != pb.totalPage}"><li></c:if><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage+1}&rows=5&name=${contition.name[0]}&address=${cotition.address[0]}&email=${contition.email[0]}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><span style="font-size: 25px;margin-left: 5px;">共${pb.totalCount}条记录,共${pb.totalPage}页</span></ul></nav></div></div>
</body>
</html>

add.jsp 添加用户信息界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head><!-- 指定字符集 --><meta charset="utf-8"><!-- 使用Edge最新的浏览器的渲染方式 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。width: 默认宽度与设备的宽度相同initial-scale: 初始的缩放比,为1:1 --><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>添加用户</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container"><center><h3>添加联系人页面</h3></center><form action="${pageContext.request.contextPath}/addServlet" method="post"><div class="form-group"><label for="name">姓名:</label><input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名"></div><div class="form-group"><label>性别:</label><input type="radio" name="gender" value="男" checked="checked"/>男<input type="radio" name="gender" value="女"/>女</div><div class="form-group"><label for="age">年龄:</label><input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄"></div><div class="form-group"><label for="address">籍贯:</label><select name="address" class="form-control" id="address"><option value="广东">广东</option><option value="广西">广西</option><option value="湖南">湖南</option></select></div><div class="form-group"><label for="qq">QQ:</label><input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/></div><div class="form-group"><label for="email">Email:</label><input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/></div><div class="form-group" style="text-align: center"><input class="btn btn-primary" type="submit" value="提交" /><input class="btn btn-default" type="reset" value="重置" /><input class="btn btn-default" type="button" value="返回" /></div></form>
</div>
</body>
</html>

update.jsp 更新信息界面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head><!-- 指定字符集 --><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>修改用户</title><link href="css/bootstrap.min.css" rel="stylesheet"><script src="js/jquery-2.1.0.min.js"></script><script src="js/bootstrap.min.js"></script></head>
<body>
<div class="container" style="width: 400px;"><h3 style="text-align: center;">修改联系人</h3><form action="${pageContext.request.contextPath}/updateUserServlet" method="post"><%--还要设置一个隐藏输入框  确保更新相应的id--%><input type="hidden" name="id" value="${user.id}"><div class="form-group"><label for="name">姓名:</label><input type="text" class="form-control" id="name" name="name" value="${user.name}" placeholder="请输入姓名" /></div><div class="form-group"><label>性别:</label><c:if test="${user.gender == '男'}"><input type="radio" name="gender" value="男"  checked/>男<input type="radio" name="gender" value="女"  />女</c:if><c:if test="${user.gender == '女'}"><input type="radio" name="gender" value="男"  />男<input type="radio" name="gender" value="女"  checked/>女</c:if></div><div class="form-group"><label for="age">年龄:</label><input type="text" class="form-control" id="age"  name="age" value="${user.age}" placeholder="请输入年龄" /></div><div class="form-group"><label for="address">籍贯:</label><select name="address" id="address" class="form-control" ><c:if test="${user.address == '广东'}"><option value="广东" selected>广东</option><option value="广西">广西</option><option value="湖南">湖南</option></c:if><c:if test="${user.address == '广西'}"><option value="广东">广东</option><option value="广西" selected>广西</option><option value="湖南">湖南</option></c:if><c:if test="${user.address == '湖南'}"><option value="广东">广东</option><option value="广西">广西</option><option value="湖南" selected>湖南</option></c:if></select></div><div class="form-group"><label for="qq">QQ:</label><input type="text" id="qq" class="form-control" value="${user.qq}" name="qq" placeholder="请输入QQ号码"/></div><div class="form-group"><label for="email">Email:</label><input type="text" id="email" class="form-control" value="${user.email}" name="email" placeholder="请输入邮箱地址"/></div><div class="form-group" style="text-align: center"><input class="btn btn-primary" type="submit" value="提交" /><input class="btn btn-default" type="reset" value="重置" /><input class="btn btn-default" type="button" value="返回" οnclick="history.back()"/></div></form>
</div>
</body>
</html>

最后添加一个权限 (Filter)过滤器

package cn.tll.web.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;@WebFilter("/*")
public class LoginFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//强制转换req ==>requestHttpServletRequest request = (HttpServletRequest) req;//获取URI   URI短一点   URL长一点String uri = request.getRequestURI();//注意判断是否包含登录界面  js  css 二维码验证  资源if (uri.contains("/login.jsp")||uri.contains("/loginServlet")||uri.contains("/css/")||uri.contains("/js/")||uri.contains("/fonts/")||uri.contains("/checkCodeServlet")){chain.doFilter(req, resp);}else {//不包含  需要判断用户是否登录//从session中获取userObject loginSucc = request.getSession().getAttribute("loginSucc");if (loginSucc!=null){//已经登录过chain.doFilter(req, resp);}else {//没有登录   存储信息到login_msg   并且跳转到登录界面request.setAttribute("login_msg","你还未登录,请登录");request.getRequestDispatcher("/login.jsp").forward(req,resp);}}}public void init(FilterConfig config) throws ServletException {}public void destroy() {}}

文件源码下载

百度云下载地址

提取码:2ak8

技术小白 有任何问题欢迎指点

JavaWeb 人员管理系统相关推荐

  1. Javaweb + MVC 实现企业人员管理系统全过程记录(配项目所有代码及数据库文件)

    前言:因为研究生入学任务需要做一个企业人员管理系统,那就做呗... 项目及数据文件下载地址:https://download.csdn.net/download/qq_39410381/1154652 ...

  2. 基于JAVAWeb产品管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVAWeb产品管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAWeb产品管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开 ...

  3. 导读:自己动手实现 JavaWeb 后台管理系统

    课程背景 让我们从某招聘网站上发布的数个 Java 工程师招聘信息来开始本达人课. Java 实习生[3k-5k] 岗位要求: 热爱技术并有钻研精神,Java 基础扎实,熟悉Spring.Spring ...

  4. 基于javaweb固定资产管理系统的设计与实现(论文+程序设计源码+数据库文件)

    目录 摘要: 2 1 绪论 4 1.1 项目开发背景 4 1.2 项目开发意义 4 1.3 项目主要的内容 4 2 相关技术介绍及系统环境开发条件 4 2.1相关技术介绍 5 2.2系统环境开发条件 ...

  5. [附源码]java毕业设计JavaWeb快递管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. java计算机毕业设计社区人员管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计社区人员管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计社区人员管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  7. 基于java+ssm公共交通失信人员管理系统-计算机毕业设计

    项目介绍 本南昌公共交通失信人员管理系统主要包括系统用户管理模块.用户信息管理模块.处罚类型管理.失信人员管理.登录模块.和退出模块等多个模块, 本系统基于SSM(Spring+SpringMVC+M ...

  8. JavaWeb图书管理系统 图书借阅系统项目源码附带视频部署演示教程

    一.项目介绍 更新记录 2022.05.29 修复Java代码,添加过滤器未实现的方法 解决css,js样式失效,引入改为本地引入 重构项目,一个项目分两版本,一个idea版本一个eclipse版本 ...

  9. JavaWeb图书管理系统day03

    视频+资料+笔记[链接:https://pan.baidu.com/s/127I2oA8zvhTECCmC6wMSmQ   提取码:zjxs] JavaWeb图书管理系统[bookEstore文档] ...

最新文章

  1. java正则表达式 匹配%号_java正则表达式匹配带有括号的电话号为什么匹配不上...
  2. python下载mp4
  3. vmware-tools安装指南
  4. 【数据展示】matplotlib中label框亮度设置
  5. 限时免费下载丨《2021 中国游戏市场挑战与机遇盘点》重磅发布!
  6. idea工作台输出的日志详解_详解linux下nohup日志输出过大问题解决方案--分批切割...
  7. BLE-NRF51822教程3-sdk程序框架剖析
  8. C#:Dockpanel的一些入门的基本操作
  9. linux手动调节屏幕亮度命令
  10. 有效的括号——字符串匹配问题
  11. oracle数据库中的一些操作
  12. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 事件对象以及事件委托(pink老师笔记)
  14. 作为曾经Oracle的一员,谈谈老东家的此次裁员
  15. mysql 批量更新_MySQL批量更新
  16. 连京东都开始卖翻新机,教你识别手中的iPhone 隐藏id
  17. IPFS技术系列之IPFS底层基础
  18. “强者恒强”,零食江湖来到新赛点
  19. IE浏览器通过JS提交表单时报错拒绝访问
  20. harmonyos开发板,意料之外 情理之中 鸿蒙开源 HarmonyOS 2.0 内核子系统介绍

热门文章

  1. java的hash算法实现_一致性Hash算法的Java实现详解
  2. Bmob后端云的集成需要注意的坑(番外)
  3. B站(哔哩哔哩)用户画像分析
  4. 没想到苹果才是最赚钱的游戏公司!一年净赚85亿美元,比索尼微软任天堂加起来还多...
  5. 设计登录页面测试用例,页面包括账号、密码和验证码,账号字符长度小于20,密码字符长度小于30,验证码数字和字母组合,长度为4
  6. 【C初阶】第八篇——结构体
  7. 【MATLAB appdesigner】24_巧用dropdown组件(附:个人调试技巧)
  8. mysql为表和字段取别名_MySQL查询函数---为表和字段取别名
  9. 宝来客分享怎样才能让每一位导购主动成为金店的增长发动机
  10. 实车采集的数据重建场景_超详细的计算机视觉数据集汇总(自动驾驶、SLAM、三维重建、计算机视觉)...