jsp分页

 

1,分页的原理:javascript

一般咱们从数据库取得的数据较多时不会所有展示出来,须要用到分页。css

2,怎么取到咱们所须要的数据呢?html

*处理分页请求的Servlet或者jspjava

*请求要显示页面的页码mysql

*每页显示的信息数jquery

*总页数sql

3,分页分为两大类:数据库

*内存分页:一次将全部的页面查询出来,而后根据页面的请求显示指定的记录数。设计模式

*sql分页:根据页面的请求一次只从数据库中读取一页的结果,而后在页面显示该页。(select *from table limit 开始位置,结束位置)session

下面开始进行分页实战:

1,首先咱们建立一个page封装类,

 

 1 package cn.com.yong.Pojo;
 2 
 3 import java.util.List;
 4 
 5 public class Page {
 6     private int count;//总条数
 7     private List<Announcement>  evCount;//显示的数据
 8     private int pageSize=6;//每页的条数
 9     @SuppressWarnings("unused")
10     private int pageCount;//总页数
11     private int pageNow;//当前页
12     public Page(){}
13     public Page(int count, List<Announcement> evCount, int pageSize,
14             int pageCount, int pageNow) {
15         this.count = count;
16         this.evCount = evCount;
17         this.pageSize = pageSize;
18         this.pageCount = pageCount;
19         this.pageNow = pageNow;
20     }
21     public int getCount() {
22         return count;
23     }
24     public void setCount(int count) {
25         this.count = count;
26     }
27     public List<Announcement> getEvCount() {
28         return evCount;
29     }
30     public void setEvCount(List<Announcement> evCount) {
31         this.evCount = evCount;
32     }
33     public int getPageSize() {
34         return pageSize;
35     }
36     
37     public int getPageCount() {
38         int i=0;
39         if(getCount()%getPageSize()==0){
40             i=getCount()/getPageSize();
41         }else{
42             i=getCount()/getPageSize()+1;
43         }
44         return i;
45     }
46     public void setPageCount(int pageCount) {
47         this.pageCount = pageCount;
48     }
49     public int getPageNow() {
50         return pageNow;
51     }
52     public void setPageNow(int pageNow) {
53         this.pageNow = pageNow;
54     }
55     
56     
57 }

2.咱们写一个接口,加上咱们须要实现的方法

1 public interface AnnouncementDao {
2     
3     public Page getListPage(Page page);
4     
5 }

3.实现接口

 1 public class AnnouncementDaoImplement implements AnnouncementDao{
 2 public Page getListPage(Page page) {
 3         int coun=0;
      //建立list对象,用来存储查询到的数据库数据
4 List<Announcement> list=new ArrayList<Announcement>();
      //与数据库创建联系(经过单列设计模式实现,文章最后会附上)
5 con=DBConnection.getDBConnectionInstance().getDBConnection();
      //查询总记录数
6 String sql="select count(*) from announcement";
      //按照要求查询须要的记录 两个问号分别表明起始位置和结束位置
7 String sql2="select id,title,context from announcement limit ?,?"; 8 try { 9 ps=con.prepareStatement(sql2);
        //下标从零开始,须要-1
10 ps.setInt(1, (page.getPageNow()-1)*page.getPageSize()); 11 ps.setInt(2, page.getPageSize()); 12 ResultSet rs2=ps.executeQuery(); 13 while(rs2.next()){ 14 Announcement an=new Announcement(); 15 an.setId(rs2.getInt(1)); 16 an.setTitle(rs2.getString(2)); 17 an.setContext(rs2.getString(3));
           //把查询到的数据添加到list集合里
18 list.add(an); 19 } 20 rs=con.createStatement().executeQuery(sql); 21 if(rs.next()){ 22 coun=rs.getInt(1); 23 24 }
        //把获得的list集合设置给page的成员变量EvCount
25 page.setEvCount(list);
        //查询到的总记录数附给count
26 page.setCount(coun); 27 28 } catch (SQLException e) { 29 e.printStackTrace(); 30 } 31 return page; 32 33 } 34 35 }

4,建立一个Servlet

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.com.yong.DaoImplement.AnnouncementDaoImplement;
import cn.com.yong.Pojo.Page;
@WebServlet("/AnnouncementFindAllServlet")
public class AnnouncementFindAllServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    Page page=null;
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doPost(request, response);
        
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //建立一个session对象
        HttpSession session=request.getSession();
    //获取实现类中的参数page,获得里面的数据 page
=(Page)session.getAttribute("page"); if(page==null){ page=new Page(); } int pageNow=0;
     //获取当前页的属性 String str
=request.getParameter("pageNow"); if(str==null){ pageNow=1; }else{ pageNow=Integer.parseInt(str); }
         //把当前页获得的数值赋给page类中的pagenow变量 page.setPageNow(pageNow); AnnouncementDaoImplement adi
