1.简介

本项目是个java开发的简单的用户管理系统,因为能力有限,我做的界面丑陋了些,大家见谅

实现的功能:登录、添加用户、修改用户(修改的时候用户原始数据显示到界面上、单个删除用户和多个删除用户、数据的分页和跳转、url过滤器

因为我写的时候是开了两个tomcat服务器 将图片存储到另一个服务器上进行访问 大家这里有疑问的也欢迎咨询哈 同时如果有小伙伴想要项目源文件的欢迎加qq群

2.准备工作

1.1开发工具

IDEA2019、SQLYog  、HBuilder

1.2使用语言

SQL、Java、HTML、JSP

1.3前端框架

BootStrap

1.4导入的jar包

3.项目文件结构

 

4.代码

sql

/*
SQLyog Ultimate v13.1.1 (64 bit)
MySQL - 5.7.29 : Database - contact_sys
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`contact_sys` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `contact_sys`;/*Table structure for table `client` */DROP TABLE IF EXISTS `client`;CREATE TABLE `client` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(32) DEFAULT NULL,`password` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;/*Data for the table `client` */insert  into `client`(`id`,`username`,`password`) values
(1,'张三','123456');/*Table structure for table `contact` */DROP TABLE IF EXISTS `contact`;CREATE TABLE `contact` (`cid` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`gender` varchar(4) DEFAULT NULL,`age` int(11) DEFAULT NULL,`phone` varchar(11) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,`qq` varchar(255) DEFAULT NULL,PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;/*Data for the table `contact` */insert  into `contact`(`cid`,`name`,`gender`,`age`,`phone`,`email`,`qq`) values
(28,'科比','男',34,'1231','1346888','ce88029a735b44d3b553a917911b13f30d6583f95051415da21b8fcdbcae8a8d4.png'),
(29,'户','男',34,'1516152','14561113@qq.com','4083a5d95fdb4442ae937bc0da1904102bafe2f833de4744878e3142d2ce488e74eacec67ede492f88c9be61c2602adfea21bcc015944f3091c270736d52c3ec5.png'),
(30,'张三','男',7848,'1551674585','1346888','9e1ae3313c5e4793ae94be0f4be69d96b59d1750411a46ff88ad3b716cf632c23.png'),
(31,'打','男',24,'1551674585','sdada13@162','53b1005dbd6a4923b782a067cdf48e0150b979f34c214911b6bf6c07035c560659cd76a4281f46eda598540a91cd50272.png');/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

pojo

package com.javacoffee.pojo;public class Client {//创建Client类 和数据库中的client表对应好private Integer id;private String username;private String password;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
package com.javacoffee.pojo;public class Contact {//创建Contact类 和数据库中的字段名对应好private Integer cid;private String name;private String gender;private Integer age;private String phone;private String email;private String qq;public Contact() {}public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}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 Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Overridepublic String toString() {return "Contact{" +"cid=" + cid +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", phone='" + phone + '\'' +", email='" + email + '\'' +", qq='" + qq + '\'' +'}';}
}

dao

package com.javacoffee.dao;import com.javacoffee.pojo.Client;public interface ClientDao {Client login(String username, String password);
}
package com.javacoffee.dao;import com.javacoffee.pojo.Contact;
import com.javacoffee.util.PageBean;import java.util.List;public interface ContactDao {//面向接口编程public void addContact(Contact contact);//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(Integer cid);//删除联系人public List<Contact> findAll();  //查询所有联系人public Contact findById(Integer cid);//根据编号查询联系人public PageBean findByPage(PageBean pageBean);//分页public void deleteAll(String[] cids);//删除全选Contact selectPhone(String phone);}

dao实现类

package com.javacoffee.dao.impl;import com.javacoffee.dao.ClientDao;
import com.javacoffee.pojo.Client;
import com.javacoffee.util.JdbcUtil;
import org.apache.commons.dbutils.handlers.BeanHandler;import java.sql.SQLException;public class ClientDaoImpl implements ClientDao {@Overridepublic Client login(String username, String password) {//登陆的查询语句String sql = "select * from client where username = ? and password = ?";Object[] objects = {username,password};try {return  JdbcUtil.getQueryRunner().query(sql, new BeanHandler<Client>(Client.class), objects);} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("sql语句异常");}}
package com.javacoffee.dao.impl;import com.javacoffee.dao.ContactDao;
import com.javacoffee.pojo.Contact;
import com.javacoffee.util.JdbcUtil;
import com.javacoffee.util.PageBean;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;import java.sql.SQLException;
import java.util.List;public class ContactDaoImpl implements ContactDao {//添加联系人的方法@Overridepublic void addContact(Contact contact) {//sql语句 后面加上参数String sql = "insert into contact(name,gender,age,phone,email,qq) values(?,?,?,?,?,?)";//创建一个object数组,并把需要传的参数放入数组中Object[] objects = {contact.getName(),contact.getGender(),contact.getAge(),contact.getPhone(),contact.getEmail(),contact.getQq()};try {//执行sql语句 我导入了dbUtil包,所以直接得到queryRunner对象执行sql语句JdbcUtil.getQueryRunner().update(sql,objects);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void updateContact(Contact contact) {//修改的sql语句String sql = "update contact set name = ?,gender = ?,age=  ?,phone = ?,email = ?,qq = ? where cid = ?";//和增加很一样,先赋值到数组 再执行sql语句Object[] objects = {contact.getName(),contact.getGender(),contact.getAge(),contact.getPhone(),contact.getEmail(),contact.getQq(),contact.getCid()};try {JdbcUtil.getQueryRunner().update(sql,objects);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void deleteContact(Integer cid) {//删除sql语句String sql = "delete from contact where cid = ?";try {//传参可以直接传入sql语句和 cid形式参数JdbcUtil.getQueryRunner().update(sql,cid);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic List<Contact> findAll() {//返回值为List集合 sql语句如下String sql = "select * from contact";try {//也是通过dbUtil工具类来执行sql语句,因为输出的为List集合,所以第一个参数为sql语句 第二个如下return JdbcUtil.getQueryRunner().query(sql, new BeanListHandler<Contact>(Contact.class));} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("列表无数据");}@Overridepublic Contact findById(Integer cid) {//这个是通过id来进行查找String sql = "select * from contact where cid = ?";try {//返回值为一个对象 所以第二个参数也变成如下了,第三个参数放入cidreturn JdbcUtil.getQueryRunner().query(sql, new BeanHandler<Contact>(Contact.class), cid);} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("没有这个id");}@Overridepublic PageBean findByPage(PageBean pageBean) {//分页 这里是通过sql语句分的 比较基础String sql = "select * from contact limit ?,?";//传入的是PageBean对象,来获取当前页号和每页的记录数//大家可一思考一下 select * from contact limit 0,3 是查找第一个到第三个的数据// select * from contact limit 3,3 是查找第四个到第六个的 以此类推Object[] objects = {(pageBean.getPageNum()-1)*pageBean.getPageSize(),pageBean.getPageSize()};try {//传入每页的数据List<Contact> query = JdbcUtil.getQueryRunner().query(sql, new BeanListHandler<Contact>(Contact.class), objects);pageBean.setPageData(query);//查找数据总数String sql1 = "select count(cid) from contact";//强转为Long类型数据Long query1 = (Long)JdbcUtil.getQueryRunner().query(sql1, new ScalarHandler<>());//将查找出来的数据再转化为int类型数据存入pageBean中pageBean.setTotalData(query1.intValue());//可以在控制台打印一下看看是不是存入
//            System.out.println(pageBean.getTotalData());//计算总页数  用了三目运算符//当 总数据数除以每页的数据数结果余数为0时候,说明总页数是总数据数除以每页的数据数结果取整//反之则需要加一Integer totalCount = pageBean.getTotalData()%pageBean.getPageSize()==0 ?pageBean.getTotalData()/pageBean.getPageSize() :pageBean.getTotalData()/pageBean.getPageSize() + 1;//然后赋值pageBean.setTotalCount(totalCount);//返回这个对象return pageBean;} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("无法获取对象");}@Overridepublic void deleteAll(String[] cids) {//输入sql语句 通过cid来进行多个删除 可以看到传入的参数为cids是一个String类型的数组String sql = "delete from contact where cid = ?";//创建一个二维数组,这个数组的长度为cids中的数据数Object[][] objects = new Object[cids.length][];//通过循环来对二维数组进行赋值for (int i = 0; i < objects.length; i++) {objects[i] = new Object[]{cids[i]};}try {//执行sql语句JdbcUtil.getQueryRunner().batch(sql,objects);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic Contact selectPhone(String phone) {String sql = "select * from contact where phone = ?";try {Contact query = JdbcUtil.getQueryRunner().query(sql, new BeanHandler<Contact>(Contact.class), phone);return query;} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("查找异常");}}

exception

package com.javacoffee.exception;public class MyException extends Exception {public MyException(String messege){super(messege);}
}

service

package com.javacoffee.service;import com.javacoffee.exception.MyException;
import com.javacoffee.pojo.Contact;
import com.javacoffee.util.PageBean;import java.util.List;public interface ContactService {//service层我并没写什么逻辑行为,因为比较简单,就起到了个传值的作用public void addContact(Contact contact) throws MyException;//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(Integer cid);//删除联系人public List<Contact> findAll();  //查询所有联系人public Contact findById(Integer cid);//根据编号查询联系人public  PageBean findByPage(PageBean pageBean);//分页public void deleteAll(String[] cids);//删除所选人Boolean selectPhone(String phone);}
package com.javacoffee.service;import com.javacoffee.pojo.Client;public interface ClientService {//获取对象Client login(String username, String password);
}

service实现类

package com.javacoffee.service.impl;import com.javacoffee.dao.ClientDao;
import com.javacoffee.dao.impl.ClientDaoImpl;
import com.javacoffee.pojo.Client;
import com.javacoffee.service.ClientService;public class ClientServiceImpl implements ClientService {@Overridepublic Client login(String username, String password) {ClientDao clientDao = new ClientDaoImpl();return clientDao.login(username,password);}
}
package com.javacoffee.service.impl;import com.javacoffee.dao.ContactDao;
import com.javacoffee.dao.impl.ContactDaoImpl;
import com.javacoffee.exception.MyException;
import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ContactService;
import com.javacoffee.util.PageBean;import java.util.List;public class ContactServiceImpl implements ContactService {//首先创建 多态父类引用指向子类对象 new出来contactDao对象private ContactDao contactDao = new ContactDaoImpl();//增加联系人的方法@Overridepublic void addContact(Contact contact) throws MyException {Boolean aBoolean = selectPhone(contact.getPhone());if (aBoolean){contactDao.addContact(contact);}else {throw new MyException("手机号重复,不能使用!");}}//修改联系人的方法@Overridepublic void updateContact(Contact contact) {contactDao.updateContact(contact);}//删除联系人的方法@Overridepublic void deleteContact(Integer cid) {contactDao.deleteContact(cid);}//查找全部的方法@Overridepublic List<Contact> findAll() {return contactDao.findAll();}//通过id查找的方法@Overridepublic Contact findById(Integer cid) {return contactDao.findById(cid);}//分页@Overridepublic PageBean findByPage(PageBean pageBean) {return contactDao.findByPage(pageBean);}@Override//删除所选全部public void deleteAll(String[] cids) {contactDao.deleteAll(cids);}@Overridepublic Boolean selectPhone(String phone) {Contact contact = contactDao.selectPhone(phone);if (contact == null){return true;}else {return false;}}}

filter过滤器

package com.javacoffee.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter("/*")
public class ContactFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//字符集过滤器 过滤所有 将字符集设置成utf-8HttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)resp;request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");chain.doFilter(request,response);}public void init(FilterConfig config) throws ServletException {}}
package com.javacoffee.filter;import com.javacoffee.pojo.Client;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebFilter("/*")
public class LoginFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//登陆的过滤器 因为要确保先登录 所以将网址不是登录的重定向到登录界面HttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)resp;//获取后缀String requestURI = request.getRequestURI();requestURI = requestURI.substring(requestURI.lastIndexOf("/"));//判断如果输入的网址后缀是这两个 则放行if ("/loginServlet".equals(requestURI)|| "/login.jsp".equals(requestURI)){chain.doFilter(request,response);}else {//如果不是的话 因为我们在登录的时候创建了session 如果session为空//那么一定是没有登录的 所以不放行重定向到登陆界面HttpSession session = request.getSession(false);if (session == null){response.sendRedirect(request.getContextPath()+"/loginServlet");}else {//如果存在session 对象 不过有可能session对象里是在别的地方创建好的//所以我们要判断session里是否存储了我们登陆时存进去的client对象//如果没有的话那还是没登陆 就重定向到登陆界面Client client = (Client)session.getAttribute("client");if (client == null){response.sendRedirect(request.getContextPath()+"/loginServlet");}else {//反之 就是登录过的 就可以放行chain.doFilter(request,response);}}}}public void init(FilterConfig config) throws ServletException {}}

util工具类

package com.javacoffee.util;import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;//使用DBUtils的工具类
public class JdbcUtil {//声明DataSource对象private static DataSource dataSource;//静态代码块static {try {//读取db.properties文件InputStream resourceAsStream = JdbcUtil.class.getResourceAsStream("/druid.properties");//创建Properties对象Properties properties = new Properties();//加载流对象properties.load(resourceAsStream);//创建数据源对象dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}//获取DButils中核心类对象QueryRunner对象public static QueryRunner getQueryRunner(){return new QueryRunner(dataSource);//此时已经连接上数据库了}}
package com.javacoffee.util;public class PageBean {//这是分页的工具类,一共需要获得五个属性private Integer pageNum;//当前页码号 通过前端获取private Integer pageSize;//一页的记录数 自己设置的private Object pageData;//一页的数据 可以看到返回值是对象private Integer totalCount;//总页数 需要二次计算private Integer totalData;//数据的总记录数 用来计算总页数用的public Integer getPageNum() {return pageNum;}public void setPageNum(Integer pageNum) {this.pageNum = pageNum;}public Integer getPageSize() {return pageSize;}public void setPageSize(Integer pageSize) {this.pageSize = pageSize;}public Object getPageData() {return pageData;}public void setPageData(Object pageData) {this.pageData = pageData;}public Integer getTotalCount() {return totalCount;}public void setTotalCount(Integer totalCount) {this.totalCount = totalCount;}public Integer getTotalData() {return totalData;}public void setTotalData(Integer totalData) {this.totalData = totalData;}@Overridepublic String toString() {return "PageBean{" +"pageNum=" + pageNum +", pageSize=" + pageSize +", pageData=" + pageData +", totalCount=" + totalCount +", totalData=" + totalData +'}';}
}

druid.properties数据库连接池配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/contact_sys?useSSL=false
#我是使用的mysql 所以端口号为3306 数据库账户密码一定要改成自己的哈
username=root
password=1234initialSize=5
maxActive=20
maxWait=2000

web层

package com.javacoffee.web;import com.javacoffee.exception.MyException;
import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
//注意这两个注解千万不能省略
@WebServlet("/addContactServlet")//这个是servlet的注解,可以访问的到
@MultipartConfig//这个是代表上传文件的注解
public class AddContactServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//这是增加联系人的servlet 首先设置字符集request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//新建一个contact对象 用来存储数据库中获取的数据Contact contact = new Contact();//通过前端所对应的键名来获取相应的值String name = request.getParameter("name");String gender = request.getParameter("gender");String age = request.getParameter("age");String phone = request.getParameter("phone");String email = request.getParameter("email");//这里是上传文件 获取上传的对象Part qq = request.getPart("qq");//获取所上传文件的名字String qqName = qq.getSubmittedFileName();//为了避免上传的文件后,文件重复 每次上传文件都会通过UUID 工具类获取一个随机的字符串作为前缀名String replace = UUID.randomUUID().toString().replace("-", "");//我是把文件上传到另一个tomcat服务器里 所以这里把他的路径给出来了String uploadPath = "D:\\apache-tomcat-8.5.31\\webapps\\imgs";//通过路径创建一个新的文件对象File file = new File(uploadPath);//如果没有这个文件的话,就创建if (!file.exists()){file.mkdirs();}//最后组成文件的名字String uploadFileName = replace+qqName;//然后给他上传一下,参数为(路径+文件名) 注意这两个之间要加斜杠qq.write(uploadPath+"/"+uploadFileName);//接着赋值给对象contact.setName(name);contact.setAge(Integer.parseInt(age));contact.setEmail(email);contact.setGender(gender);contact.setPhone(phone);contact.setQq(uploadFileName);//接着调用addContact方法ContactService contactService = new ContactServiceImpl();try {contactService.addContact(contact);} catch (MyException e) {request.setAttribute("msg",e.getMessage());request.getRequestDispatcher("addContact.jsp").forward(request,response);}//因为不需要传值 重定向到首页面response.sendRedirect(request.getContextPath()+"/pageServlet");}
}
package com.javacoffee.web;import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;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.Arrays;@WebServlet("/contactDeleteAllServlet")
public class ContactDeleteAllServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String[] cids = request.getParameterValues("cids");if (cids != null) {ContactService contactService = new ContactServiceImpl();contactService.deleteAll(cids);response.sendRedirect(request.getContextPath()+"/pageServlet");}else {response.sendRedirect(request.getContextPath() + "/pageServlet");}}
}
package com.javacoffee.web;import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;
import com.javacoffee.util.PageBean;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;@WebServlet("/contactDeleteServlet")
public class ContactDeleteServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");ContactService contactService = new ContactServiceImpl();String cid = request.getParameter("cid");contactService.deleteContact(Integer.parseInt(cid));response.sendRedirect(request.getContextPath()+"/pageServlet");}
}
package com.javacoffee.web;import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;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.List;@WebServlet("/contactFindAllServlet")
public class ContactFindAllServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");ContactService contactService = new ContactServiceImpl();List<Contact> contactList = contactService.findAll();request.setAttribute("contactList",contactList);request.getRequestDispatcher("findAll.jsp").forward(request,response);}
}
package com.javacoffee.web;import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;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("/findByIdServlet")
public class FindByIdServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");ContactService contactService = new ContactServiceImpl();String cid = request.getParameter("cid");Contact contact = contactService.findById(Integer.parseInt(cid));request.setAttribute("contact",contact);request.getRequestDispatcher("update.jsp").forward(request,response);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}
package com.javacoffee.web;import com.javacoffee.pojo.Client;
import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ClientService;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ClientServiceImpl;
import com.javacoffee.service.impl.ContactServiceImpl;import javax.servlet.RequestDispatcher;
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;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ClientService clientService = new ClientServiceImpl();//获取前端输入框的数据String username = request.getParameter("username");String password = request.getParameter("password");//调用login方法 并返回client对象Client client = clientService.login(username,password);//如果client不为空的话也就是有这个账号密码  就 将client存入session 转发到主界面 也就是登录成功跳转if (client != null){HttpSession session = request.getSession();session.setAttribute("client",client);request.getRequestDispatcher("pageServlet").forward(request,response);}else {//如果为空就代表没有这个代码 就重定向到登陆界面response.sendRedirect(request.getContextPath()+"/login.jsp");}}
}
package com.javacoffee.web;import com.javacoffee.pojo.Client;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;
import com.javacoffee.util.PageBean;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;@WebServlet("/pageServlet")
public class PageServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String pageNum = request.getParameter("pageNum");if (pageNum==null){pageNum="1";}Integer pageSize = 4;PageBean pageBean1 = new PageBean();pageBean1.setPageNum(Integer.parseInt(pageNum));pageBean1.setPageSize(pageSize);ContactService contactService = new ContactServiceImpl();PageBean pageBean = contactService.findByPage(pageBean1);request.setAttribute("pageBean",pageBean);HttpSession session = request.getSession(false);Client client = (Client)session.getAttribute("client");request.setAttribute("client",client);request.getRequestDispatcher("findAll.jsp").forward(request,response);}
}
package com.javacoffee.web;import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;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("/selectPhoneServlet")
public class SelectPhoneServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String phone = request.getParameter("phone");ContactService contactService = new ContactServiceImpl();Boolean statement = contactService.selectPhone(phone);if (statement){response.getWriter().write("noExist");}else {response.getWriter().write("exist");}}
}
package com.javacoffee.web;import com.javacoffee.pojo.Contact;
import com.javacoffee.service.ContactService;
import com.javacoffee.service.impl.ContactServiceImpl;
import com.javacoffee.util.PageBean;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.File;
import java.io.IOException;
import java.util.UUID;@WebServlet("/updateServlet")
@MultipartConfig
public class UpdateServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String cid = request.getParameter("cid");String name = request.getParameter("name");String gender = request.getParameter("gender");String age = request.getParameter("age");String phone = request.getParameter("phone");String email = request.getParameter("email");Part qq = request.getPart("qq");String updateFilePath = "D:\\apache-tomcat-8.5.31\\webapps\\imgs";File file = new File(updateFilePath);if (file.exists()) {file.mkdirs();}String submittedFileName = qq.getSubmittedFileName();String updateFileName = UUID.randomUUID().toString().replace("-", "") + submittedFileName;qq.write(updateFilePath + "\\" + updateFileName);ContactService contactService = new ContactServiceImpl();Contact contact = new Contact();contact.setCid(Integer.parseInt(cid));contact.setName(name);contact.setAge(Integer.parseInt(age));contact.setEmail(email);contact.setGender(gender);contact.setPhone(phone);contact.setQq(updateFileName);contactService.updateContact(contact);response.sendRedirect(request.getContextPath() + "/pageServlet");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}

