效果展示
项目结构
代码
java
User.java
用户的实体类,一些实体对象的属性和set、get方法。
package bean;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDao.java
操作数据的接口
package dao;
import bean.User;
import java.util.List;
/**
* 数据访问对象(DAO)接口
* @author lck100
*/
public interface UserDao {
/**
* 根据页码和该页显示记录条数获取该页的所有记录
*
* @param pageIndex 页码
* @param pageSize 记录条数
* @return 返回查询到的结果集
*/
List<User> selectByPage(int pageIndex, int pageSize);
/**
* 获取记录的总条数
*
* @return 返回记录的总条数
*/
int getTotalRecords();
}
UserDaoImpl.java
接口的具体实现
package dao.impl;
import bean.User;
import dao.UserDao;
import utils.DBUtils;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
* UserDao接口实现类
*
* @author lck100
*/
public class UserDaoImpl implements Serializable, UserDao {
@Override
public List<User> selectByPage(int pageIndex, int pageSize) {
// 实例化List集合
List<User> userList = new ArrayList<>();
// 定义
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 获取数据库连接
conn = DBUtils.getConnection();
// 获取分页开始的索引
int startIndex = (pageIndex - 1) * pageSize;
// SQL语句
String sql = "select * from users limit ?,?";
// 获取Statement对象
ps = conn.prepareStatement(sql);
// 对参数进行赋值
ps.setInt(1, startIndex);
ps.setInt(2, pageSize);
// 获取结果集
rs = ps.executeQuery();
// 遍历结果集
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
userList.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.release(conn, ps, rs);
}
return userList;
}
@Override
public int getTotalRecords() {
// 定义总条数变量,初始值为0
int count = 0;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 获取数据库连接对象
conn = DBUtils.getConnection();
// SQL语句
String sql = "select count(*) as total from users";
// 得到Statement对象
ps = conn.prepareStatement(sql);
// 获取结果集对象
rs = ps.executeQuery();
// 得到记录总条数
if (rs.next()) {
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.release(conn, ps, rs);
}
return count;
}
}
UserService.java
服务接口,获取分页相关数据。
package service;
import utils.PageUtils;
/**
* 服务层接口
* @author lck100
*/
public interface UserService {
/**
* 获取分页的数据
* @param pageIndex 页码
* @param pageSize 每页显示记录条数
* @return 返回PageUtils对象
*/
PageUtils selectByPage(int pageIndex, int pageSize);
}
UserServiceImpl.java
服务接口的具体实现。
package service.impl;
import bean.User;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import service.UserService;
import utils.PageUtils;
import java.util.List;
/**
* 实现UserService接口
*
* @author lck100
*/
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public PageUtils selectByPage(int pageIndex, int pageSize) {
// 实例化PageUtils对象
PageUtils pu = new PageUtils();
// 获取查询结果集
List<User> userList = userDao.selectByPage(pageIndex, pageSize);
// 对PageUtils对象进行赋值
pu.setList(userList);
pu.setPageIndex(pageIndex);
pu.setPageSize(pageSize);
pu.setTotalRecords(userDao.getTotalRecords());
// 返回PageUtils对象
return pu;
}
}
UserServlet.java
处理分页逻辑。
package servlet;
import service.UserService;
import service.impl.UserServiceImpl;
import utils.PageUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class UserServlet extends HttpServlet {
private int pageNo;
private UserService userService = null;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求的编码
request.setCharacterEncoding("UTF-8");
// 设置响应的编码
response.setContentType("text/html;charset=UTF-8");
// 获取action
String action = request.getParameter("action");
// 对action进行判断
if (action.equals("pager")) {// 如果参数是pager则进行分页
// 获取页码
String pageIndex = request.getParameter("pageIndex");
// 对页码进行非空判断
if (pageIndex == null) {
pageNo = 1;
} else {
pageNo = Integer.parseInt(pageIndex);
}
// 实例化服务对象
userService = new UserServiceImpl();
// 获取分页数据,设置页码和每页显示记录数为5条
PageUtils pu = userService.selectByPage(pageNo, 5);
// 将数据保存到session中
request.getSession().setAttribute("pu", pu);
// 跳转到user_list.jsp页面并将数据一并传送过去
request.getRequestDispatcher("user_list.jsp").forward(request, response);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
DBUtils.java
获取数据库连接及释放数据库资源。
package utils;
import java.sql.*;
public class DBUtils {
/**
* 获取数据库连接对象
* @return 返回数据库连接对象
*/
public static Connection getConnection(){
Connection connection=null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/servletdemo","root","admin");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 释放数据库连接资源
* @param connection 数据库连接对象
* @param statement 数据库执行对象
* @param resultSet 数据库结果集对象
*/
public static void release(Connection connection, Statement statement, ResultSet resultSet){
// 关闭resultSet
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭statement
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭connection
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
PageUtils.java
分页相关属性和方法。
package utils;
import java.util.List;
/**
* 分页的相关属性和方法
*
* @author lck100
*/
public class PageUtils {
// 所有数据结果集
private List list;
// 每页显示多少条数据
private int pageSize;
// 页码(第几页)
private int pageIndex;
// 记录总条数
private int totalRecords;
/**
* 计算总的页面数
*
* @return 返回一共有多少页
*/
public int getTotalPages() {
if (totalRecords % pageSize == 0) {// 如果记录总条数对每页显示记录数取整等于0,则表示页面数刚好分完。
return totalRecords / pageSize;
} else {// 如果取不尽,那么就添加一页来放剩余的记录
return totalRecords / pageSize + 1;
}
}
/**
* 获取首页的页码
*
* @return 返回首页的页码,即为1
*/
public int getFirstPageIndex() {
return 1;
}
/**
* 获取上一页的页码
*
* @return 返回上一页的页码,即当前页码减去1
*/
public int getPreviousPageIndex() {
if (pageIndex <= 1) {
return 1;
}
return pageIndex - 1;
}
/**
* 获取下一页的页码
*
* @return 返回下一页的页码,即当前页码加上1
*/
public int getNextPageIndex() {
if (pageIndex >= getLastPageIndex()) {
return getLastPageIndex();
}
return pageIndex + 1;
}
/**
* 获取最后一页的页码
*
* @return 返回最后一页的页码,即总页数
*/
public int getLastPageIndex() {
return getTotalPages();
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
}
web
web.xml
servlet注册。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--用户Servlet-->
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
<!--欢迎页面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.jsp
主页面,通过链接进入分页界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<a href="userServlet?action=pager">分页显示</a>
</body>
</html>
user_list.jsp
显示分页数据。
<%@ page import="bean.User" %>
<%@ page import="utils.PageUtils" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8"/>
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="js/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="js/bootstrap.min.js"></script>
<title>显示所有用户</title>
</head>
<body>
<%
PageUtils pu = (PageUtils) session.getAttribute("pu");
List<User> userList = pu.getList();
%>
<table class="table table-hover table-bordered">
<tr>
<td>序号</td>
<td>用户名</td>
<td>密码</td>
<td>操作</td>
</tr>
<%
for (User user : userList) {
%>
<tr>
<td>
<%=user.getId()%>
</td>
<td>
<%=user.getUsername()%>
</td>
<td>
<%=user.getPassword()%>
</td>
<td>
<a class="btn btn-info" href="userServlet?action=del&id=<%=user.getId()%>">删除</a>
<a class="btn btn-danger" href="userServlet?action=edit&id=<%=user.getId()%>">编辑</a>
</td>
</tr>
<%
}
%>
<tr>
<td colspan="4">
共 <%=pu.getTotalPages()%> 页
当前第 <%=pu.getPageIndex()%>页
<p class="pagination">
<a href="userServlet?action=pager&pageIndex=<%=pu.getFirstPageIndex()%>">首页</a>
<a href="userServlet?action=pager&pageIndex=<%=pu.getPreviousPageIndex()%>">上一页</a>
<a href="userServlet?action=pager&pageIndex=<%=pu.getNextPageIndex()%>">下一页</a>
<a href="userServlet?action=pager&pageIndex=<%=pu.getLastPageIndex()%>">尾页</a>
</p>
</td>
</tr>
</table>
</body>
</html>
如果对完整源码感兴趣。
可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。
注意:在公众号后台回复【CSDN201910071035】可获取本节源码。