JavaWeb中的簡單分頁,JavaWeb簡單分頁
這次主要是講解一下通過登入後對得到的資料進行分頁,首先我們建立一個登入頁面login.jsp,因為我們主要學習一下分頁,所以登入驗證的部分不再闡述,主要代碼如下:
1 <form action="pageServlet">2 使用者名稱:<input type="text" name="username"><br>3 密 碼:<input type="text" name="password"><br>4 <input type="submit" value="提交">5 </form>
首先建立實體類User.java並添加get和set方法:
1 public class User { 2 private String username; 3 private String password; 4 public String getUsername() { 5 return username; 6 } 7 public void setUsername(String username) { 8 this.username = username; 9 }10 public String getPassword() {11 return password;12 }13 public void setPassword(String password) {14 this.password = password;15 }16 17 }
我們可以看到form表單是提交到pageServlet中,所以我們建立一個PageServlet,並在Servlet中擷取到資料,同時做一些分頁的準備,具體含義可以參照注釋理解,PageServlet代碼:
1 public class PageServlet extends HttpServlet { 2 public void doGet(HttpServletRequest request, HttpServletResponse response) 3 throws ServletException, IOException { 4 List<User> list = new ArrayList<User>(); 5 // 在這裡我不再串連資料庫而是用虛擬資料進行測試效果,小夥伴可以串連資料庫查詢到之後返回一個list 6 for (int i = 1; i < 7; i++) { 7 User user1 = new User(); 8 user1.setUsername("第" + i + "個使用者名稱"); 9 user1.setPassword("第" + i + "密碼");10 list.add(user1);11 }12 HttpSession session = request.getSession();13 // 將資料存到session中以便於在前台擷取14 session.setAttribute("userList", list);15 //擷取當前頁的頁數並轉為int類型,最終將資料存到session中16 int pageNos;17 if (request.getParameter("pageNos") == null18 || Integer.parseInt(request.getParameter("pageNos")) < 1) {19 pageNos = 1;20 } else {21 pageNos = Integer.parseInt(request.getParameter("pageNos"));22 }23 session.setAttribute("pageNos", pageNos);24 // 定義總頁數並存到session中25 int countPage = 3;26 // 在實際開發中我們的總頁數可以根據sql語句得到查詢到的總條數,然後用總條數除每頁的條數得到總頁數27 session.setAttribute("countPage", countPage);28 request.getRequestDispatcher("index.jsp").forward(request, response);29 }30 31 public void doPost(HttpServletRequest request, HttpServletResponse response)32 throws ServletException, IOException {33 34 }35 36 }
在上述代碼中我們最終將轉寄到index.jsp頁面,此時我們所有的資料都將顯示在index.jsp中,用JSTL和EL運算式擷取得到,index.jsp主要代碼如下:
1 <body> 2 <c:forEach items="${userList}" var="user" begin="${(pageNos-1)*2 }" 3 end="${pageNos*2-1}"> 4 <center> 5 <div>${user.username}</div> 6 </center> 7 <center> 8 <div>${user.password}</div> 9 </center>10 </c:forEach>11 <center>12 <c:if test="${pageNos>1 }">13 <a href="pageServlet?pageNos=1" >首頁</a>14 <a href="pageServlet?pageNos=${pageNos-1 }">上一頁</a>15 </c:if>16 <c:if test="${pageNos <countPage }">17 <a href="pageServlet?pageNos=${pageNos+1 }">下一頁</a>18 <a href="pageServlet?pageNos=${countPage }">末頁</a>19 </c:if>20 </center>21 <form action="pageServlet">22 <h4 align="center">共${countPage}頁 23 <input type="text" value="${pageNos}" name="pageNos" size="1">頁24 <input type="submit" value="go">25 </h4>26 </form>27 </body>
第二行中我們用<c:forEach >對session.setAttribute();中的內容進行擷取。注意,這裡我預設是每頁兩條資料,所以是(pageNos-1)*2,如果每頁N條資料則需將2改為N,當然N也可以從後台Servlet中擷取得到。
同時,因為我們在index.jsp中用了JSTL運算式,所以記得要匯入引用:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
到這裡我們就完成了一個簡單的分頁,快去試試吧。