- 浏览: 3535 次
- 性别:
- 来自: 深圳
最新评论
接触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 模式了。
到目前为止都是基础,也就是玩玩罢了,学习的重点是框架,不过学习框架必须要把基础学好。
这两种分页的例子我已经用工程的形式做好了,如有需要可以下载了
相关推荐
### JSP分页技术详解:初学者的完美指南 #### 引言 在现代Web开发中,数据展示的效率和用户体验至关重要。对于大型数据库或数据集的处理,一次性加载所有数据不仅消耗大量资源,还可能导致页面加载缓慢,严重影响...
二、JSP分页步骤 1. **计算总页数**:首先,我们需要知道所有数据的数量,然后根据每页显示的数据量来计算总页数。这可以通过执行SQL查询获取数据总数,然后用总数除以每页数量得到。 2. **接收用户请求**:用户...
java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 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分页实现方法。 1. **基于SQL的分页** 这是最基础的分页方法,通过在SQL查询语句中添加`LIMIT`和`OFFSET`或`ROWNUM`(根据数据库类型)来实现。例如,在...
在"分页的实现.rtf"文件中,可能包含了一个具体的JSP分页实现案例,包括SQL查询、Servlet处理逻辑以及JSP页面的代码片段,通过阅读和理解这个案例,可以加深对JSP分页实现的理解。 总结,JSP分页实现是一个涉及到...
**JSP分页技术详解** 在Web开发中,分页是一种常见的用户界面设计技术,它使得大量数据可以按页展示,提高用户体验并减轻服务器压力。本示例是基于JSP(JavaServer Pages)和SQL Server 2005构建的一个简单易懂的...
本资源提供了一个非常好用的JSP分页标签,它简化了在JSP页面上实现分页的过程,无需编写过多的Java代码,只需在JSP页面上插入特定的标签即可。 1. **JSP分页标签**:JSP分页标签是一种预定义的、可重用的组件,可以...
"jsp 分页源码.rar"这个压缩包可能包含了一个完整的JSP分页实现的源代码示例,让我们来详细探讨一下JSP分页的相关知识点。 1. **分页原理**: - 分页的基本思想是将大量数据分成若干小块(每块称为一页),每次只...
【纯jsp分页技术详解】 在Java Web开发中,分页功能是不可或缺的一部分,它能够帮助用户有效地管理和浏览大量数据,提升用户体验。本教程将深入探讨如何在JSP(Java Server Pages)中实现纯jsp分页,不依赖任何封装...
**jsp分页技术算法详解** 在Web开发中,分页技术是必不可少的,尤其是在处理大量数据展示时。JSP(JavaServer Pages)作为Java的一种视图技术,提供了强大的功能来实现用户界面的动态生成。本篇文章将深入探讨JSP中...
**jsp分页插件**是一种在网页应用中实现数据分页显示的重要工具,尤其是在处理大量数据时,分页能够提高用户体验,避免一次性加载过多数据导致页面加载缓慢或资源浪费。这款名为"Codejia.Com"的插件因其简单易用和...
"通过servlet实现jsp分页技术"的主题旨在讲解如何在Java Web环境下,利用Servlet和JSP进行数据的分页显示。下面将详细介绍这个过程,包括基本概念、步骤和关键点。 首先,我们需要理解分页的基本概念。分页是将大量...
"封装好直接使用的jsp分页插件"正是一款针对这一需求设计的工具,它能够简化开发过程,使开发者能够快速实现分页功能,而无需关注底层复杂的逻辑。 该插件适用于jsp与servlet的原生组合,同时对流行的SSH(Struts2 ...
### JSP分页技术详解与实现 #### 一、引言 JSP(JavaServer Pages)是一种基于Java的服务器端动态网页技术标准,用于生成动态HTML页面。在处理大量数据时,分页显示是一个非常实用的功能,它可以提高用户体验,减少...
【纯jsp分页查询】是一种在Web开发中常见的技术,主要应用于数据量较大时,为了提高用户体验和页面加载速度,将大量数据分为多个部分(页)进行显示。在这个项目中,开发者使用了JSP(JavaServer Pages)技术,这是...