1. package cn.zr.testpage.entity;
  2.  
  3. public class User {
  4.  
  5. private String name;
  6. private int age;
  7. private String hobby;
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. public void setAge(int age) {
  18. this.age = age;
  19. }
  20. public String getHobby() {
  21. return hobby;
  22. }
  23. public void setHobby(String hobby) {
  24. this.hobby = hobby;
  25. }
  26. public User() {
  27. }
  28. public User(String name, int age, String hobby) {
  29. this.name = name;
  30. this.age = age;
  31. this.hobby = hobby;
  32. }
  33. @Override
  34. public String toString() {
  35. return "User [name=" + name + ", age=" + age + ", hobby=" + hobby + "]";
  36. }
  37.  
  38. }
  1. package cn.zr.testpage.service;
  2.  
  3. import java.util.List;
  4.  
  5. import cn.zr.testpage.entity.User;
  6. import cn.zr.testpage.utils.Page;
  7.  
  8. public interface UserService {
  9.  
  10. /**
  11. * 获取总数量
  12. * @return 返回总数
  13. */
  14. int getAmount();
  15.  
  16. /**
  17. * 获取当前页的数据
  18. * @param page
  19. * @return 返回前页的数据
  20. */
  21. List<User> getUserInfo(Page page);
  22.  
  23. }
  24.  

package cn.zr.testpage.service.impl;

import java.util.List;

import cn.zr.testpage.dao.UserDao;
import cn.zr.testpage.dao.impl.UserDaoImpl;
import cn.zr.testpage.entity.User;
import cn.zr.testpage.service.UserService;
import cn.zr.testpage.utils.Page;

public class UserServiceImpl implements UserService {
private UserDao userDao;
// 通过代码块加载实现类
{
userDao = new UserDaoImpl();
}

@Override
public int getAmount() {
return userDao.getAmount();
}

@Override
public List<User> getUserInfo(Page page) {
return userDao.getUserInfo(page);
}

}

package cn.zr.testpage.dao;

import java.util.List;

import cn.zr.testpage.entity.User;
import cn.zr.testpage.utils.Page;

public interface UserDao {

/**
* 获取总数量
* @return 返回总数
*/
int getAmount();

/**
* 获取当前页的数据
* @param page
* @return 返回前页的数据
*/
List<User> getUserInfo(Page page);

}

package cn.zr.testpage.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.zr.testpage.dao.UserDao;
import cn.zr.testpage.entity.User;
import cn.zr.testpage.utils.JdbcUtils;
import cn.zr.testpage.utils.Page;
import cn.zr.testpage.utils.UserBasicalImpl;

public class UserDaoImpl extends UserBasicalImpl implements UserDao{

/**
* 获取总数
*/
@Override
public int getAmount() {
connection = JdbcUtils.getConnection();
String sql = "SELECT COUNT(*) FROM USERINFO";
int count = 0;
try {
pStatement = connection.prepareStatement(sql);
rSet = pStatement.executeQuery();
if(rSet.next()){
count = rSet.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 调用父类方法关闭资源
super.close();
}
return count;
}

/**
* 获取当前页的数据
* @param page
* @return 返回前页的数据
*/
@Override
public List<User> getUserInfo(Page page) {

connection = JdbcUtils.getConnection();
//基于MySQL的函数的分页
String sql = "SELECT 姓名,年龄,爱好 FROM USERINFO LIMIT ?,?";
// 创建集合
List<User> list = new ArrayList<User>();
try {
pStatement = connection.prepareStatement(sql);
//设置相关参数
pStatement.setInt(1, page.getStart());
pStatement.setInt(2, page.getSize());
rSet = pStatement.executeQuery();
while(rSet.next()){
User user = new User();
user.setName(rSet.getString("姓名"));
user.setAge(rSet.getInt("年龄"));
user.setHobby(rSet.getString("爱好"));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 调用父类方法关闭资源
super.close();
}
return list;
}

}

package cn.zr.testpage.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.zr.testpage.entity.User;
import cn.zr.testpage.service.UserService;
import cn.zr.testpage.service.impl.UserServiceImpl;
import cn.zr.testpage.utils.BaseServlet;
import cn.zr.testpage.utils.Page;

public class ListServlet extends BaseServlet{

private static final long serialVersionUID = 1L;

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

System.out.println("...doGet...");

// 获取当前页
String curpage = req.getParameter("curpage");
UserService userService = new UserServiceImpl();
// 获取总数量
int count = userService.getAmount();
//字符串转成整型
int currentpage = super.currentPage(curpage);
// 创建page对象
Page page = new Page(count, currentpage, pagesize);
// 获取当前页的数据
List<User> users = userService.getUserInfo(page);
//将相关数据存储起来
req.setAttribute("page", page);
req.setAttribute("users", users);

System.out.println(count);
System.out.println(users);
//转发
req.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req, resp);

}

}

