프론트 엔드 구현은 Ligerui를 사용하여 페이징을 구현합니다. 프레임 워크를 사용하는 것은 정말 간단하며 지루하다고 생각합니다. Liger의 페이징 인터페이스를 시뮬레이션하고 그것을 구현합니다 (기능인 한 스타일을 무시합니다).
여기서 우리는 기본 3 층 아키텍처 + 서블릿 + JSP를 사용하여 구현합니다. 아이디어는 매우 간단합니다. 모든 페이징 관련 정보를 PageBean 클래스에 작성하십시오. 서비스는이 Bean 클래스를 반환합니다. 페이징 쿼리가 검색 될 때마다 정보는 Bean에서 발견됩니다. 그러나 경계 처리 (프론트 엔드 및 백엔드 경계 모두 처리해야 함)와 같은 세부 사항은 상당히 복잡합니다. 드롭 다운 박스 점프 등의 현재 페이지를 표시해야합니다.
이것은 Ligerui가 구현 한 Pagination 스타일입니다 (구현 프로세스는 이전 블로그 : //www.vevb.com/article/92850.htm)에 작성되었습니다.
시뮬레이션 구현 프로세스 :
디렉토리 구조
데이터베이스 (MySQL)
모델 레이어, 모델 (블로그)에 해당하는 데이터베이스 및 PageBean (블로그 페이지)
java.sql.date; 공개 클래스 블로그 {private int id; 개인 int category_id; 개인 문자열 제목; 개인 문자열 내용; 개인 날짜 생성 된 _time; // getter and setter method @override public string toString () {return "blog [id =" + id + ", category_id =" + category_id + ", content =" + content + ", create_time =" + wastion_time + "]; }} 공개 클래스 블로그 페이지 {private list <blog> pageRecord; // 각 페이지에 대한 녹음 개인 int pageno; // 현재 페이지 개인 int pagenostart; // 각 페이지 시작 인덱스 인덱스 개인 int pagesize = 5; // private int total record; // Total Records public blogpage (int pageno, int totalrecord) {// int totalrecord는 public blogpage public int int int pageize = 5; // this.totalRecord = TotalRecord; // 총 페이지 수를 계산합니다. TotalPage = (Totalrecord%pagesize == 0)? TotalRecord/Pagesize : Totalrecord/Pagesize+1; // pageno의 국경 처리 if (pageno <= 1) this.pageno = 1; else if (pageno> = totalpage) this.pageno = TotalPage; 그렇지 않으면 this.pageno = pageno; // 각 페이지의 인덱스, 즉 Pagination Query Pagenostart = (this.pageno-1)*pagesize에 사용되는 각 페이지의 첫 번째 데이터 인덱스를 계산합니다. } public int getpagenostart () {return pagenostart; } public void setpagenostart (int pagenostart) {this.pagenostart = pagenostart; } public list <blog> getPageRecord () {return PageRecord; } public void setPageRecord (list <blog> pagerecord) {this.pagerecord = pagerecord; } public int getPageno () {return pageno; } public void setpageno (int pageno) {this.pageno = pageno; } public int getPagesize () {return pagesize; } public void setPagesize (int pagesize) {this.pagesize = pagesize; } public int getTotalRecord () {return totalrecord; } public void settotalRecord (int totalrecord) {this.totalRecord = TotalRecord; } public int getTotalPage () {return totalpage; } public void settotalpage (int totalpage) {this.totalpage = TotalPage; }} 다오 레이어
JDBcutil은 JDBC의 연결 및 릴리스 작업을 캡슐화합니다
공개 클래스 jdbcutil {private static string url = "jdbc : mysql : // localhost : 3306/blogs_stu"; 개인 정적 문자열 사용자 이름 = "루트"; 비공개 정적 문자열 비밀번호 = ""; static {try {class.forname ( "com.mysql.jdbc.driver"); } catch (예외 e) {e.printstacktrace (); }} public static connection getConnection () {Connection Conn; try {conn = drivermanager.getConnection (url, username, password); CONN을 반환; } catch (sqlexception e) {e.printstacktrace (); } return null; } public static void release (resultSet rs, proadstatement ps, connection conn) {if (rs! = null) {try {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} if (ps! = null) {try {ps.close (); } catch (sqlexception e) {e.printstacktrace (); }} if (conn! = null) {try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }}}} 공개 클래스 Blogdao {// 각 페이지의 레코드, 각 페이지의 통과, 각 페이지 시작 색인 및 Pagination의 각 페이지 크기, 즉 두 개의 매개 변수 (MySQL PAGIGE는 제한에 사용됩니다) 공개 목록 <Blogy> getPageRecord (int pagenostArt, int pagesize) {Connection Conn = jdbcutil.getConnection (); 준비된 상태 ps = null; resultSet rs = null; 문자열 sql = "선택 * 블로그 한도에서?,?"; 목록 <blog> list = new ArrayList <blog> (); try {ps = conn.preparestatement (SQL); ps.setint (1, pagenostart); ps.setint (2, pagesize); rs = ps.ExecuteQuery (); while (rs.next ()) {blog blog = new Blog (); blog.setid (rs.getint ( "id")); blog.setcategory_id (rs.getint ( "category_id")); blog.settitle (rs.getstring ( "title")); blog.setContent (rs.getString ( "content")); blog.setcreated_time (rs.getDate ( "create_time")); list.add (블로그); } 반환 목록; } catch (sqlexception e) {e.printstacktrace (); } 마침내 {jdbcutil.release (rs, ps, conn); } return null; } // 총 레코드 수 준비된 상태 ps = null; resultSet rs = null; try {ps = conn.preparestatement ( "블로그에서 count (*) 선택"); rs = ps.ExecuteQuery (); if (rs.next ()) {return rs.getint (1); }} catch (sqlexception e) {e.printstacktrace (); } 마침내 {jdbcutil.release (rs, ps, conn); } 반환 0; }}서비스 계층
공개 클래스 BlogService {blogdao blogdao = new Blogdao (); // PageBean을 반환합니다. Pagination에 필요한 모든 정보는 PageBean으로 이동하여 공개 블로그 페이지를 찾으십시오 FindPagerEcord (int pageno) {int totalrecord = blogdao.getTotal (); BlogPage BlogPage = New BlogPage (Pageno, TotalRecord); List <blog> list = blogdao.getPagereCord (blogpage.getPagenostart (), blogpage.getPagesize ()); blogpage.setpagerecord (list); 블로그 페이지를 반환합니다. }}서블릿 클래스
@webservlet ( "/blogsplitservlet") 공개 클래스 BlogsPlitservlet는 httpservlet {public void doget (httpservletrequest request, httpservletreponse 응답)을 servletexception, ioexception {request.setcharacterencoding ( "utf-8"); Response.setContentType ( "Text/Html; charset = utf-8"); 문자열 pagenostr = request.getParameter ( "pageno"); // ServletPagenostr에 처음 액세스 할 때는 NULL이므로 초기 값을 제공합니다. 즉, 첫 번째 페이지는 기본적으로 int pageno = 1에 액세스합니다. if (pagenostr! = null) pageno = integer.parseint (pagenostr); Blogservice Service = 새로운 BlogService (); BlogPage BlogPage = service.FindPageRecord (pageno); request.setAttribute ( "블로그 페이지", 블로그 페이지); request.getRequestDisPatcher ( "/blogpage.jsp"). FORMAR (요청, 응답); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {doget (요청, 응답); }} 이런 식으로 모든 페이징 정보는 PageBean에 캡슐화됩니다.
JSP 구현은 PageBean의 정보 만 검색하면됩니다.
내 JSP 구현 (시뮬레이션 Ligerui)은 다음과 같습니다
<%@ page language = "java"contenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage"%> <! doctype html public "-// w3c // dtd html 4.01 Transitional // "http://www.w3.org/tr/tr/html4/loose.dtd"> html> html> http-quiv ="content-type "content ="text/html; charset = utf-8 "> <title> 제목 </title> <text/javascript"intect "intect/javascript. 선택 옵션은 현재 페이지와 일치합니다. select = document.getElementById ( "select"); pageno = '$ {blogpage.pageno}'; select.options [pageno -1] .selected = 'selected'; } // 드롭 다운 목록 점프 함수 선택 선택 jump () {var pageno = select.selectedIndex + 1; Window.location.href = "http : // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // 텍스트 점프, onblur 이벤트, 입력 상자는 초점을 잃고 함수 textJump () {var pageno = document.getElementById ( "text"). value; Window.location.href = "http : // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; }. 목록 <blog> list = blogpage.getPagerEcord (); // 마지막 페이지에는 빈 행으로 채워져 있습니다. 채워지지 않으면 마지막 페이지 테이블 TR의 행 수는 이전의 행과 일치하지 않습니다. if (list.size () <blogpage.getPagesize ()) {for (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); . <td> <%= blog.getId ()%> </td> <td> <%= blog.getTitle ()%> </td> <td> <%= blog.getContent ()%> </td> <td> <%= blogy.getCreated_Time ()%> </td> </tr> <! <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}%> </table> <div style = "높이 : 50px; 배경 색 : #4b7db3; line-height : 40px"> <select box re; <%int i = 1; i <= = blogpage.getTotalPage (); i ++) {%> <옵션 onclick = "selectJump ()"> <%= i%> </옵션> <%}%> </select> <a href = "$ {pagecontext.request.context path}/blogsplitservlet? href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getpageno () -1 <1? blogpage.getpageno () : blogpage.getPageno () -1%>"> 이전 페이지 </a> input type = "텍스트"텍스트 ""1px " value = "$ {blogpage.pageno}"onblur = "textJump ()">/$ {blogpage.totalPage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getpageno ()+1> blogpage.gettotalpage ()? blogpage.getpageno () : blogpage.getpageno ()+1%>"> 다음 페이지 </a> <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getTotalPage ()%>"> 마지막 페이지 </a> <div style = "float;"> 표시 $ {blogpage.pagenostart+1} to $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord : blogpage.pagesize}, 총 $ {blogpage.totalrecord} 막대가 표시됩니다. 각 페이지가 표시됩니다. </div> </div> </div> </body> </html> 이것이 마지막 모양입니다. 스타일은 대략 조정되며 함수는 Ligerui의 기본 페이지 매김과 정확히 동일합니다.
JSP의 코드를 태그 (JSTL, 해당 JAR 패키지를 소개해야 함)로 변경하고 마지막 페이지 필러를 JSP에 서블릿에 넣습니다.
서블릿에 추가되었습니다
// 마지막 페이지에는 빈 행으로 채워져 있습니다. 채워지지 않으면 마지막 페이지 테이블 TR의 행 수는 이전 페이지와 일치하지 않습니다. 목록 <blog> list = blogpage.getPagerEcord (); if (list.size () <blogpage.getPagesize ()) {for (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); } blogpage.setpagerecord (list);JSP 페이지
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage" Prefix = "c"%> <! doctype html public "-// w3c // dtml html 4.01 전환 // en" "http://www.w3.org/tr/html4/loose.dtd"> html> <<<head>< <titlet title </javipt"/javast "> 드롭 다운 목록 점프 함수 selectJump () {var select = document.getElementById ( "select"); var pageno = select.selectedIndex + 1; Window.location.href = "http : // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // 텍스트 점프, onblur 이벤트, 함수 textJump () {var pageno = document.getElementById ( "text"). 값; Window.location.href = "http : // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; . varstatus = "vs"> <c : if test = "$ {c! = null}"> <tr> <td> $ {c.id} </td> <td> $ {c.title} </td> <td> $ {c.content} </td> <td> $ {c.created_time} </td> </td> </td> </td> </td> 빈 라인 채우기-> <c : if test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </c : if> </c : foreach> 스타일 = "높이 : 50px; 배경색 : #4b7db3; line-height : 40px;"> <!-선택 드롭 다운 상자-> <select id = "select"> <c : foreach begin = "1"end = "$ {blogpage.totalpage}"var = "i"> <옵션 value = "$ {i}" $ {blogpage.pageno == i? 'selected = "selected":' '}> $ {i} </옵션> </c : foreach> </select> <a href = "$ {pagecontext.request.conteptpath}/blogsplitservlet? pageno = 1"> home </a> <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.pageno.pageno-1 <1? blogpage.pageno : blogpage.pageno-1}"> 이전 페이지 </a> <a> <a> <a> input type "wect"size = "1px ="$ {bloglpege.page.page. onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.pageno.pageno.pageno.page.pageno <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.totalpage}"> 마지막 페이지 </a> <div style = "float;"> 표시 $ {blogpage.pagenostart+1} to $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord : blogpage.pagesize}, 총 $ {blogpage.totalrecord} 막대가 표시됩니다. 각 페이지가 표시됩니다. </div> </div> </div> </body> </html>실제로 사용하면 필요에 따라 JSP 페이지를 작성할 수 있지만 배경 코드는 기본적으로 일반적입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.