文章目录
1. 需求分析
-
完成一个用户信息管理系统(基于 BS 架构),功能如下:
- 分页展示用户信息
- 添加用户信息
- 删除用户信息(可以删除选中用户)
- 修改用户信息(包括用户数据的回显)
- 查询用户信息(可以输入条件,模糊查询)
-
效果图如下:
2. 概要设计
2.1 技术选型
- Tomcat 服务器
- Servlet
- JSP
- Bootstrap
- Mysql 数据库
- Spring JDBC
- Druid 连接池
- BeanUtils
2.2 数据库设计
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`gender` varchar(5) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(32) DEFAULT NULL,
`qq` varchar(20) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.3 分页展示用户功能设计
2.4 添加用户功能设计
2.5 删除用户功能设计
2.6 删除选中用户功能设计
2.7 修改用户功能设计
2.8 查询用户功能设计
3. 开发阶段
3.1 环境搭建
-
创建数据库环境
- 打开 Navicat,新建一个数据库 day17
- 创建 user 表(表的结构概要设计中已给出)
-
创建项目
打开 IDEA,创建一个 Java EE 项目,Java EE version 为 Java EE 7,勾选 Web Application,不勾选 Create web.xml,项目名称为 day17_2
-
导入需要的 jar 包
导入需要的 jar 包到 web/WEB-INF/lib 中,右键 Add as Library
- commons-beanutils-1.8.3.jar
- jstl-impl.jar
- commons-logging-1.1.1.jar
- spring-core-4.2.4.RELEASE.jar
- spring-beans-4.2.4.RELEASE.jar
- javax.servlet.jsp.jstl.jar
- druid-1.0.9.jar
- spring-jdbc-4.2.4.RELEASE.jar
- mysql-connector-java-5.1.18-bin.jar
- spring-tx-4.2.4.RELEASE.jar
-
创建配置文件
在 src 下创建 Druid 配置文件 druid.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/day17 username=root password=123456 initialSize=5 maxActive=10 maxWait=3000
-
修改 Tomcat 配置
- 热部署:将 On ‘Update’ action 修改为 Redeploy 和 On frame deactivation 修改为 Update classes and resourses
- 修改端口号:将 HTTP Port 修改为 80
- 修改虚拟目录:将 Application context 修改为 /day17_2
3.2 前端代码
-
将 Bootstrap 相关的 css,fonts,js 三个文件夹复制到 web 目录下
-
首页 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> <style> div{ text-align: center; } a{ font-size:33px; } </style> <body> <div> <a href="${pageContext.request.contextPath}/FindUserByPageServlet">进入用户信息管理系统 </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> h3 { text-align: center; } #search { float: left; margin: 10px; } #search div { margin-right: 5px; } #add_del { float: right; margin: 10px; } #add_del a { margin-left: 5px; } td, th { text-align: center; } #paging_info { font-size: 15px; margin-left: 10px; line-height: 35px; } </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 flag = false; // 判断是否有选中条目 var cbs = document.getElementsByName("id"); for (var i = 0; i < cbs.length; i++) { if (cbs[i].checked) { // 有一个条目选中了 flag = true; break; } } // 有条目被选中 if (flag) { // 表单提交 document.getElementById("form").submit(); } } } // 全选按钮 // 1.获取第一个 cb document.getElementById("firstCb").onclick = function () { //2.获取下边列表中所有的 cb var cbs = document.getElementsByName("id"); //3.遍历 for (var i = 0; i < cbs.length; i++) { //4.设置这些cbs[i]的checked状态 = firstCb.checked cbs[i].checked = this.checked; } } } </script> </head> <body> <div class="container"> <%--标题--%> <h3>用户信息列表</h3> <%--查询用户信息--%> <form id="search" class="form-inline" action="${pageContext.request.contextPath}/FindUserByPageServlet" method="post"> <div class="form-group"> <label for="exampleInputName2">姓名</label> <input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2"> </div> <div class="form-group"> <label for="exampleInputName3">籍贯</label> <input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3"> </div> <div class="form-group"> <label for="exampleInputEmail2">Email</label> <input type="email" name="email" value="${condition.email[0]}" class="form-control" id="exampleInputEmail2"> </div> <div class="form-group"> <button type="submit" class="btn btn-default">查询</button> </div> </form> <%--增加和删除用户信息按钮--%> <div id="add_del"> <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}/DelSelectedServlet" 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="${userByPage.list}" var="user" varStatus="s"> <tr> <td><input type="checkbox" name="id" 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> <a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除</a> </td> </tr> </c:forEach> </table> </form> <%--分页--%> <nav> <ul class="pagination"> <%--上一页--%> <c:if test="${userByPage.currentPage == 1}"> <li class="disabled"> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> </c:if> <c:if test="${userByPage.currentPage != 1}"> <li> <a href="${pageContext.request.contextPath}/FindUserByPageServlet?currentPage=${userByPage.currentPage-1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> </c:if> <%--第 n 页面--%> <c:forEach begin="1" end="${userByPage.totalPage}" step="1" var="i"> <c:if test="${userByPage.currentPage == i}"> <li class="active"> <a href="${pageContext.request.contextPath}/FindUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a> </li> </c:if> <c:if test="${userByPage.currentPage != i}"> <li> <a href="${pageContext.request.contextPath}/FindUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a> </li> </c:if> </c:forEach> <%--下一页--%> <c:if test="${userByPage.currentPage == userByPage.totalPage}"> <li class="disabled"> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </c:if> <c:if test="${userByPage.currentPage != userByPage.totalPage}"> <li> <a href="${pageContext.request.contextPath}/FindUserByPageServlet?currentPage=${userByPage.currentPage+1}&rows=5&&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </c:if> <%--分页信息--%> <span id="paging_info">共${userByPage.totalCount}条记录,共${userByPage.totalPage}页</span> </ul> </nav> </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> <style> #add { width:400px; } h3 { text-align: center; } #btn { text-align: center; } </style> </head> <body> <div class="container" id="add"> <h3>添加用户</h3> <form action="${pageContext.request.contextPath}/AddUserServlet" 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" id="btn"> <input class="btn btn-primary" type="submit" value="提交" /> <input class="btn btn-default" type="reset" value="重置" /> <a class="btn btn-default" href="${pageContext.request.contextPath}/FindUserByPageServlet">返回</a> </div> </form> </div> </body> </html>
-
修改用户页面 update.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"> <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> <style> #update { width:400px; } h3 { text-align: center; } #btn { text-align: center; } </style> <body> <div class="container" id="update"> <h3>修改用户</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}" readonly="readonly" 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" class="form-control" id="address"> <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" class="form-control" id="qq" name="qq" value="${user.qq}" placeholder="请输入QQ号码"/> </div> <div class="form-group"> <label for="email">Email:</label> <input type="text" class="form-control" id="email" name="email" value="${user.email}" placeholder="请输入邮箱地址"/> </div> <div class="form-group" id="btn"> <input class="btn btn-primary" type="submit" value="提交" /> <input class="btn btn-default" type="reset" value="重置" /> <a class="btn btn-default" href="${pageContext.request.contextPath}/FindUserByPageServlet">返回</a> </div> </form> </div> </body> </html>
3.3 后端代码
-
在 src 中创建 com.zt 包,在其中创建以下包:
- utils
- domain
- dao
- impl
- service
- impl
- web
- servlet
-
utils 包
-
JDBCUtils
package com.zt.utils; 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.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCUtils { // 1.定义静态变量 dataSource private static DataSource dataSource; static { try { // 2.加载配置文件 Properties properties = new Properties(); InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(resourceAsStream); // 3.创建数据库连接池对象,并赋值给 dataSource dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取连接池方法 */ public static DataSource getDataSource() { return dataSource; } /** * 通过数据库连接池获取连接对象 */ public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } /** * 释放资源 */ public static void close(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Statement statement, Connection connection) { close(null, statement, connection); } }
-
-
domain 包
-
User
package com.zt.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; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + ", address='" + address + '\'' + ", qq='" + qq + '\'' + ", email='" + email + '\'' + '}'; } }
-
PageBean
package com.zt.domain; import java.util.List; /** * 分页对象 */ public class PageBean<T> { private int totalCount; // 总记录数 private int totalPage; // 总页码数 private int currentPage; // 当前页码 private int rows; // 每页显示的条数 private List<T> list; // 每页的数据 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 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; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } @Override public String toString() { return "PageBean{" + "totalCount=" + totalCount + ", totalPage=" + totalPage + ", currentPage=" + currentPage + ", rows=" + rows + ", list=" + list + '}'; } }
-
-
dao 包
-
UserDao
package com.zt.dao; import com.zt.domain.User; import java.util.List; import java.util.Map; public interface UserDao { /** * 添加用户信息 * @param user */ public void add(User user); /** * 删除用户信息 * @param id */ public void delete(int id); /** * 查询用户信息 * @param id * @return */ public User find(int id); /** * 更新用户信息 * @param user */ public void update(User user); /** * 查询总记录数 * @return * @param condition */ public int findTotalCount(Map<String, String[]> condition); /** * 分页条件查询用户信息 * @param start * @param rows * @param condition * @return */ public List<User> findByPage(int start, int rows, Map<String, String[]> condition); }
-
UserDaoImpl
package com.zt.dao.impl; import com.zt.dao.UserDao; import com.zt.domain.User; import com.zt.utils.JDBCUtils; 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 操作数据库 private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource()); @Override public void add(User user) { String sql = "insert into user values(null,?,?,?,?,?,?)"; jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail()); } @Override public void delete(int id) { String sql = "delete from user where id = ?"; jdbcTemplate.update(sql,id); } @Override public User find(int id) { String sql = "select * from user where id = ?"; User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id); return user; } @Override public void update(User user) { String sql = "update user set name = ?, gender = ?, age = ?, address = ?, qq = ?, email = ? where id = ?"; jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId()); } @Override public int findTotalCount(Map<String, String[]> condition) { // 1.定义初始化 sql,注意 sql语句后加空格 String sql = "select count(*) from user where 1 = 1 "; StringBuilder stringBuilder = new StringBuilder(sql); // 2.定义参数的集合 params List<Object> params = new ArrayList<Object>(); // 3.遍历 condition Set<String> keySet = condition.keySet(); for (String key : keySet) { // 排除分页条件参数 if("currentPage".equals(key) || "rows".equals(key)){ continue; } // 获取 value String value = condition.get(key)[0]; // 判断 value 是否有值 if(value != null || !"".equals(value)){ // 给 sql 附加条件语句,注意 sql语句前后加空格 stringBuilder.append(" And " + key +" like ? "); // 将 value 放入 params 集合 params.add("%"+value+"%"); } } return jdbcTemplate.queryForObject(stringBuilder.toString(), Integer.class, params.toArray()); } @Override public List<User> findByPage(int start, int rows, Map<String, String[]> condition) { // 1.定义初始化 sql,注意 sql语句后加空格 String sql = "select * from user where 1 = 1 "; StringBuilder stringBuilder = new StringBuilder(sql); // 2.定义参数的集合 params List<Object> params = new ArrayList<Object>(); // 3.遍历 condition Set<String> keySet = condition.keySet(); for (String key : keySet) { // 排除分页条件参数 if("currentPage".equals(key) || "rows".equals(key)){ continue; } // 获取 value String value = condition.get(key)[0]; // 判断 value 是否有值 if(value != null || !"".equals(value)){ // 给 sql 附加条件语句,注意 sql语句前后加空格 stringBuilder.append(" And " + key +" like ? "); // 将 value 放入 params 集合 params.add("%"+value+"%"); } } // 4.添加分页条件 stringBuilder.append(" limit ?,? "); // 5.添加分页条件参数值 params.add(start); params.add(rows); return jdbcTemplate.query(stringBuilder.toString(), new BeanPropertyRowMapper<User>(User.class), params.toArray()); } }
-
-
service 包
-
UserService
package com.zt.service; import com.zt.domain.PageBean; import com.zt.domain.User; import java.util.Map; public interface UserService { /** * 添加用户信息 * @param user */ public void addUser(User user); /** * 删除用户信息 * @param id */ public void deleteUser(String id); /** * 查询用户信息 * @param id */ public User findUser(String id); /** * 更新用户信息 * @param user */ public void updateUser(User user); /** * 分页条件查询用户信息 * @param currentPage * @param rows * @param condition * @return */ public PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> condition); }
-
UserServiceImpl
package com.zt.service.impl; import com.zt.dao.UserDao; import com.zt.dao.impl.UserDaoImpl; import com.zt.domain.PageBean; import com.zt.domain.User; import com.zt.service.UserService; import java.util.List; import java.util.Map; public class UserServiceImpl implements UserService { // 调用 UserDaoImpl 来实现业务逻辑 private UserDao userDao = new UserDaoImpl(); @Override public void addUser(User user) { userDao.add(user); } @Override public void deleteUser(String id) { userDao.delete(Integer.parseInt(id)); } @Override public User findUser(String id) { return userDao.find(Integer.parseInt(id)); } @Override public void updateUser(User user) { userDao.update(user); } @Override public PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> condition) { int currentPage1 = Integer.parseInt(currentPage); int rows1 = Integer.parseInt(rows); // 1.创建一个空的 PageBean 对象 PageBean<User> userPageBean = new PageBean<>(); // 2.设置属性 userPageBean.setCurrentPage(currentPage1); userPageBean.setRows(rows1); // 3.调用 dao 查询总记录数 int totalCount = userDao.findTotalCount(condition); userPageBean.setTotalCount(totalCount); // 4.调用 dao 查询 list 集合 // 计算开始的记录索引 int start = (currentPage1 - 1) * rows1; List<User> byPage = userDao.findByPage(start, rows1, condition); userPageBean.setList(byPage); // 5.计算总页码数 int totalPage = totalCount % rows1 == 0 ? totalCount/rows1 : totalCount/rows1 + 1; userPageBean.setTotalPage(totalPage); return userPageBean; } }
-
-
servlet 包
-
FindUserByPageServlet
package com.zt.web.servlet; import com.zt.domain.PageBean; import com.zt.domain.User; import com.zt.service.UserService; import com.zt.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"); // 每页显示条数 Map<String, String[]> condition = request.getParameterMap(); // 3.参数为空的情况 if(currentPage == null || "".equals(currentPage)) { currentPage = "1"; } if(rows == null || "".equals(rows)) { rows = "5"; } // 4.调用 UserService 完成查询 UserService userService = new UserServiceImpl(); PageBean<User> userByPage = userService.findUserByPage(currentPage, rows, condition); // 5.将 userByPage 存入 request request.setAttribute("userByPage",userByPage); // 6.将 condition 存入 request request.setAttribute("condition",condition); // 7.转发到 list.jsp request.getRequestDispatcher("/list.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-
AddUserServlet
package com.zt.web.servlet; import com.zt.domain.User; import com.zt.service.UserService; import com.zt.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.List; import java.util.Map; @WebServlet("/AddUserServlet") public class AddUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.设置编码 request.setCharacterEncoding("utf-8"); // 2.获取参数 Map<String, String[]> parameterMap = request.getParameterMap(); // 3.封装对象 User user = new User(); try { BeanUtils.populate(user,parameterMap); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } // 4.调用 UserService 完成添加 UserService userService = new UserServiceImpl(); userService.addUser(user); //5.重定向到 FindUserByPageServlet response.sendRedirect(request.getContextPath()+"/FindUserByPageServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-
DelUserServlet
package com.zt.web.servlet; import com.zt.service.UserService; import com.zt.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.获取参数 String id = request.getParameter("id"); // 2.调用 UserService 完成删除 UserService userService = new UserServiceImpl(); userService.deleteUser(id); // 3.重定向到 FindUserByPageServlet response.sendRedirect(request.getContextPath()+"/FindUserByPageServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-
DelSelectedServlet
package com.zt.web.servlet; import com.zt.service.UserService; import com.zt.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("/DelSelectedServlet") public class DelSelectedServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取参数 String[] ids = request.getParameterValues("id"); // 2.调用 UserService 完成删除 UserService userService = new UserServiceImpl(); for (String id : ids) { userService.deleteUser(id); } // 3.重定向到 FindUserByPageServlet response.sendRedirect(request.getContextPath()+"/FindUserByPageServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-
FindUserServlet
package com.zt.web.servlet; import com.zt.domain.User; import com.zt.service.UserService; import com.zt.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.获取参数 String id = request.getParameter("id"); // 2.调用 UserService 完成查询 UserService userService = new UserServiceImpl(); User user = userService.findUser(id); // 3.将 user 存入 request request.setAttribute("user",user); // 4.转发到 update.jsp request.getRequestDispatcher("/update.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-
UpdateUserServlet
package com.zt.web.servlet; import com.zt.domain.User; import com.zt.service.UserService; import com.zt.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[]> parameterMap = request.getParameterMap(); // 3.封装对象 User user = new User(); try { BeanUtils.populate(user,parameterMap); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } // 4.调用 UserService 完成修改 UserService userService = new UserServiceImpl(); userService.updateUser(user); //5.重定向到 FindUserByPageServlet response.sendRedirect(request.getContextPath()+"/FindUserByPageServlet"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
-