• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JSP > JSP通用分页框架

JSP通用分页框架

作者:茶饮月 字体:[增加 减小] 来源:互联网 时间:2017-05-11

茶饮月通过本文主要向大家介绍了jsp的通用规则,jsp mvc框架,jsp框架,jsp iframe布局框架,jsp框架模板等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

写一个通用的分页框架,这样在项目里面如果想实现分页功能,只需要稍加改动参数就可以实现分页处理了。这样写了会节省很多时间。

一.分页类

既然要分页那么我们就要考虑建一个通用的分页类,里面需要的参数一般有:

总页数 totalPage

总共记录数 totalRecord

每页显示数 pageSize

当前页pageIndex

承载当前页数据的集合 List datas

完整代码:Page.java

import java.util.List;
public class Pager<E> {
/**
* 总共页数
*/
private int totalPages;
/**
* 总共记录数
*/
private int totalRecords;
/**
* 每页显示数量
*/
private int pageSize;
/**
* 当前页
*/
private int pageIndex;
/**
* 当前页数据集合
*/
private List<E> datas;
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public void setDatas(List<E> datas) {
this.datas = datas;
}
public int getTotalPages() {
return totalPages;
}
public int getTotalRecords() {
return totalRecords;
}
public int getPageSize() {
return pageSize;
}
public int getPageIndex() {
return pageIndex;
}
public List<E> getDatas() {
return datas;
}
}
</div>

二.用户类

这里以查询用户来做分页为例,所以就需要一个用户类

用户号 userId

用户姓名 username

用户密码 password

注册时间 regdate

完整代码

import java.sql.Timestamp;
public class User {
private int userId;//用户id
private String username;//用户名
private String password;//密码
private Timestamp regdate;//注册时间
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
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;
}
public Timestamp getRegdate() {
return regdate;
}
public void setRegdate(Timestamp regdate) {
this.regdate = regdate;
}
}
</div>

三.threadLocal提取公用参数

先说如果不提取公共参数,比如pagesize,pageindex,那么我们的查询方法应该是这样子:

public void GetUsers(String name,int pagesize,int pageIndex)
</div>

如果以后再增加参数,无疑这里的参数会变的很多,所以我们利用threadLocal把pagesize和pageindex提取出来.

先写这个类

public class SystemContext {
//页大小
private static ThreadLocal<Integer> pageSize = new ThreadLocal<>();
//当前页
private static ThreadLocal<Integer> pageIndex = new ThreadLocal<>();
public static Integer getPageSize() {
return pageSize.get();
}
public static void removePageSize(){
pageSize.remove();
}
public static void setPageSize(int _pageSize) {
pageSize.set(_pageSize);
}
public Integer getPageIndex() {
return pageIndex.get();
}
public void setPageIndex(int _pageIndex) {
pageIndex.set(_pageIndex);
}
public static void removePageIndex(){
pageIndex.remove();
}
}
</div>

对于threadLocal,这个变量会在线程中一直存在,那么我们就可以在向服务器发送请求的时候添加参数,服务器返回数据的时候移除参数,一来一回的话,自然而然可以用过滤器

那么过滤器如下:

import com.dao.SystemContext;
import javax.servlet.*;
import java.io.IOException;
public class SystemFilter implements Filter{
int pageSize;
int pageIndex = 1;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
try {
pageSize = Integer.parseInt(filterConfig.getInitParameter("pagesize"));
} catch (NumberFormatException e) {
pageSize = 15;
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
try {
pageIndex = Integer.parseInt(servletRequest.getParameter("pageindex"));
}catch (NumberFormatException e){
//什么也不做,pageindex=1
}
try {
//开始请求的时候配置参数
SystemContext.setPageSize(pageSize);
SystemContext.setPageIndex(pageIndex);
filterChain.doFilter(servletRequest,servletResponse);
}finally {
//请求返回的时候移除参数
SystemContext.removePageIndex();
SystemContext.removePageSize();
}
}
@Override
public void destroy() {
}
}
</div>

用了过滤器,自然要在web.xml中配置过滤器

<?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_3_1.xsd"
version="3.1">
<filter>
<filter-name>SystemFilter</filter-name>
<filter-class>com.filter.SystemFilter</filter-class>
<!--配置没页大小-->
<init-param>
<param-name>pagesize</param-name>
<param-value>15</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SystemFilter</filter-name>
<!--这里配置需要分页的页面-->
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
</web-app>
</div>

这样的好处不言而喻,结构清晰,修改方便.接下来是分页代码

四.分页代码

分页代码应该写一个接口和实现类的,这里演示项目就写在了一起

import com.util.Pager;
import com.util.User;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDAO {
private Connection conn = null;
private ResultSet rs = null;
private PreparedStatement ps = null;
// public static void main(String[] args) {
// UserDAO dao = new UserDAO();
// dao.GetUsers("",15,1);
// dao.close();
// }
public UserDAO() {
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/fenyedemo";
String user = "root";String password = "123456";
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
System.out.println("没有发现驱动");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("获取连接失败");
e.printStackTrace();
}
}
/**
* 具体分页实现代码
* @param name 查询条件
* @return
*/
public Pager GetUsers(String name){
//获取分页参数
int pagesize = SystemContext.getPageSize();
int pageIndex = SystemContext.getPageIndex();
//分页具体sql语句
String sql = "select * from user ";
String sqlCount = "select count(*) from user ";
if (name!=null && !name.trim().equals("")){
sql += "where username LIKE %"+name+"%";
sqlCount += "where username LIKE %"+name+"%";
}
sql += " LIMIT ?,?";
//存放当前页的集合
List<User> datas = new ArrayList<>();
//存放当前分页的集合
Pager<User> pages = new Pager<>();
User userTemp = null;
try {
ps = conn.prepareStatement(sql);
if(pageIndex<=0) pageIndex=1;
//设置参数
ps.setInt(1,(pageIndex-1)*pagesize);
ps.setInt(2,pagesize);
rs = ps.executeQuery();
//循环取出,添加到datas中
while (rs.next()){
userTemp = new User();
userTemp.setUserId(rs.getString("id"));
userTemp.setUsername(rs.getString("username



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JSP通用分页框架
  • 通用JSP页面 jsp入门级文章

相关文章

  • 2017-05-11一、Servlet和JSP概述
  • 2017-11-12HTTP Status 500
  • 2017-05-11Spring MVC自定义日期类型转换器实例详解
  • 2017-05-11JSP建立错误页页面并自动跳转
  • 2017-05-11访问JSP文件或者Servlet文件时提示下载的解决方法
  • 2017-05-11JSP脚本元素和注释复习总结示例
  • 2017-05-11Java动态代理实现AOP
  • 2017-05-11java/jsp中 中文问题详解
  • 2017-05-11JSP页面传值乱码过滤方法
  • 2017-05-11jsp登陆校验演示 servlet、login、success

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • GET 方式提交的含有特殊字符的参数
    • JSP使用自定义标签防止表单重复提交的方法
    • JSP数据分页导出下载显示进度条样式
    • jsp分页显示的实现代码
    • jsp 编程之@WebServlet详解
    • 将html页改成jsp的两种方式
    • 几则JSP入门知识总结
    • hibernate更新数据方法小结
    • 如何在Jsp中使用JDBC来联结MySql
    • JSP判断移动设备的正则

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有