项目预览
实现代码
①/day_0514_06/src/com/qst/util/DBUtil.java
package com.qst.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
/**
* 得到数据库连接
*/
public Connection getConnection() {
// 通过Config获取数据库配置信息
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://39.105.54.45:3306/zhuxueliang?useUnicod=true&characterEncoding=utf-8";
String user ="root";
String pwd = "123";
try {
// 指定驱动程序
Class.forName(driver);
// 建立数据库连结
conn = DriverManager.getConnection(url, user, pwd);
} catch (Exception e) {
// 如果连接过程出现异常,抛出异常信息
//throw new SQLException("驱动错误或连接失败!");
return null;
}
return conn;
}
/**
* 释放资源
*/
public void closeAll() {
// 如果rs不空,关闭rs
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 如果pstmt不空,关闭pstmt
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 如果conn不空,关闭conn
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 执行SQL语句,可以进行查询
*/
public ResultSet executeQuery(String preparedSql, Object[] param) {
// 处理SQL,执行SQL
try {
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// 执行SQL语句
rs = pstmt.executeQuery();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
}
return rs;
}
/**
* 执行SQL语句,可以进行增、删、改的操作,不能执行查询
* @throws SQLException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public int executeUpdate(String preparedSql, Object[] param) {
int num = 0;
// 处理SQL,执行SQL
try {
this.getConnection();
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// 执行SQL语句
num = pstmt.executeUpdate();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
}finally {
this.closeAll();
}
return num;
}
public static void main(String[] args) {
DBUtil dbUtil = new DBUtil();
System.out.println(dbUtil.getConnection());
}
}
②/day_0514_06/src/com/qst/pojos/User.java
package com.qst.pojos;
public class User {
// id,userName,userPwd,sex,age
private int id;
private String userName;
private String userPwd;
private String userRePwd;
private String sex;
private int age;
public User() {
super();
}
public User(String userName, String userPwd, String userRePwd, String sex, int age) {
super();
this.userName = userName;
this.userPwd = userPwd;
this.userRePwd = userRePwd;
this.sex = sex;
this.age = age;
}
public User(int id, String userName, String userPwd, String userRePwd, String sex, int age) {
super();
this.id = id;
this.userName = userName;
this.userPwd = userPwd;
this.userRePwd = userRePwd;
this.sex = sex;
this.age = age;
}
public User(int id, String userName, String userPwd, String sex, int age) {
super();
this.id = id;
this.userName = userName;
this.userPwd = userPwd;
this.sex = sex;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUserRePwd() {
return userRePwd;
}
public void setUserRePwd(String userRePwd) {
this.userRePwd = userRePwd;
}
/**
* 重写toString方法
*/
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("用户Id:" + id + "; ");
sb.append("用户名:" + userName + "; ");
sb.append("密码:" + userPwd + "; ");
sb.append("性别:" + (sex.equals("1")?'男':'女') + "; ");
sb.append("年龄:" + age + "; ");
sb.append("<a href=\"${pageContext.request.contextPath}/UserAction?method=userList\">隐藏</a>");
return sb.toString();
}
}
③/day_0514_06/src/com/qst/pojos/Page.java
package com.qst.pojos;
import java.util.List;
public class Page<T> {
private Integer pageNow;//当前页数
// private Integer pageCount;总页数
private Integer rowCount;//总行数
private Integer pageSize;//每一页行数
private List<T> pageRow;//当前页表格数据
public Page() {
super();
// TODO Auto-generated constructor stub
}
public Page(Integer pageNow,Integer rowCount, Integer pageSize, List<T> pageRow) {
super();
this.pageNow = pageNow;
this.rowCount = rowCount;
this.pageSize = pageSize;
this.pageRow = pageRow;
}
public Integer getPageNow() {
return pageNow;
}
public void setPageNow(Integer pageNow) {
this.pageNow = pageNow;
}
public Integer getPageCount() {
Integer pageCount = rowCount%pageSize==0?rowCount/pageSize:(rowCount/pageSize+1);
return pageCount;
}
/*public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}*/
public Integer getRowCount() {
return rowCount;
}
public void setRowCount(Integer rowCount) {
this.rowCount = rowCount;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public List<T> getpageRow() {
return pageRow;
}
public void setpageRow(List<T> pageRow) {
this.pageRow = pageRow;
}
}
④/day_0514_06/src/com/qst/dao/UserDao.java
package com.qst.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.qst.pojos.Page;
import com.qst.pojos.User;
import com.qst.util.DBUtil;
public class UserDao {
DBUtil dbUtil = null;
public UserDao() {
super();
dbUtil = new DBUtil();
}
/**
* 添加方法
* @param user
* @return
*/
public int save(User user) {
// id,userName,userPwd,sex,age
String sql = "insert into t_User(userName,userPwd,sex,age) values(?,?,?,?)";
Object[] param = { user.getUserName(), user.getUserPwd(), user.getSex(), user.getAge() };
dbUtil.getConnection();
int result = dbUtil.executeUpdate(sql, param);
dbUtil.closeAll();
return result;
}
/**
* 查询方法
*
* @param userName
* @return User对象
*/
public User readUser(String userName) {
User user = null;
String sql = "select * from t_user where userName=?";
Object[] param = { userName };
dbUtil.getConnection();
ResultSet rs = dbUtil.executeQuery(sql, param);
try {
if (rs.next()) {
user = new User(rs.getInt("id"), rs.getString("userName"), rs.getString("userPwd"), rs.getString("sex"),
rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbUtil.closeAll();
}
return user;
}
/**
* 修改方法
*
* @param user
* @return result
*/
public int updateUser(User user) {
// id,userName,userPwd,sex,age
String sql = "update t_user set userPwd=?,sex=?,age=? where userName=?";
Object[] param = { user.getUserPwd(), user.getSex(), user.getAge(), user.getUserName() };
dbUtil.getConnection();
int result = dbUtil.executeUpdate(sql, param);
dbUtil.closeAll();
return result;
}
/**
* 删除方法
*
* @param id
* userId
* @return result
*/
public int deleteUser(Integer id) {
String sql = "delete from t_user where id=?";
Object[] param = { id };
dbUtil.getConnection();
int result = dbUtil.executeUpdate(sql, param);
dbUtil.closeAll();
return result;
}
/**
* 分页方法
* @param pageSize 每一页的行数
* @param pageNow 当前页
* @return page
*/
public Page<User> queryPage(int pageSize, int pageNow) {
Page<User> page = new Page<User>();
page.setPageSize(pageSize);
page.setPageNow(pageNow);
String sql = "select count(*) from t_user";
dbUtil.getConnection();
ResultSet rs = dbUtil.executeQuery(sql, null);
try {
rs.next();
Integer rowCount = rs.getInt(1);
page.setRowCount(rowCount);
List<User> pageRow = new ArrayList<User>();
String preparedSql = "select * from t_user limit ?,?";
Object[] param = { page.getPageSize() *( page.getPageNow() - 1), page.getPageSize() };
ResultSet res = dbUtil.executeQuery(preparedSql, param);
while (res.next()) {
User user = new User(res.getInt("id"), res.getString("userName"), res.getString("userPwd"),
res.getString("sex"), res.getInt("age"));
pageRow.add(user);
}
page.setpageRow(pageRow);
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbUtil.closeAll();
}
return page;
}
}
⑤/day_0514_06/src/com/qst/service/UserService.java
package com.qst.service;
import com.qst.dao.UserDao;
import com.qst.pojos.Page;
import com.qst.pojos.User;
public class UserService {
UserDao userDao = null;
public UserService() {
super();
this.userDao = new UserDao();
}
// 业务逻辑
public boolean addUser(User user) {
// 判断用户的年龄是否大于16周岁
// 判断一下用户的密码是否包含特殊字符(汉子)
// 判断用户的密码和确认密码相同
// return userDao.save(user)>0;
int result = userDao.save(user);
if (result > 0) {
return true;
}
return false;
}
public User readUser(String userName) {
return userDao.readUser(userName);
}
public boolean updateUser(User user) {
int result = userDao.updateUser(user);
if (result > 0) {
return true;
}
return false;
}
public boolean deleteUser(Integer id) {
int result = userDao.deleteUser(id);
if (result > 0) {
return true;
}
return false;
}
public Page<User> queryPage(Integer pageSize, Integer pageNow) {
return userDao.queryPage(pageSize, pageNow);
}
}
⑥/day_0514_06/src/com/qst/action/UserAction.java
package com.qst.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.qst.pojos.Page;
import com.qst.pojos.User;
import com.qst.service.UserService;
public class UserAction extends HttpServlet {
private static final long serialVersionUID = 1L;
public UserAction() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getParameter("method");
if ("addUser".equals(method)) {
addUser(request, response);
} else if ("userList".equals(method)) {
showUserList(request, response);
} else if ("readUser".equals(method)) {
readUser(request, response);
} else {
deleteUser(request, response, method);
}
}
/**
* 分页显示模块
*/
private void showUserList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserService userService = new UserService();
// List<User> userList = userService.getAllUserInfo();
String pageNow = request.getParameter("pageNow");
if (pageNow == null||pageNow.isEmpty()) {//如果当前页为空或者首次使用则pageNow=1
Page<User> userList = userService.queryPage(5, 1);
request.setAttribute("userList", userList);
}else {
Page<User> userList = userService.queryPage(5, Integer.parseInt(pageNow));
request.setAttribute("userList", userList);
}
request.getRequestDispatcher("/userList.jsp").forward(request, response);
}
/**
* 添加和修改用户模块
*/
private void addUser(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
String userRePwd = request.getParameter("userRePwd");
String ageStr = request.getParameter("age");
String sex = request.getParameter("sex");
if(userName==null||userPwd==null||!userPwd.equals(userRePwd)||ageStr==null||sex==null) {
request.getSession().setAttribute("message", "更新失败,请重新填写!");
response.sendRedirect(request.getContextPath()+"/addUser.jsp");
}else {
User user = new User(userName, userPwd, userRePwd, sex, Integer.parseInt(ageStr));
UserService userService = new UserService();
User users = userService.readUser(userName);
if (users != null) {//判断用户(users)是否存在,若存在使用修改方法,若不存在则添加。
userService.updateUser(user);
} else {
userService.addUser(user);
}
showUserList(request, response);
}
}
/**
* 查询用户模块
*/
private void readUser(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
UserService userService = new UserService();
User users = userService.readUser(userName);
request.setAttribute("users", users.toString());
showUserList(request, response);
}
/**
* 删除用户模块
*/
private void deleteUser(HttpServletRequest request, HttpServletResponse response, String method)
throws ServletException, IOException {
UserService userService = new UserService();
Integer id = Integer.parseInt(method);
userService.deleteUser(id);
showUserList(request, response);
}
}
⑦/day_0514_06/WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>day_0514_06</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>UserAction</servlet-name>
<servlet-class>com.qst.action.UserAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserAction</servlet-name>
<url-pattern>/UserAction</url-pattern>
</servlet-mapping>
</web-app>
⑧/day_0514_06/WebContent/addUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>更新页面</title>
</head>
<body>
<font color="red">${message}</font>
<form action="/day_0514_06/UserAction" method="post">
<table>
<tr>
<th colspan="2">添加用户界面</th>
</tr>
<tr>
<td>用户名</td>
<td><input type="text" name="userName" placeholder="请输入用户名" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="userPwd" placeholder="请输入密码" /></td>
</tr>
<tr>
<td>确认密码</td>
<td><input type="password" name="userRePwd" placeholder="请输入密码" /></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="number" name="age" min="16" max="100" /></td>
</tr>
<tr>
<td>性别</td>
<td><input type="radio" name="sex" value="1" />男 <input
type="radio" name="sex" value="" />女</td>
</tr>
<tr>
<td colspan="2"><input type="hidden" value="addUser"
name="method" /> <input type="submit" value="更新数据" /></td>
</tr>
</table>
</form>
</body>
</html>
⑨/day_0514_06/WebContent/userList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="com.qst.pojos.Page" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示页面</title>
<style type="text/css">
#numberPage {
border: 1px solid #000;
padding: 1px 7px;
text-decoration: none;
}
#tableStyle {
width: 75%;
border-collapse: collapse;
}
#bodyStyle {
text-align: center;
}
/* 参考:https://blog.csdn.net/LJXZDN/article/details/79575587 */
table tr:nth-child(odd) {
background: #ccc;
}
</style>
</head>
<body id="bodyStyle">
<!-- 查询模块 -->
<form action="${pageContext.request.contextPath}/UserAction" method="post">
用户名:<input type="text" name="userName" /> <input type="hidden"
value="readUser" name="method"> <input type="submit"
value="查询">
</form>
${users}
<br />
<!-- 表格模块 -->
<table border="1" align="center" id="tableStyle">
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
<th>性别</th>
<th>年龄</th>
<th>更新</th>
<th>删除</th>
</tr>
<c:forEach items="${userList.pageRow}" var="user">
<tr>
<td>${user.id }</td>
<td>${user.userName }</td>
<td>${user.userPwd }</td>
<td>${user.sex==0?'女':'男' }</td>
<td>${user.age }</td>
<td><a href="addUser.jsp">更新</a></td>
<td><a href="${pageContext.request.contextPath}/UserAction?method=${user.id }">删除</a></td>
</tr>
</c:forEach>
</table>
<br />
<!-- 分页模块=>注意:判断是否头溢出和尾溢出 -->
<c:out value="第${userList.pageNow}页/共${userList.pageCount}页"></c:out>
<a href="<c:url value="UserAction?method=userList&pageNow=${1}" />"
id="numberPage">首页</a>
<c:if test="${userList.pageNow > 1}">
<a
href="<c:url value="UserAction?method=userList&pageNow=${userList.pageNow-1}" />"
id="numberPage">上一页</a>
</c:if>
<!--
总页数小于要显示的页数(5页)
begin = 1;
end = ${userList.pageCount};
总页数大于要显示的页数(5页)
begin = ${userList.pageNow - 2 };
end = ${userList.pageNow - 2 };
-->
<c:choose>
<c:when test="${userList.pageCount < userList.pageSize }">
<c:set var="begin" value="1" />
<c:set var="end" value="${userList.pageCount}" />
</c:when>
<c:otherwise>
<c:set var="begin" value="${userList.pageNow - 2 }" />
<c:set var="end" value="${userList.pageNow + 2 }" />
<c:if test="${begin < 1 }">
<c:set var="begin" value="${1}" />
<c:set var="end" value="${5}" />
</c:if>
<c:if test="${end > userList.pageCount }">
<c:set var="begin" value="${userList.pageCount-4}" />
<c:set var="end" value="${userList.pageCount}" />
</c:if>
</c:otherwise>
</c:choose>
<c:forEach var="i" begin="${begin }" end="${end }">
<c:choose>
<c:when test="${i eq userList.pageNow }">
${i}
</c:when>
<c:otherwise>
<a href="<c:url value="UserAction?method=userList&pageNow=${i}" />"
id="numberPage">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${userList.pageNow < userList.pageCount}">
<a
href="<c:url value="UserAction?method=userList&pageNow=${userList.pageNow+1}" />"
id="numberPage">下一页</a>
</c:if>
<a
href="<c:url value="UserAction?method=userList&pageNow=${userList.pageCount}" />"
id="numberPage">尾页</a>
</body>
</html>
⑩t_test.sql
1.创建一张表User(id,userName,userPwd,sex,age) id自增
CREATE TABLE `ssh_test`.`t_user`(
`id` INT NOT NULL AUTO_INCREMENT,
`userName` VARCHAR(50),
`userPwd` VARCHAR(50),
`sex` VARCHAR(2),
`age` INT,
PRIMARY KEY (`id`)
);
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('25','wq6','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('26','wq7','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('27','wq8','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('28','wq9','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('29','wq10','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('30','wq11','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('31','wq12','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('32','wq13','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('33','wq14','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('34','wq15','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('35','wq16','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('36','wq17','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('37','wq18','ewqe','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('38','dsed','1234','','43');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('39','ewq','345','1','34');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('40','ew2q3','123','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('41','ew3','123','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('42','ew3e','321','1','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('43','fdsw','1234','','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('44','dwdw','123','1','43');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('45','swqw','dse','','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('46','qwe','qee','1','23');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('47','qw1','123','','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('48','qw3','123','','32');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('49','sswq','123','1','34');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('50','ww','234','1','22');
insert into `t_user` (`id`, `userName`, `userPwd`, `sex`, `age`) values('51','32','2332','1','43');
运行结果
说明
- 本文是对本人的上一篇博客的改进,代码95%没变,只有博客标题不一样。
- 代码加了注释,整体上不在混乱不堪,无法理解。
- 运用CSS美化了显示页面(包括表格和分页)。