`
paction520
  • 浏览: 3535 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsp分页

    博客分类:
  • J2EE
阅读更多

接触J2EE 也有一段时间了,想用jsp + servlet + javabean + jdbc 做一个分页例子,在网上找了一下,想参考一下别人做的思路,可能这个太简单了,没找到理想的代码,大部分都是转发别人的代码的网站,也许已经有了现成的组件了。今天好像学了 jstl 标签库,决定把它用上了,但对于初学者来说,必须一步一步来的,急不来!!

好吧,今天决定做一个完整的分页例子来玩玩顺便分享一下,学习编程没有成就感是不行的,毕竟学习与工作是不同的。不过,我还是刚过20岁的学生,菜鸟一个。希望前辈们不要见笑哦!

操作系统:window xp
开发语言:jsp + html
开发工具:MyEclipse 6.0
服务器:Tomcat 6.0
数据库:SQL server 2005
示例数据库:SQL server 2000 里的 pubs

 

效果图:



 

 

/**
 * 
 * 分页类
 * 
 */
public class PageBean {
	// 定义每页显示的记录数
	private int pagesize = 10;
	// 定义当前页数
	private int currentPage;
	// 定义总记录数
	private int rowCount;
	// 定义总页数
	private int pageCount;
	// 当前页面的数据
	private ArrayList data = new ArrayList();

	public int getPagesize() {
		return pagesize;
	}

	public void setPagesize(int pagesize) {
		this.pagesize = pagesize;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getRowCount() {
		return rowCount;
	}

	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}

	public int getPageCount() {
		return rowCount % pagesize == 0 ? rowCount / pagesize : rowCount
				/ pagesize + 1;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public ArrayList getData() {
		return data;
	}

	public void setData(ArrayList data) {
		this.data = data;
	}

}

 

/**
 * 数据类
 * 
 */
public class Title {
	private String titleid;
	private String title;
	private String type;
	private String pubid;
	private float price;

	public String getTitleid() {
		return titleid;
	}

	public void setTitleid(String titleid) {
		this.titleid = titleid;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getPubid() {
		return pubid;
	}

	public void setPubid(String pubid) {
		this.pubid = pubid;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

}

 

/**
 * 数据库连接类
 */
public class DbConn {

	/**
	 * 通过建数据源连接数据库方法
	 * 
	 * @return Connection
	 */
	public Connection getConn() {
		Connection conn = null;

		try {
			// 加载驱动 jdbc-odbc
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			// 获得连接 abc 是配置的数据源的名称
			conn = DriverManager.getConnection("jdbc:odbc:abc");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {

		}
		return conn;
	}

	/**
	 * 通过Jar包连接数据库
	 * 
	 * @return Connection
	 */
	public Connection getConnByJar() {
		Connection conn = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection(
					"jdbc:sqlserver://localhost:1433;databasename=pubs", "sa",
					"sa2005");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
}

 

/**
 * 数据库操作类
 */
public class DbOper {
	private Connection conn = null;
	private Statement stat = null;
	private PreparedStatement pstat = null;
	private ResultSet rs = null;
	ArrayList al = new ArrayList();
	DbConn db = new DbConn();

	/**
	 * 按照传过来的页数查询数据
	 * 
	 * @param currentPage
	 * @return PageBean
	 */
	public PageBean selectByPage(int currentPage) {
		PageBean pb = new PageBean();
		conn = db.getConnByJar();
		int pageSize = pb.getPagesize();
		String sql = "select count(*) from tab1";
		int rowCount = 0;
		try {
			pstat = conn.prepareStatement(sql);
			rs = pstat.executeQuery();
			if (rs.next()) {
				// 总记录数
				rowCount = rs.getInt(1);
				pb.setRowCount(rowCount);
			}
			// 当前页面数据
			String sql2 = "select top "
					+ pageSize
					+ " title_id,title,type,pub_id,price from tab1 where"
					+ " title_id not in (select top "
					+ +(currentPage - 1)
					* pageSize
					+ " title_id from tab1 order by title_id) order by title_id";
			pstat = conn.prepareStatement(sql2);
			rs = pstat.executeQuery();
			while (rs.next()) {
				Title t = new Title();
				t.setTitleid(rs.getString(1));
				t.setTitle(rs.getString(2));
				t.setType(rs.getString(3));
				t.setPubid(rs.getString(4));
				t.setPrice(rs.getFloat(5));

				pb.getData().add(t);
				pb.setCurrentPage(currentPage);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (pstat != null) {
				try {
					pstat.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return pb;
	}

}

 

/**模块功能:
 *
 * 1、获取表单数据
 * 2、创建操作类对象
 * 3、通过调用操作类对象方法,得到 PageBean 对象
 * 4、把分页类对象设置到 session 范围
 * 5、重定向页面
 */
public class QueryServlet extends HttpServlet {
	
	/**
	 * 处理 Post 的 URL 请求 
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		// 获取当前页数
		int currentPage = request.getParameter("currentPage") == null ? 1 : Integer
				.parseInt(request.getParameter("currentPage"));
		DbOper oper = new DbOper();
		PageBean pb = null;
		// 查询 
		pb = oper.selectByPage(currentPage);
		// 将 PageBean 对象设置到 Session 范围
		request.getSession().setAttribute("pb", pb);
		// 重定向页面到 index.jsp
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
	
	/**
	 * 处理 Post 的 URL 请求 
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException,IOException {
		/* 重定向到 Post 请求处理方法 */
		this.doPost(request, response);
	}
}

 

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
  <body>
  	<h1>jsp + servlet + jdbc + jstl 分页例子</h1>
  	<form action="query.do" name="frm" method="post" >
    <table border="1">
    	<tr>
    		<th>编号</th>
    		<th>名称</th>
    		<th>类型</th>
    		<th>出版商ID</th>
    		<th>单价</th>
    	</tr>
    	<c:choose>
    		<c:when test="${empty pb}">
    			<%-- 如果 pb 对象为空不作任何处理--%>
    		</c:when>
    		<c:otherwise>
    			<c:forEach items="${pb.data}" var="t">
    				<tr>
		    			<td>${t.titleid }</td>
		    			<td>${t.title }</td>
		    			<td>${t.type }</td>
		    			<td>${t.pubid }</td>
		    			<td>${t.price }</td>
		    		</tr>
    			</c:forEach>
    		</c:otherwise>
    	</c:choose>
    </table>
    <%-- 添加分页控制 begin --%>
    <c:choose>
    		<c:when test="${pb.currentPage <= 1}">
    			首页 上一页
    		</c:when>
    		<c:otherwise>
    			<a href="javascript:gopage(1)">首页</a>
    			<a href="javascript:gopage(${pb.currentPage-1 })">上一页</a>
    		</c:otherwise>
    </c:choose>
    
    <%-- 添加分页数字 --%>
	<c:forEach var="i" begin="1" end="${pb.pageCount}" step="1" varStatus="s">
		<c:choose>
			<c:when test="${pb.currentPage == s.index}">
				${s.index }
			</c:when>
			<c:otherwise>
				<a href="javascript:gopage(${s.index })">${s.index }</a>
			</c:otherwise>
		</c:choose>
	</c:forEach>
	
	<c:choose>
		<c:when test="${pb.currentPage >= pb.pageCount}">
		下一页 末页
		</c:when>
		<c:otherwise>
			<a href = "javascript:gopage(${pb.currentPage+1 })">下一页</a>
			<a href = "javascript:gopage(${pb.pageCount })">末页</a>
		</c:otherwise>			
	</c:choose>
    <%-- 添加分页控制 end --%>
    </form>
    
    <form action="" name="frm2" method="post">
    	<input type="hidden" name="currentPage">
    </form>   
  </body>
</html>

<script type="text/javascript">
	// 利用js间接提交表单
	function gopage( x ) {
		// 给表单frm1的隐藏域currentPage的值赋为当前页数
		document.frm2.currentPage.value = x
		document.frm2.action = "query.do";
		document.frm2.submit();
	}
</script>

 

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
  <body>
  <center>
    <form action="query.do" method="post">
    	<input type="submit" value="查询数据">
    </form>
  </center>
  </body>
</html>

 

<?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">
  <welcome-file-list>
    <welcome-file>query.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>QueryServlet</servlet-name>
  	<servlet-class>cn.pa.servlet.QueryServlet</servlet-class>	
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>QueryServlet</servlet-name>
  	<url-pattern>/query.do</url-pattern>
  </servlet-mapping>
  
</web-app>

 

 

 

今天做了两个版本:一个是 jsp + servlet + javabean + jdbc; 另一个是 jsp + servlet + javabean + jdbc + jstl

其实学习到 jstl 标签库,我已经经过一个系统学习过程了,
a:什么功能都写在同一个jsp页面;
b:jsp显示页面到jsp功能页面;
c:学习了javabean,也就是以前学习的实体类;
d:学习了servlet,把控制代码都放到 servlet
e:学习了 jstl 标签库,可以完全代码<% … %>真正实现显示页面与功能的分开
 也就是 MVC 模式了。

到目前为止都是基础,也就是玩玩罢了,学习的重点是框架,不过学习框架必须要把基础学好。

这两种分页的例子我已经用工程的形式做好了,如有需要可以下载了

  • 大小: 15 KB
1
3
分享到:
评论

相关推荐

    JSP分页技术,非常好的的学习Jsp分页技术的教程,适合初学者

    ### JSP分页技术详解:初学者的完美指南 #### 引言 在现代Web开发中,数据展示的效率和用户体验至关重要。对于大型数据库或数据集的处理,一次性加载所有数据不仅消耗大量资源,还可能导致页面加载缓慢,严重影响...

    jsp分页效果(web)

    二、JSP分页步骤 1. **计算总页数**:首先,我们需要知道所有数据的数量,然后根据每页显示的数据量来计算总页数。这可以通过执行SQL查询获取数据总数,然后用总数除以每页数量得到。 2. **接收用户请求**:用户...

    java实现分页 jsp分页 分页

    java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页

    目前最好的JSP分页技术

    本篇文章将深入探讨“目前最好的JSP分页技术”,并介绍其核心概念、优势以及实现步骤。 首先,我们要明确的是,没有绝对“最好”的技术,只有最合适的解决方案。选择分页技术通常要考虑性能、易用性、可维护性和...

    jsp分页循环显示

    `jsp分页循环显示`就是一种这样的技术,它结合了`JSP(JavaServer Pages)`和`Servlet`,用于从数据库获取数据并以分页的方式在网页上呈现。本篇文章将深入讲解这一技术的实现原理及步骤。 首先,我们需要理解JSP和...

    jsp 分页jsp 分页

    jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页...

    JSP分页技术(多种方法)

    本文件“JSP分页技术(多种方法)”中,将探讨几种常见的JSP分页实现方法。 1. **基于SQL的分页** 这是最基础的分页方法,通过在SQL查询语句中添加`LIMIT`和`OFFSET`或`ROWNUM`(根据数据库类型)来实现。例如,在...

    jsp 分页实现总结大全

    在"分页的实现.rtf"文件中,可能包含了一个具体的JSP分页实现案例,包括SQL查询、Servlet处理逻辑以及JSP页面的代码片段,通过阅读和理解这个案例,可以加深对JSP分页实现的理解。 总结,JSP分页实现是一个涉及到...

    jsp 分页示例源码

    **JSP分页技术详解** 在Web开发中,分页是一种常见的用户界面设计技术,它使得大量数据可以按页展示,提高用户体验并减轻服务器压力。本示例是基于JSP(JavaServer Pages)和SQL Server 2005构建的一个简单易懂的...

    非常好用的jsp分页标签

    本资源提供了一个非常好用的JSP分页标签,它简化了在JSP页面上实现分页的过程,无需编写过多的Java代码,只需在JSP页面上插入特定的标签即可。 1. **JSP分页标签**:JSP分页标签是一种预定义的、可重用的组件,可以...

    jsp 分页源码.rar

    "jsp 分页源码.rar"这个压缩包可能包含了一个完整的JSP分页实现的源代码示例,让我们来详细探讨一下JSP分页的相关知识点。 1. **分页原理**: - 分页的基本思想是将大量数据分成若干小块(每块称为一页),每次只...

    纯jsp分页,不加任何封装

    【纯jsp分页技术详解】 在Java Web开发中,分页功能是不可或缺的一部分,它能够帮助用户有效地管理和浏览大量数据,提升用户体验。本教程将深入探讨如何在JSP(Java Server Pages)中实现纯jsp分页,不依赖任何封装...

    jsp分页技术算法jsp分页技术算法

    **jsp分页技术算法详解** 在Web开发中,分页技术是必不可少的,尤其是在处理大量数据展示时。JSP(JavaServer Pages)作为Java的一种视图技术,提供了强大的功能来实现用户界面的动态生成。本篇文章将深入探讨JSP中...

    jsp分页插件(内附源码)

    **jsp分页插件**是一种在网页应用中实现数据分页显示的重要工具,尤其是在处理大量数据时,分页能够提高用户体验,避免一次性加载过多数据导致页面加载缓慢或资源浪费。这款名为"Codejia.Com"的插件因其简单易用和...

    通过servlet实现jsp分页技术

    "通过servlet实现jsp分页技术"的主题旨在讲解如何在Java Web环境下,利用Servlet和JSP进行数据的分页显示。下面将详细介绍这个过程,包括基本概念、步骤和关键点。 首先,我们需要理解分页的基本概念。分页是将大量...

    封装好直接使用的jsp分页插件

    "封装好直接使用的jsp分页插件"正是一款针对这一需求设计的工具,它能够简化开发过程,使开发者能够快速实现分页功能,而无需关注底层复杂的逻辑。 该插件适用于jsp与servlet的原生组合,同时对流行的SSH(Struts2 ...

    jsp分页代码(一个很好的jsp分页代码)粘贴后即可使用

    ### JSP分页技术详解与实现 #### 一、引言 JSP(JavaServer Pages)是一种基于Java的服务器端动态网页技术标准,用于生成动态HTML页面。在处理大量数据时,分页显示是一个非常实用的功能,它可以提高用户体验,减少...

    纯jsp分页查询

    【纯jsp分页查询】是一种在Web开发中常见的技术,主要应用于数据量较大时,为了提高用户体验和页面加载速度,将大量数据分为多个部分(页)进行显示。在这个项目中,开发者使用了JSP(JavaServer Pages)技术,这是...

Global site tag (gtag.js) - Google Analytics