目录
下载地址:https://download.csdn.net/download/HNU_Csee_wjw/12493894
前言
本项目是基于java语言的用户管理系统,选用 Servlet + JSP + MySQL + JDBCTempleat + Duird + BeanUtils + tomcat 技术完成,旨在更深入了解JavaWeb工程的MVC开发模式,仅供交流学习使用,在文末将给出完整代码下载链接。具体效果如下:
将MySQL数据库中存储的信息展示在网页端,实现分页显示,支持添加联系人,删除单个/多个联系人,修改联系人信息,条件查询的功能。内置管理员登陆操作,可供后续继续开发使用。
本项目需要导入的jar包如下:
1 数据库设计
创建user表格,存有id,name,gender,address,qq,email,username,password属性,分别代表每一个用户的id,姓名,性别,年龄,地址,qq号,邮箱,账户名及密码,其中id为主键,如下:
create table user( -- 创建表
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50),
username varchar(50),
password varchar(50)
);
数据库设计完毕之后,相应的把项目中对应的User类也创建出来,属性为以上一个,并提供所有属性的getter和setter方法,类的toString方法。
package domin;
/**
* 对应数据库表的实体类
*/
public class User {
private int id;
private String name;
private String gender;
private int age;
private String address;
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;
}
private String qq;
private String email;
private String username;
private String password;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", address='" + address + '\'' +
", qq='" + qq + '\'' +
", email='" + email + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
2 查询所有用户
查询所有用户并显示的设计逻辑如下图所示:
当点击主界面index.jsp中的查询按钮时,超链接跳转到后台 UserListServlet.java 程序,完成三个步骤:
- 调用service层的findAll(),返回保存有查询到的所有用户信息的List集合
- 将List集合存入request域中,令 key = "users"
- 转发值list.jsp进行页面展示
UserListServlet.java 对应核心代码为:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 调用UserService完成查询
UserService service = new UserServiceImpl();
List<User> users = service.findAll();
// 将list存入request域
request.setAttribute("users", users);
// 转发到list.jsp
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
list.jsp页面采用 jstl + el 语法的 foreach 语句遍历request域中存储的集合,生成表格展示:
<c:forEach items="${users}" var="user" varStatus="s">
<tr>
<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="update.html">修改</a> <a class="btn btn-default btn-sm" href="">删除</a></td>
</tr>
</c:forEach>
service层 UserServiceImpl.java 类定义findAll()方法以供UserListServlet.java 调用:
public class UserServiceImpl implements UserService{
private UserDao dao = new UserDaoImpl();
@Override
public List<User> findAll(){
// 调用Dao完成查询
return dao.findAll();
}
}
该方法调用了dao层 UserDaoImpl.java 中操作数据库查询的findAll()方法:
public class UserDaoImpl implements UserDao{
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<User> findAll(){
// 使用JDBC操作数据库
String sql = "select * from user";
List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
return users;
}
}
操作数据库使用了Spring框架对JDBC的封装——JDBCTemplate对象template,来简化java操作数据库的开发,由于这里要执行的是查询操作,所以只需定义查询所有用户的sql语句并调用template的query方法即可。创建template时需要传入一个连接池类DataSource的对象,可以使用阿里巴巴druid数据库连接池技术来封装JDBC的工具类,该工具类封装了加载配置文件,初始化连接池对象,获取连接池对象以及获取连接Connection对象的功能,具体实现如下:
package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* JDBC工具类 使用Durid连接池
*/
public class JDBCUtils {
private static DataSource ds ;
static {
try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
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();
}
}
相应的druid配置文件为:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day17
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
3 添加联系人功能
添加联系人的设计逻辑如下图所示:
点击添加联系人的按钮之后,跳转至后台 AddUserServlet.java 程序,完成五个步骤:
- 设置编码为"utf-8"防止出现中文乱码
- 获取添加的新的联系人的所有数据
- 根据获取的数据封装联系人为User类的对象
- 调用service层的add()方法完成添加
- 跳转回userListServlet再次查询所有联系人并展示
基于以上步骤,AddUserServlet.java 的主要代码如下:
@WebServlet("/addUserServlet")
public class AddUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
// 获取数据
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();
}
// 调用service保存
UserService service = new UserServiceImpl();
service.addUser(user);
// 跳转到userListServlet
response.sendRedirect(request.getContextPath() + "/userListServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
其中使用了Spring的BeanUtils.populate()方法简化了User类的封装,只需传入初始化的空User类对象user和保存有该user对象的所有属性的map,map又可以由request.getParameterMap()方法快速获取。
添加联系人界面 add.jsp 需要为表单设置action属性,将其指向 addUserServlet
<form action="${pageContext.request.contextPath}/addUserServlet" method="post">
service层 UserServiceImpl.java