package cn.zr.testpage.utils;

import javax.servlet.http.HttpServlet;

public class BaseServlet extends HttpServlet {

public int pagesize = 2;

public int currentPage(String cpage){
int currentpage = cpage!=null && !"".equals(cpage) && isint(cpage)? currentpage=Integer.parseInt(cpage):1;
return currentpage;
}

public boolean isint(String str){
boolean bo = true;
try {
Integer.parseInt(str);
} catch (Exception e) {
bo = false;
}
return bo;
}

}

package cn.zr.testpage.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author lf
*
*/
public class JdbcUtils {

// 获取数据库连接
public static Connection getConnection() {
String url="jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&amp;characterEncoding=utf8";
String user="LF";
String password ="LF";
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}

return connection;
}
}

package cn.zr.testpage.utils;

public class Page {

// 页数(第几页)
private int currentpage;

// 查询数据库里面对应的数据有多少条
private int total;// 从数据库查处的总记录数

// 每页查询的数量条
private int size;

// 下页
private int next;

// 最后一页
private int last;

private int lpage;

private int rpage;

//从哪条开始查
private int start;

public Page() {
super();
}

public int getCurrentpage() {
return currentpage;
}

/****
*
* @param currentpage
* @param total
* @param pagesize
*/
public void setCurrentpage(int currentpage,int total,int pagesize) {
//如果整除表示正好分N页,如果不能整除在N页的基础上+1页
int totalPages = total%pagesize==0? total/pagesize : (total/pagesize)+1;

//总页数
this.last = totalPages;

//判断当前页是否越界,如果越界,我们就查最后一页
if(currentpage>totalPages){
this.currentpage = totalPages;
}else{
this.currentpage=currentpage;
}
if(currentpage<=0){
this.currentpage=1;
}

//计算start 1----0 2 ------ 5
this.start = (this.currentpage-1)*pagesize;

}

public int getTotal() {
return total;
}

public void setTotal(int total) {
this.total = total;
}

public int getSize() {
return size;
}

public void setSize(int size) {
this.size = size;
}

public int getNext() {
return currentpage<last? currentpage+1: last;
}

//上一页
public int getUpper() {
return currentpage>1? currentpage-1: currentpage;
}

public int getLast() {
return last;
}

//总共有多少页,即末页
public void setLast(int last) {
this.last = total%size==0? total/size : (total/size)+1;
}

public int getLpage() {
return lpage;
}

public void setLpage(int lpage) {
this.lpage = lpage;
}

public int getRpage() {
return rpage;
}

public void setRpage(int rpage) {
this.rpage = rpage;
}

/****
*
* @param total 总记录数
* @param currentpage 当前页
* @param pagesize 每页显示多少条
*/
public Page(int total,int currentpage,int pagesize) {
//总记录数
this.total = total;
//每页显示多少条
this.size=pagesize;

//计算当前页和数据库查询起始值以及总页数
setCurrentpage(currentpage, total, pagesize);

//分页计算
int leftcount =5, //需要向上一页执行多少次
rightcount =4;
//起点页
this.lpage =currentpage;
//结束页
this.rpage =currentpage;

//2点判断
this.lpage = currentpage-leftcount; //正常情况下的起点
this.rpage = currentpage+rightcount; //正常情况下的终点

//页差=总页数和结束页的差
int topdiv = this.last-rpage; //判断是否大于最大页数

/***
* 起点页
* 1、页差<0 起点页=起点页+页差值
* 2、页差>=0 起点和终点判断
*/
this.lpage=topdiv<0? this.lpage+topdiv:this.lpage;

/***
* 结束页
* 1、起点页<=0 结束页=|起点页|+1
* 2、起点页>0 结束页
*/
this.rpage=this.lpage<=0? this.rpage+(this.lpage*-1)+1: this.rpage;

/***
* 当起点页<=0 让起点页为第一页
* 否则不管
*/
this.lpage=this.lpage<=0? 1:this.lpage;

/***
* 如果结束页>总页数 结束页=总页数
* 否则不管
*/
this.rpage=this.rpage>last? this.last:this.rpage;
}

public int getStart() {
return start;
}

}

