- 浏览: 3440 次
- 性别:
- 来自: 深圳
最新评论
接触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 分页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分页效果jsp分页效果jsp分页效果jsp分页效果jsp分页效果jsp分页效果jsp分页效果
java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页
目前最好的JSP分页技术
分页 jsp分页类 java代码 web 分页 分页代码
超级简单jsp分页代码超级简单jsp分页代码超级简单jsp分页代码
jsp分页类 jsp分页类 jsp分页类
jsp 分页实现总结大全jsp 分页实现总结大全jsp 分页实现总结大全
jsp分页技术算法,大家应该能接受这种算法,因为这个算法不难.希望大家好好研究吧
很实用的JSP分页代码,只要在需要分页的页面包含这个JSP就可以了
自己收集的jsp分页代码。对于北大青鸟Y2的学员可能有用吧。自己也在做这个项目。这里有增、删、该、查加分页。有上一页、下一页、首页、尾页、第几页、还有带数字和点的分页。可以说是非常好的分页代码。想要的朋友...
jsp 分页 demo(第二个例子) jsp 分页 demo(第二个例子) jsp 分页 demo(第二个例子) jsp 分页 demo(第二个例子) jsp 分页 demo(第二个例子)
jsp 分页 值得看看jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页
jsp 分页.rarjsp 分页.rarjsp 分页.rarjsp 分页.rar
jsp分页全部代码 方便使用 便于寻找
很简单的jsp分页代码 ,,对jsp初学者有很大的帮助。。很实在。
目前最好的JSP分页技术,牛逼~~一个顶级的JSp分页技术尽在其中~~~顶啊~~
jsp分页类 自己的写的 servletjsp分页类 自己的写的 servletjsp分页类 自己的写的 servletjsp分页类 自己的写的 servlet