JavaBean+Servlet+jsp实现分页显示(原创)
实现效果图
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
第一页 上一页 下一页 最后一页
代码:
(1)JavaBean //该javaBean需要连接一次数据库
PageDivide.java
package com.bean;
importjava.io.UnsupportedEncodingException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.myutil.DBCon;
public class PageDivide {
intsumRecord=0; //显示的总记录条数
int pageRecord=10; //每页显示的记录数
int pageNum=0; //显示的总页码数
int showPage=1; //所要显示的页码数
privateConnection con=null;
private PreparedStatement pstm=null;
private ResultSet rs=null;
private String sql="select * from category";//换成自己的表名
public PageDivide(){
//数据库连接
con=DBCon.getConn();
try {
pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=pstm.executeQuery();
}catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
this.sumRecord=this.getSumRecord();
// this.setSumRecord(this.getSumRecord());
this.pageNum=this.getPageNum();
}
//获取总记录数
publicint getSumRecord() {
try{
rs=pstm.executeQuery();
rs.last();
sumRecord=rs.getRow();
}catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
returnsumRecord;
}
publicList getData(int n){
Listlist=new ArrayList();
if(n<1)
{
n=1;
}
if(n>=pageNum)
{
n=pageNum;
}
int begin=(n-1)*pageRecord+1;//获取第n页的第一条记录的位置值
try {
rs=pstm.executeQuery();
rs.absolute(begin);//将结果集的游标定位到第n页的第一条记录
for(inti=0;i<pageRecord&&(begin+i)<=sumRecord;i++){
//处理最后一页的特殊情况
try{
intid = rs.getInt(1);
StringcategoryName = rs.getString(2);
//中文处理
categoryName=newString(categoryName.getBytes("ISO8859_1"),"GB2312") ;
intparentID = rs.getInt(3);
intlayer = rs.getInt(4);
Stringbz = rs.getString(5);
//中文处理
bz=newString(bz.getBytes("ISO8859_1"),"GB2312") ;
//封装信息到实体中
Categorycategory = new Category();
category.setId(id);
category.setCategoryName(categoryName);
category.setParentID(parentID);
category.setLayer(layer);
category.setBz(bz);
list.add(category);
rs.next();
}catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
// if (rs != null)
// pstm.close();
// if(pstm != null)
// pstm.close();
// if(con != null)
// con.close();
rs.close();
pstm.close();
con.close();
}catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
returnlist;
}
publicvoid setSumRecord(int sumRecord) {
this.sumRecord= sumRecord;
}
publicint getPageRecord() {
returnpageRecord;
}
publicvoid setPageRecord(int pageRecord) {
this.pageRecord= pageRecord;
}
//计算总页码数
publicint getPageNum() {
if(sumRecord%pageRecord==0)
{
pageNum=sumRecord/pageRecord;
}else
{
pageNum=sumRecord/pageRecord+1;
}
System.out.println("总页数"+pageNum +" 总记录条数"+sumRecord+" 每页显示的记录数"+pageRecord);
returnpageNum;
}
publicvoid setPageNum(int pageNum) {
this.pageNum= pageNum;
}
publicint getShowPage() {
returnshowPage;
}
publicvoid setShowPage(int showPage) {
this.showPage= showPage;
}
}
附数据库连接类:DBCon.java
package com.myutil;
import java.sql.*;
//数据库驱动加载及连接
publicclass DBCon {
intx;
publicstatic ConnectiongetConn(){
Connection con=null;
String driver;
String url;
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=bookManager";
try{
Class.forName(driver);
con=DriverManager.getConnection(url,"sa","*****");
}catch(Exception e){
e.printStackTrace();
}finally{
return con;
}
}
//数据源方式连接
publicstatic ConnectiongetConn2(){
Connection con=null;
String driver;
String url;
driver="sun.jdbc.odbc.JdbcOdbcDriver";
url="jdbc:odbc:book";
try{
Class.forName(driver);
con=DriverManager.getConnection(url);
}catch(Exception e){
e.printStackTrace();
}finally{
return con;
}
}
publicstaticvoid main(String args[]){
getConn2();
}
}
----------------------------------------------------------------------------------------------------------------------
(2)Servlet
PageServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bean.PageDivide;
public class PageServlet extendsHttpServlet {
public void doGet(HttpServletRequestrequest, HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("text/html;charset=GB2312");
PrintWriterout = response.getWriter();
//1.创建分页Bean对象
PageDividepd=new PageDivide();
StringshowPage=request.getParameter("showPage");//获取所要显示的页码数 字符串
intn;//获取所要显示的页码数
intpageNum=pd.getPageNum();//获取总页码数
if(showPage==null||"".equals(showPage)){
n=1;
}
elseif(Integer.parseInt(showPage)>pageNum){
n=pageNum;
}
else{
n=Integer.parseInt(showPage);
}
//获取第n页数据
Listlist=pd.getData(n);
request.setAttribute("showPage",new Integer(n));//保存当前所显示的页码
request.setAttribute("pageNum",new Integer(pageNum));//保存总页数
request.setAttribute("data",list); //保存第n页的数据
request.getRequestDispatcher("/PageDivide/pagedivide2.jsp").forward(request,response);//页面的转向
out.flush();
out.close();
}
}
----------------------------------------------------------------------------------------------------------------------
(3) Jsp显示页面
pagedivide2.jsp
<%@ pagelanguage="java"import="java.util.*,com.bean.*"pageEncoding="GB2312"%>
<%@ pagecontentType="text/html;GB2312"%>
<html>
<head>
<title>My JSP 'pagedivide2.jsp'starting page</title>
</head>
<body>
<%!
int showPage=1;
int pageNum=0;
%>
<%
Integerspstr=(Integer)request.getAttribute("showPage");//获取当前所显示的页码
Integer pnstr=(Integer)request.getAttribute("pageNum");//获取总页数
List list=(ArrayList) request.getAttribute("data"); //获取第n页的数据
//处理当前页码值
if(spstr==null||"".equals(spstr)){
showPage=1;
}
else{
// showPage=Integer.parseInt(spstr);
showPage=spstr.intValue();
}
//处理总页数
pageNum=pnstr.intValue();
//显示第n页的值
for(inti=0;i<list.size();i++){
Categoryc=(Category)list.get(i);
out.print(c.getCategoryName()+""+c.getId()+" "+c.getBz());
out.print("<br>");
}
%>
<br>
<a href="PageServlet?showPage=<%=1 %>">第一页</a>
<a href="PageServlet?showPage=<%=showPage+1 %>">下一页</a>
<a href="PageServlet?showPage=<%=showPage-1 %>">上一页</a>
<a href="PageServlet?showPage=<%=pageNum%>">最后一页</a>
</body>
</html>