本博客主要实现jsp页面的分页功能。在数据库拥有上千条数据或者更多的时候,一个简单的SQL语句:SELECT * FROM user 是不行的,一个页面不仅不能够显示这么多页面,即使能够显示也不能这么做,在一个就是全部搜索是非常消耗数据库的性能,影响用户的体验。解决方法就是使用:select * from user limit ?,?语句。
分页思路:
1.创建bean包
(1)创建user实体类。
(2)创建page类
private int pageOfUser=3;//页面大小,初始化为3
private int totalPage;//页面总数,计算得到
private int pageNumber=1;//当前页码,初始化为1
private List<User> list;//记录条件搜索的list
private int count;//记录总数,在servlet类中获取
2.创建dao包
(1)创建ConnectionJDBC类,实现数据库驱动加载,连接,返回连接对象Connection
(2)创建SelectAll类,使用SELECT * FROM UsersInformation语句返回总数。
(3)创建ShowLimit类,实现条件查找,返回list
3.创建service包
创建Show类,实现dao层方法。
4.创建servlet包
创建ShowUsers包,实现分页逻辑。
5.创建show.jsp
代码如下:
User.java
package com.ysu.bean;
public class User {
private String name;
private String password;
private String email;
private int id;
private String mark;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
}
Pages.java
package com.ysu.bean;
import java.util.List;
public class Pages {
private int pageOfUser=3;//页面大小,初始化为3
private int totalPage;//页面总数
private int pageNumber=1;//当前页码,初始化为1
private int indexPage;//分页开始的索引
private List<User> list;//记录条件搜索的list
private int count;//记录总数
private int isSeek=0;//0为不索引,1为索引
public int getPageOfUser() {
return pageOfUser;
}
public void setPageOfUser(int pageOfUser) {
this.pageOfUser = pageOfUser;
}
public void setCount(int count) {
this.count = count;
if(count%pageOfUser==0){
this.totalPage=this.count/this.pageOfUser;
}else{
this.totalPage=this.count/this.pageOfUser+1;
}
}
public int getTotalPage() {
return totalPage;
}
public int getIndexPage() {
return indexPage;
}
public void setIndexPage(int indexPage) {
this.indexPage = indexPage;
}
public List<User> getList() {
return list;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public void setList(List<User> list) {
this.list = list;
}
public int getCount() {
return count;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
}
ConnectionJDBC.java
package com.ysu.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionJDBC {
public static Connection getConn(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url="jdbc:mysql://localhost:3306/UserRegister?user=root&password=1234&useUnicode=true&characterEncoding=utf-8";
try {
conn=DriverManager.getConnection(url);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
}
SelectAll.java
package com.ysu.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ysu.bean.User;
public class SelectAll {
public List<User> getAllUser(){
List<User>list=new ArrayList<User>();
Connection conn=null;
PreparedStatement p=null;
ResultSet rs=null;
conn=ConnectionJDBC.getConn();
String sql="SELECT * FROM UsersInformation";
try {
p=conn.prepareStatement(sql);
rs=p.executeQuery();
while(rs.next()){
User user=new User();
user.setEmail(rs.getString(4));
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setMark(rs.getString(5));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public int getUserCount(){
int num=0;
Connection conn=null;
PreparedStatement p=null;
ResultSet rs=null;
conn=ConnectionJDBC.getConn();
String sql="SELECT count(*) FROM UsersInformation";
try {
p=conn.prepareStatement(sql);
rs=p.executeQuery();
while(rs.next()){
num=rs.getInt(1);
}
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return num;
}
}
ShowLimit.java
package com.ysu.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ysu.bean.Pages;
import com.ysu.bean.User;
public class ShowLimit {
public List<User> showlimit(Pages page){
List<User> list=new ArrayList<User>();
Connection conn=null;
PreparedStatement p=null;
ResultSet rs=null;
conn=ConnectionJDBC.getConn();
String sql="SELECT * FROM UsersInformation LIMIT ?,?";
try {
p=conn.prepareStatement(sql);
p.setInt(1, (page.getPageNumber()-1)*3);
p.setInt(2, page.getPageOfUser());
rs=p.executeQuery();
while(rs.next()){
User user=new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setEmail(rs.getString(4));
user.setMark(rs.getString(5));
list.add(user);
}
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
page.setList(list);
return list;
}
}
Show.java
package com.ysu.servic;
import java.util.List;
import com.ysu.bean.Pages;
import com.ysu.bean.User;
import com.ysu.dao.Login;
import com.ysu.dao.SelectAll;
import com.ysu.dao.SelectById;
import com.ysu.dao.ShowLimit;
public class Show {
//登录
public boolean getLogin(String name,String password){
Login log=new Login();
return log.logins(name, password);
}
//查找所有
public List<User> showUsers(){
return new SelectAll().getAllUser();
}
//部分显示
public List<User> showLimit(Pages page){
ShowLimit showlimit=new ShowLimit();
return showlimit.showlimit(page);
}
//按ID查找
public User getById(int id){
return new SelectById().getUser(id);
}
//得到总数
public int getCount(){
return new SelectAll().getUserCount();
}
}
ShowUsers.java
package com.ysu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
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 com.ysu.bean.Pages;
import com.ysu.bean.User;
import com.ysu.servic.Show;
/**
* Servlet implementation class ShowUsers
*/
@WebServlet("/ShowUsers")
public class ShowUsers extends HttpServlet {
private static final long serialVersionUID = 1L;
Pages page=new Pages();
Show s=new Show();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String key=request.getParameter("key");
if(key.equals("page")){
String ID=request.getParameter("pageNum");
int id=Integer.parseInt(ID);
if(id<1){
page.setPageNumber(1);
}else if(id>page.getTotalPage()){
page.setPageNumber(page.getTotalPage());
}else{
page.setPageNumber(id);
}
page.setCount(s.getCount());//初始化总条数
page.setList(s.showLimit(page));
request.setAttribute("page", page);
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
</head>
<body>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>用户名</td>
<td>密码</td>
<td>电子邮箱</td>
<td>备注</td>
</tr>
</thead>
<tbody>
<c:forEach items="${page.list }" var="user">
<tr>
<td>${user.id }</td>
<td>${user.name }</td>
<td>${user.password }</td>
<td>${user.email }</td>
<td>${user.mark }</td>
</tr>
</c:forEach>
<tr>
</tr>
</tbody>
</table>
<a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=1">首页</a>
<a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.pageNumber-1 }">上一页</a>
<c:choose>
<c:when test="${page.pageNumber <= 3}">
<c:set var="begins" value="1"></c:set>
<c:set var="ends" value="5"></c:set>
</c:when>
<c:otherwise>
<c:set var="begins" value="${page.pageNumber-2}"></c:set>
<c:set var="ends" value="${page.pageNumber+2}"></c:set>
<c:if test="${ends > page.totalPage }">
<c:set var="ends" value="${page.totalPage}"></c:set>
<c:set var="begins" value="${page.pageNumber-4}"></c:set>
</c:if>
</c:otherwise>
</c:choose>
<c:forEach var="i" begin="${begins }" end="${ends }">
<c:choose>
<c:when test="${page.pageNumber==i}">
【${page.pageNumber }】
</c:when>
<c:otherwise>
<a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${i }">[${i }]</a>
</c:otherwise>
</c:choose>
</c:forEach>
<a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.pageNumber+1 }">下一页</a>
<a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.totalPage }">末页</a>
共${page.totalPage }页
共有${page.count }条记录
</body>
</html>