package cn.zr.testpage.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserBasicalImpl {

protected Connection connection;
protected PreparedStatement pStatement;
protected ResultSet rSet;

public void close(){
// 关闭资源
try {
if (rSet!=null) {
rSet.close();
}
if (pStatement!=null) {
pStatement.close();
}
if (connection!=null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>用户信息</title>

</head>

<body>

<table>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>爱好</th>
</tr>
<c:forEach items="${users }" var="user" varStatus="userindex">
<tr>
<td>${user.name }</td>
<td>${user.age }</td>
<td>${user.hobby }</td>
</tr>
</c:forEach>
</table>

<div>
<a href="?curpage=1">首页</a>
<c:forEach begin="${page.lpage}" end="${page.rpage}" var="pageNum">
<a href="?curpage=${pageNum }">${pageNum }</a>
</c:forEach>
<a href="?curpage=${page.last }">尾页</a>
</div>

</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
<servlet-name>list</servlet-name> <!-- 名字随便 -->
<servlet-class>com.ltjs.servlet.ListServlet</servlet-class> <!-- servlet类名-->
</servlet>

<servlet-mapping>
<servlet-name>list</servlet-name>
<url-pattern>/list</url-pattern> <!-- url访问虚拟路径,最后我们就是通过工程名/login进行访问的,像这样http://127.0.0.1:8000/LoginAction/login-->
</servlet-mapping>

</web-app>

各位需要俩个jar包:

1、jstl-1.2.jar  2、mysql-connector-java-5.1.29.jar

Javaweb 实现分页功能的更多相关文章

  1. 《JavaWeb从入门到改行》分页功能的实现

    @目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+Base ...

  2. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  3. php对文本文件进行分页功能简单实现

    php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...

  4. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  5. WinForm DataGridView分页功能

    WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件  .CS: 1 using System; ...

  6. Net 分页功能的实现

    首先写一个接口   1 2 3 4 5 6 public interface IPagedList     {         int CurrentPageIndex { get; set; }   ...

  7. 自己封装的JS分页功能[用于搭配后台使用]

    * 2016.7.03 修复bug,优化代码逻辑 * 2016.5.25 修复如果找不到目标对象的错误抛出. * 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bu ...

  8. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  9. jPList – 实现灵活排序和分页功能的 jQuery 插件

    jPList 是一个灵活的 jQuery 插件,可以用于任何 HTML 结构的排序,分页和筛选.它支持的数据源包括:PHP + MySQL,ASP.NET + SQL Server,PHP + SQL ...

随机推荐

  1. Enable SVM while booted from alternate media (ZT)

    http://www.seedsofgenius.net/uncategorized/solaris-tips-enable-svm-while-booted-from-alternate-media ...

  2. 问题:oracle 不等于;结果:Oracle中的不等于号

    Oracle中的不等于号 今天碰到一个Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下   关于Oracle中的不等于号: 在Oracle中, <> != ~= ...

  3. 部署和调优 2.7 mysql主从配置-1

    MySQL 主从(MySQL Replication),主要用于 MySQL 的时时备份或者读写分离.在配置之前先做一下准备工作,配置两台 mysql 服务器,如果你的机器不能同时跑两台 Linux虚 ...

  4. MongoDB中的查询

    MongoDB中文文档:http://docs.mongoing.com/manual-zh/contents.html 这里以集合名称为test为例,数据库通过for循环插入一些测试数据,键分别为: ...

  5. hibernate学习笔记(2)持久化类测试

    持久化类的创建: 创建一个共有的不带参数的构造方法: public void Students(){ } 创建一个带参数的构造方法: (快捷键创建) 生成get,set方法: *可以不用此方法创建持久 ...

  6. memset,memcpy,strcpy的使用与区别

    1.memset 原型:   extern void *memset(void *buffer, int c, int count); 功能:   把buffer所指内存区域的前count个字节设置成 ...

  7. siciyuan开源项目观光指南

    观光方式: 1.从UI到后台,先针对每个界面UI观察结构 2.再观察如何初始化和注入数据 3.针对2所用的后台方法进行概览 4.对3中方法进行深入研究 5.选择一个模块进行重写 6.重复5,搭建大体框 ...

  8. codeforces 1064D 双端队列BFS

    双端队列BFS解决的就是路径权值可能为0的图最短路问题,权值为0插入队头,否则插入队尾. 对于这个题,可以看作上下移动的路径的权值为0,左右移动权值为1,而且不能超过规定的步数. 直接广搜求覆盖的点的 ...

  9. hibernate 对象OID

    它是hibernate用于区分两个对象是否是同一个对象的标识. 我们都知道,虚拟机内存区分两个对象看的是内存的地址是否一致.数据库区分两个对象,靠的是表的主键.hibernate负责把内存中的对象持久 ...

  10. 算法Sedgewick第四版-第1章基础-1.3Bags, Queues, and Stacks-001可变在小的

    1. package algorithms.stacks13; /******************************************************************* ...