基于Java Servlet 构建的用户信息管理系统
项目展示:http://101.37.30.192:8080/userManger_w/login.html
项目二维码
登录: root_w 123
核心功能展示
- 登录
- 注册
- 添加用户信息
- 删除某一个用户信息
- 删除选中的用户信息
- 分页查询所有用户信息
- 模糊查询用户信息
- 更新用户信息
重要知识点
- 简单的Web服务器设计能力
- Java 操作 MySQL 数据库
- 数据库设计
- json 的使用
- 强化 HTTP 协议的理解
- Servlet的使用
- Java集合的使用
- 前端知识的简单使用,比如:HTML+CSS+JS
整体架构
项目整体基于HTTP协议,前端使用HTML+CSS+JS构建页面整体布局,后端采用分层结构,分为Servlet层,
Service层,Dao层的设计,这样的设计可以让我们的项目代码实现高内聚低耦合。
数据库设计
只需要一张用户表,表示用户的信息
database if exists usermanger;
create DATABASE if not exists usermanger character set utf8;
use usermanger;
drop table if exists usermessage;
create table `usermessage` (
`id` INT PRIMARY KEY auto_increment,
`name` varchar (60),
`username` varchar (60) default 'bit',
`password` varchar (60) default '123456',
`gender` varchar (4),
`age` int,
`address` varchar (90),
`qq` varchar (20),
`email` varchar (30)
);
INSERT INTO usermessage VALUES(1,'张飞','zhangfei','123','男',18,'成都','1262913815','126@qq.com');
INSERT INTO usermessage VALUES(2,'关羽','guanyu','1234','男',18,'陕西','1262913816','1262@qq.com');
INSERT INTO usermessage VALUES(3,'张三','zhangsan','1235','女',19,'陕西','1262913817','1263@qq.com');
INSERT INTO usermessage VALUES(4,'李四','lisi','1236','男',20,'北京','1262913818','1264@qq.com');
INSERT INTO usermessage VALUES(5,'王五','wangwu','1237','女',21,'陕西','1262913819','1265@qq.com');
INSERT INTO usermessage VALUES(6,'孙权','sunquan','1238','男',22,'上海','1262913814','1266@qq.com');
INSERT INTO usermessage VALUES(7,'孙悟空','sunwukong','1239','男',23,'陕西','1262913813','1267@qq.com');
服务器 API 设计
登录
请求: —————————— 响应:
POST /loginServlet ———— {msg: true}
添加用户
请求:————————————响应:
POST /addServlet——————{msg: true}
删除某一个用户信息
请求:
GET /deleteServlet?id=1
删除选中用户信息
请求:————————————————响应:
POST /deleteSelectedServlet——————{msg: true}
分页查询所有用户信息
请求:————————————————————响应:
POST /findByPageServlet—————— 响应体内容为,每一页的用户信息
data:{currentPage,rows,name,address,email}
模糊查询用户信息
请求:————————————————————响应:
POST /findByPageServlet—————— 响应体内容为,每一页的用户信息
data:{currentPage,rows,name,address,email}
更新用户信息
-------------------更新用户信息之前,先请求得到要修改的用户的信息--------------------------
请求:——————————————响应:
POST /returnServlet————————当前需要更新的用户的信息
--------------------------更新完成后,提交更新信息请求------------------------------------
请求:——————————————响应:
POST /updateServlet——————{msg: true}
创建一个 JavaWeb 项目
创建entity包
/**
* @Date 2020/9/3 10:50
* @Author Wang
*/
package entiy;
public class User {
private int id;
private String name;
private String username;
private String password;
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 getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", address='" + address + '\'' +
", qq='" + qq + '\'' +
", email='" + email + '\'' +
'}';
}
}
创建分页对象
package entiy;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Description: 分页对象
* @Author Wang
* Date: 2020-07-15
* Time: 18:44
*/
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;
}
}
创建一个util包,创建DBUtil类。(连接数据库)
ps:屏蔽为本地数据库和云端数据库有区别的地方
/**
* @Date 2020/9/3 10:46
* @Author Wang
*/
package util;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
private static String url = "jdbc:mysql://127.0.0.1:3306/usermanger_w?useSSL=false";
//private static String password = "1234";
private static String password = "123456";//云
private static String username = "root";
private static volatile DataSource DATASOURCE;
private static DataSource getDataSource(){
// 双重校验锁
if(DATASOURCE == null){
synchronized (DBUtil.class){
if(DATASOURCE == null){
DATASOURCE = new MysqlDataSource();
((MysqlDataSource) DATASOURCE).setUrl(url);
((MysqlDataSource) DATASOURCE).setUser(username);
((MysqlDataSource) DATASOURCE).setPassword(password);
}
}
}
return DATASOURCE;
}
public static Connection getConnection(){
//System.out.println("getConnection1");
try {
//从池子里获取连接
Connection connection = getDataSource