=new AnnouncementDaoImplement(); //调用方法 page=adi.getListPage(page);
      //    为page设置属性让jsp页面可以接受这个属性 session.setAttribute(
"page", page); response.sendRedirect("AnnouncementSelectAll.jsp"); } }

5,jsp页面

  1 <%
  2 String path = request.getContextPath();
  3 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  4 Page pa=(Page)session.getAttribute("page");
  5 %>
  6 
  7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8 <html>
  9   <head>
 10     <base href="<%=basePath%>">
 11      
 12     <title>My JSP 'AnnouncementDao.jsp' starting page</title>
 13     
 14     <meta http-equiv="pragma" content="no-cache">
 15     <meta http-equiv="cache-control" content="no-cache">
 16     <meta http-equiv="expires" content="0">    
 17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 18     <meta http-equiv="description" content="This is my page">
 19     <script src="jquery-1.6.4.min.js" type="text/javascript"></script>
 20     <script type="text/javascript"> 
 21     $(document).ready(function demo(){
 22     
 23         $("th").css({ color: "black", background: "#DDDDDD" });
 24         
 25         
 26     });
 27     function getFirstPage(p){
 28         if(p==1){
 29             alert("你已经在首页了")
 30             }else{
 31             window.location.href="AnnouncementFindAllServlet?pageNow=1";
 32                 }
 33         }
 34     function getLastPage(p){
 35         var last=<%=pa.getPageCount()%>;
 36         if(p==last){
 37             alert("你已经在尾页了");
 38             }else{
 39             window.location.href="AnnouncementFindAllServlet?pageNow="+last;
 40                 }
 41         }
 42     function getPageUp(p){
 43         if(p==1){
 44         alert("你已经在首页了");
 45             }else{
 46                 window.location.href="AnnouncementFindAllServlet?pageNow="+(p-1);
 47                 }
 48         }
 49     function getPageDn(p){
 50         var last=<%=pa.getPageCount()%>;
 51         if(p==last){
 52         alert("你已经在尾页了");
 53             }else{
 54                 window.location.href="AnnouncementFindAllServlet?pageNow="+(p+1);
 55                 }
 56         }
 57     function getJumpPage(pn){
 58         var changePage = document.getElementById("jumpPage").value;
 59         if(changePage ==-1){
 60             alert("请选择你要跳转的页面");
 61         }else if(changePage==pn){
 62             alert("您已经在该页");
 63         }else{
 64             window.location.href="AnnouncementFindAllServlet?pageNow="+changePage;
 65         }
 66     }
 67     </script>
 68   </head>
 69   
 70   <body>
 71      <p id="one" style="font-weight: bold;">公告管理</p>
 72      <p style="color: red;">____________________________________________________________________________________________________</p>
 73   <table align="center" width="100%" border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse;">
 74          <tr>
 75             <th>公告编号</th>
 76             <th>公告标题</th>
 77             <th>操做</th>
 78         </tr>
 79     <%    
 80    
 81         for(Announcement an:pa.getEvCount()){
 82             
 83     %>
 84         
 85         
 86         <tr align="center">
 87             <td><%=an.getId()%></td>
 88             <td><%=an.getTitle()%></td>
 89             <td><a href="AnnouncementDelServlet?id=<%=an.getId()%>">删除</a>||
 90             <a href="AnnouncementUpdateServlet?id=<%=an.getId()%>">修改</a></td>
 91             
 92         </tr>
 93         
 94     <%} %>
 95     </table>
 96         <p>共<%=pa.getPageCount()%>页,当前第<%=pa.getPageNow()%> 97         <span id="firstPage" onclick="getFirstPage(<%=pa.getPageNow()%>)">首页</span>
 98         <span id="pageUp" onclick="getPageUp(<%=pa.getPageNow()%>)">上一页</span>
 99         <span id="pageDn" onclick="getPageDn(<%=pa.getPageNow()%>)">下一页</span>
100         <span id="lastPage" onclick="getLastPage(<%=pa.getPageNow()%>)">尾页</span>
101         <span>
102         <span>跳转到
103                     <select id="jumpPage" onchange="getJumpPage(<%=pa.getPageNow() %>)">
104                         <option value="-1">--请选择--</option>
105                         <%
106                             for(int i=1;i<=pa.getPageCount();i++){
107                         %>
108                             <option value="<%=i%>"><%=i%></option>
109                         <% }%>
110                     </select>
111                     页</span>
112         </span>
113         </p>
114   </body>
115 </html>

附:jdbc单例

public class DBConnection {
    private String url="jdbc:mysql://localhost:3306/ei";
    private String user="root";
    private String password="666888";
    private Connection con=null;
    //构造方法私有化
    private DBConnection(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //建立一个私有化对象
    private static DBConnection jdbc=new DBConnection();
    //实例
    public static DBConnection getDBConnectionInstance(){
        return jdbc;
    }
    public Connection getDBConnection() {
        return con;
    }
}