前端代码

<%--Created by IntelliJ IDEA.User: 86156Date: 2021/9/30Time: 15:10To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录界面</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"></head>
<body style="background-color:burlywood">
<center><h1>用户登陆页面</h1></center>
<div style="background-color: beige;width: 500px;height: 300px;position: absolute;top: 100px;left:520px;border-radius: 10px">
<form class="form-horizontal" action="loginServlet" method="post"><div style="position: absolute;top: 50px;left: 100px"><div class="form-group"><label for="inputEmail3" class="col-sm-2 control-label">UserName:</label><div class="col-sm-10" style="position: absolute;left: 100px;width: 200px"><input type="text" name="username" class="form-control" id="inputEmail3" placeholder="Email" ></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">PassWord:</label><div class="col-sm-10" style="position: absolute;left: 100px;width: 200px"><input type="password" name="password" class="form-control" id="inputPassword3" placeholder="Password" ></div></div><br><div class="form-group" style="position: absolute;left: 170px"><div class="col-sm-offset-2 col-sm-10"><button type="submit" class="btn btn-default" style="width: 90px">登录</button></div></div></div>
</form>
</div>
</body>
</html>
<%--Created by IntelliJ IDEA.User: 86156Date: 2021/9/28Time: 11:14To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title><style>table{text-align: center;vertical-align: middle;}</style><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body bgcolor="#6495ed">
<font color="#deb887" size="6" style="background-color: beige">欢迎:${client.username}&nbsp;登录!</font>
<form action="contactDeleteAllServlet" method="post" >
<table class="table table-hover table-bordered" style="width: 80%" align="center"><tr class="success" style="font-weight: bold"><td><input type="checkbox"  id="cids" onclick="selectAll()">全选</td><td>编号</td><td>姓名</td><td>性别</td><td>年龄</td><td>电话</td><td>邮箱</td><td>QQ</td><td>操作</td></tr>
<%--    <c:forEach items="${contactList}" var="contactList" varStatus="c">--%><c:forEach items="${pageBean.pageData}" var="contactList" varStatus="c"><tr class="active" style="vertical-align: center"><td align="center"><input type="checkbox" class="checkbox" name="cids" value="${contactList.cid}"></td><td>${c.count}</td><td>${contactList.name}</td><td>${contactList.gender}</td><td>${contactList.age}</td><td>${contactList.phone}</td><td>${contactList.email}</td>
<%--        //图片显示的路径 我的是自己又开了一个tomcat端口号为9999--%><td><img src="http://10.8.159.4:9999/imgs/${contactList.qq}" width="60" height="60"></td><td><a href="${pageContext.request.contextPath}/findByIdServlet?cid=${contactList.cid}">修改</a>&nbsp;<a href="${pageContext.request.contextPath}/contactDeleteServlet?cid=${contactList.cid}">删除</a><c:if test="${pageBean.pageData==null}">${pageBean.pageNum=pageBean.pageNum-1}</c:if></td></tr></c:forEach><tr class="warning" ><td colspan="9" align="center"><a href="addContact.jsp">[添加联系人]</a></td></tr><tr class="warning" ><td colspan="9" align="center"><input type="submit" value="全部删除"></td></tr><tr class="warning" ><td colspan="9" align="center">&nbsp;&nbsp;第${pageBean.pageNum}页&nbsp;&nbsp;${pageBean.pageNum}/${pageBean.totalCount}页&nbsp;&nbsp;<a href="${pageContext.request.contextPath}/pageServlet?pageNum=1">首页</a><c:if test="${pageBean.pageNum == 1}"><a>上一页</a></c:if><c:if test="${pageBean.pageNum > 1}"><a href="${pageContext.request.contextPath}/pageServlet?pageNum=${pageBean.pageNum-1}">上一页</a></c:if><c:if test="${pageBean.pageNum == pageBean.totalCount}"><a>下一页</a></c:if><c:if test="${pageBean.pageNum < pageBean.totalCount}"><a href="${pageContext.request.contextPath}/pageServlet?pageNum=${pageBean.pageNum+1}">下一页</a></c:if><a href="${pageContext.request.contextPath}/pageServlet?pageNum=${pageBean.totalCount}">尾页</a></td></tr>
</table>
</form>
</body>
<script type="application/javascript">function selectAll() {var cids = document.getElementById("cids");var elementsByClassName = document.getElementsByClassName("checkbox");for (var i = 0; i < elementsByClassName.length; i++) {elementsByClassName[i].checked = cids.checked;}}
</script>
</html>
<%--Created by IntelliJ IDEA.User: 86156Date: 2021/9/28Time: 15:08To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>添加联系人</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script></head><body>
<center><h3>添加联系人</h3></center><form action="addContactServlet" method="post" enctype="multipart/form-data"><table align="center" border="1" width="300px" class="table table-bordered table-hover"><tr class="warning"><td colspan="2"><font color="red" size="5">${msg}</font></td></tr><tr class="success"><th>姓名</th><td><input type="text" name="name"/></td></tr><tr class="warning"><th >性别</th><td><input type="radio" name="gender" value="男" checked="checked" />男<input type="radio" name="gender" value="女"/>女</td></tr><tr class="active"><th>年龄</th><td><input type="text" name="age"/></td></tr><tr class="danger"><th>电话</th><td><input type="text" name="phone" id="phone" onfocus="waring()" onblur="findPhone()"/><span id="phoneSpan"></span></td></tr><tr class="info"><th>邮箱</th><td><input type="text" name="email"/></td></tr><tr><th>QQ</th><td><input type="file" name="qq"/></td></tr><tr><td colspan="2" align="center"><input type="submit" value="保存"/>&nbsp;<input type="reset" value="重置"/></td></tr></table>
</form>
</body>
<script type="application/javascript">function waring() {var elementById = document.getElementById("phoneSpan");elementById.innerHTML="手机号为11位".fontcolor("red");}function findPhone() {var elementById = document.getElementById("phoneSpan");var selectPhone = document.getElementById("phone").value;$.get("selectPhoneServlet",{phone:selectPhone},function (backdata) {if (backdata=="exist"){elementById.innerHTML="手机号已存在".fontcolor("red");}else if (backdata=="noExist") {elementById.innerHTML="手机号可以使用".fontcolor("green");}},"text")}
</script>
</html>
<%--Created by IntelliJ IDEA.User: 86156Date: 2021/9/28Time: 19:12To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>修改联系人</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head><body>
<center><h3>修改联系人</h3></center>
<form action="updateServlet" method="post" enctype="multipart/form-data"><input type="hidden" name="cid" value="${contact.cid}"><table align="center" border="1" width="300px" class="table table-hover table-bordered"><tr class="active"><th>姓名</th><td><input type="text" name="name" value="${contact.name}"/></td></tr><tr class="success"><th>性别</th><c:if test="${contact.gender=='男'}"><td><input type="radio" name="gender" value="男" checked="checked"/>男<input type="radio" name="gender" value="女"/>女</td></c:if><c:if test="${contact.gender=='女'}"><td><input type="radio" name="gender" value="男"/>男<input type="radio" name="gender" value="女" checked="checked"/>女</td></c:if></tr><tr class="warning"><th>年龄</th><td><input type="text" name="age" value="${contact.age}"/></td></tr><tr class="info"><th>电话</th><td><input type="text" name="phone" value="${contact.phone}"/></td></tr><tr class="success"><th>邮箱</th><td><input type="text" name="email" value="${contact.email}"/></td></tr><tr class="danger"><th>QQ</th><td><img src="http://localhost:9999/imgs/${contact.qq}" width="60" height="60"><input type="file" name="qq"/></td></tr><tr><td colspan="2" align="center"><input type="submit" value="保存"/>&nbsp;<input type="reset" value="重置"/></td></tr></table>
</form>
</body>
</html>

5.显示效果

5.1登录界面

5.2主界面

5.3添加界面

5.4修改界面

Java 简单的用户管理系统(代码注释超全超详细!!!)相关推荐

  1. java GUI实现用户管理系统

    使用Java GUI实现用户管理系统,连接MYSQL数据库,这是登录界面 下面是用户管理界面,登录之后可以进行相关操作 主要实现过程:启动程序 package manage;public class ...

  2. java简单的食品管理系统

    java简单的食品管理系统 实现功能如下: 1.添加食品 2.查找食品信息 3.修改食品价格 4.删除食品 5.退出此系统 package study5;import java.io.Buffered ...

  3. Java:计算机编程语言Java的简介、安装(编程环境/工具)、学习路线(如何学习Java以及几十项代码编程案例分析)之详细攻略

    Java:计算机编程语言Java的简介.安装(编程环境/工具).学习路线(如何学习Java以及几十项代码编程案例分析)之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编 ...

  4. ensp启动设备蓝屏_超全超详细的电脑蓝屏问题解决方案汇总

    生活太难了!每天搬砖已经够不容易,电脑还作妖: 设计图还差最后一个图层,蓝屏了!!财务工资表格马上统计完,蓝屏了?!熬了一宿马上写完1万字稿件,蓝屏了- 今天,我就带大家轻松搞定蓝屏. 什么是蓝屏 蓝 ...

  5. linux命令行开头是sh,shell脚本语言的使用(超全超详细)

    1.shell的概述 shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又 ...

  6. linux中写脚本一般用语言,shell脚本语言的使用(超全超详细)

    1.shell的概述 shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又 ...

  7. 超全超详细的HTTP状态码大全

    超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. ...

  8. Java—简单的图书管理系统

    简单的图书管理系统 通过数据源和DAO对象访问数据库.其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图. • 模型包括2个JavaBean:BookBean用于 ...

  9. 基于java+Mysql的志愿者管理系统代码分享

    源码编号:F-B03 项目类型:Java EE项目(开源免费) 项目名称:基于jap+Servlet的志愿者管理系统代码(volunteer-web) 用户类型:双角色(志愿者和管理员) 项目架构:B ...

最新文章

  1. java读取指定package下的所有class
  2. C#开发Unity游戏教程之判断语句
  3. python 图片旋转角度_OpenCV获取图像的旋转角度
  4. Linux学习笔记8
  5. 负margin应用案例几则(转载+总结)
  6. SQL数据库语言基础之SqlServer分组查询总结
  7. Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划
  8. php策略模式作用,PHP设计模式之策略模式详解
  9. Windows DLL 注入技术
  10. C++代码审查工具Cppcheck和TscanCode
  11. 微信nickname乱码 php,CSV中微信名字乱码 问题
  12. 如何查计算机硬盘型号,如何查看硬盘的型号
  13. JS中的curry化(柯里化)
  14. 【Pygame实战】第三版本最终确认——《愤怒的小鸟梦幻爆破》上线回归,爆赞~
  15. c语言编程工具栏没有了,2009计算机二级C语言:工具栏,可拖动,并在被隐藏的地方显示的实现代码...
  16. 虹软人脸识别 - 人脸特征数据的存取
  17. 洛谷P7583[COCI2012-2013#1] DOM
  18. PAT A1110 Complete Binary Tree ——雨打梨花深闭门
  19. kali2021.1安装openVas
  20. 代码整洁之道核心记要(一)

热门文章

  1. 鲲鹏与江西才俊的七夕之约
  2. tf.greater()
  3. 2022华数杯B题论文思路分析+完整代码(水下机器人组装计划)(一二问答案接出来和标准答案一样)(问题三四逼近正确答案)(完整论文,代码可直接跑)
  4. linux信号函数signal(SIGCHLD, SIG_IGN)
  5. 哈工大SCIR倾力打造NLP新书,详解预训练语言模型
  6. 966. 元音拼写检查器
  7. 苹果cms(mac cms)安装和避雷
  8. 手机端网页尺寸html,手机端网页设计尺寸_html/css_WEB-ITnose
  9. 服务器主板网卡接口Dedicate lan和share lan的区别
  10. 使用ffmpeg调整图像大小