การใช้งานส่วนหน้าใช้ Ligerui เพื่อใช้การเพจ รู้สึกว่าการใช้เฟรมเวิร์กนั้นง่ายมากและน่าเบื่อ มันจำลองอินเทอร์เฟซเพจของ Liger และใช้งาน (ตราบใดที่มันเป็นฟังก์ชั่นมันจะไม่สนใจสไตล์)
ที่นี่เราใช้สถาปัตยกรรมสามชั้นพื้นฐาน + Servlet + JSP เพื่อนำไปใช้งาน ความคิดนั้นง่ายมาก เขียนข้อมูลที่เกี่ยวข้องกับการเพจลงในคลาส PageBean บริการส่งคืนคลาสถั่วนี้ ทุกครั้งที่มีการค้นหาแบบสอบถามเพจการค้นหาข้อมูลจะพบได้จากถั่ว อย่างไรก็ตามรายละเอียดค่อนข้างซับซ้อนเช่นการประมวลผลขอบเขต (ทั้งขอบเขตส่วนหน้าและส่วนหลังจะต้องดำเนินการ) หน้าปัจจุบันจะต้องแสดงหลังจากการกระโดดกล่องแบบเลื่อนลง ฯลฯ ฯลฯ
นี่คือรูปแบบการปนเปื้อนที่นำมาใช้โดย Ligerui (กระบวนการดำเนินการเขียนไว้ในบล็อกก่อนหน้าของฉัน: //www.vevb.com/article/92850.htm)
กระบวนการดำเนินการจำลอง:
โครงสร้างไดเรกทอรี
ฐานข้อมูล (MySQL)
เลเยอร์โมเดล ฐานข้อมูลที่สอดคล้องกับโมเดล (บล็อก) และหน้าเว็บ (blogpage)
นำเข้า java.sql.date; บล็อกคลาสสาธารณะ {ID INT ส่วนตัว; ส่วนตัว int category_id; ชื่อสตริงส่วนตัว; เนื้อหาสตริงส่วนตัว วันที่ส่วนตัวสร้าง _time; // วิธีการ getter และ setter @Override สตริงสาธารณะ toString () {return "บล็อก [id =" + id + ", category_id =" + category_id + ", content =" + เนื้อหา + ", created_time =" + created_time + "]"; - Public Class BlogPage {รายการส่วนตัว <log> pagerecord; // บันทึกสำหรับแต่ละหน้าส่วนตัว int pageno; // หน้าปัจจุบันส่วนตัว int pagenostart; // แต่ละหน้าเริ่มต้นดัชนีดัชนีส่วนตัว int ส่วนตัว = 5; // ข้อมูลจำนวนมากเท่าใด ถือว่าเป็นข้อมูลที่มีอยู่นี้ totalrecord = TotalRecord; // คำนวณจำนวนทั้งหมดของหน้า TotalPage = (TotalRecord%Pagesize == 0)? TotalRecord/Pagesize: TotalRecord/Pagesize+1; // การประมวลผลชายแดนของ pageno ถ้า (pageno <= 1) this.pageno = 1; อื่นถ้า (pageno> = totalPage) this.pageno = totalPage; อย่างอื่นสิ่งนี้ pageno = pageno; // คำนวณดัชนีของแต่ละหน้านั่นคือดัชนีของข้อมูลแรกของแต่ละหน้าใช้สำหรับการสืบค้น pagenostart = (this.pageno-1)*หน้า; } public int getPagenostart () {return pagenostart; } โมฆะสาธารณะ setPagenostart (int pagenostart) {this.pagenostart = pagenostart start; } รายการสาธารณะ <บล็อก> getPagerEcord () {return pagerecord; } โมฆะสาธารณะ setPagerEcord (รายการ <blog> pagerecord) {this.pagerecord = pagerecord; } สาธารณะ int getPageno () {return pageno; } โมฆะสาธารณะ setpageno (int pageno) {this.pageno = pageno; } public int getPagesize () {กลับ pageSize; } โมฆะสาธารณะ setPagesize (int pageize) {this.page.ize = pageSize; } public int getTotalRecord () {return totalRecord; } โมฆะสาธารณะ settotalRecord (int totalRecord) {this.totalRecord = TotalRecord; } public int getTotalPage () {return totalPage; } โมฆะสาธารณะ settotalPage (int totalPage) {this.totalPage = TotalPage; - ชั้น Dao
JDBCUTIL ห่อหุ้มการเชื่อมต่อและการเปิดตัวของ JDBC
คลาสสาธารณะ JDBCUTIL {url String แบบคงที่ส่วนตัว = "JDBC: MySQL: // localHost: 3306/blogs_stu"; ชื่อผู้ใช้สตริงคงที่ส่วนตัว = "รูท"; รหัสผ่านสตริงคงที่ส่วนตัว = ""; คงที่ {ลอง {class.forName ("com.mysql.jdbc.driver"); } catch (exception e) {e.printstacktrace (); }} การเชื่อมต่อแบบคงที่สาธารณะ getConnection () {Connection Conn; ลอง {conn = driverManager.getConnection (URL, ชื่อผู้ใช้, รหัสผ่าน); กลับ Conn; } catch (sqlexception e) {e.printstacktrace (); } return null; } การเปิดตัวโมฆะแบบคงที่สาธารณะ (ResultSet RS, PreparedStatement PS, Connection Conn) {ถ้า (rs! = null) {ลอง {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} if (ps! = null) {ลอง {ps.close (); } catch (sqlexception e) {e.printstacktrace (); }} if (conn! = null) {ลอง {conn.close (); } catch (sqlexception e) {e.printstacktrace (); - คลาสสาธารณะ Blogdao {// บันทึกสำหรับแต่ละหน้าผ่านดัชนีเริ่มต้นแต่ละหน้าและขนาดหน้าแต่ละหน้าสำหรับการแบ่งหน้านั่นคือพารามิเตอร์สองพารามิเตอร์ (MySQL เพจใช้สำหรับขีด จำกัด ) รายการสาธารณะ <บล็อก> getPagerEcord (int pagenostart, หน้า int) PreparedStatement PS = NULL; ผลลัพธ์ RS = NULL; String sql = "เลือก * จากขีด จำกัด บล็อก?,?"; รายการ <blog> list = new ArrayList <บล็อก> (); ลอง {ps = conn.prepareStatement (SQL); ps.setint (1, pagenostart); ps.setint (2, pagesize); rs = ps.executeQuery (); ในขณะที่ (Rs.Next ()) {บล็อกบล็อก = บล็อกใหม่ (); blog.setId (rs.getint ("id")); blog.setCategory_id (rs.getInt ("category_id")); blog.settitle (Rs.getString ("title")); blog.setContent (Rs.getString ("เนื้อหา")); blog.setCreated_time (rs.getDate ("createD_Time")); list.add (บล็อก); } return list; } catch (sqlexception e) {e.printstacktrace (); } ในที่สุด {jdbcutil.release (rs, ps, conn); } return null; } // จำนวนทั้งหมดของบันทึกสาธารณะ int getTotal () {Connection Conn = Jdbcutil.getConnection (); PreparedStatement PS = NULL; ผลลัพธ์ RS = NULL; ลอง {ps = conn.prepareStatement ("เลือกนับ (*) จากบล็อก"); rs = ps.executeQuery (); if (rs.next ()) {return rs.getint (1); }} catch (sqlexception e) {e.printstacktrace (); } ในที่สุด {jdbcutil.release (rs, ps, conn); } return 0; -ชั้นบริการ
BLOGSERVICE ชั้นเรียนสาธารณะ {BlogDao BlogDao = New BlogDao (); // ส่งคืน PageBean ข้อมูลทั้งหมดที่จำเป็นสำหรับการปนเปื้อนไปที่ Pagebean เพื่อค้นหา Public BlogPage FindPagerEcord (int pageno) {int totalRecord = blogdao.getTotal (); BlogPage BlogPage = บล็อกใหม่ (Pageno, TotalRecord); รายการ <wlog> list = blogdao.getpagerecord (blogpage.getPagenostart (), blogpage.getPagesize ()); BlogPage.SetPagerEcord (รายการ); กลับบล็อกหน้า; -ชั้นเรียน
@webservlet ("/blogsplitservlet") คลาสสาธารณะ blogsplitservlet ขยาย httpservlet {โมฆะสาธารณะ doget (httpservletrequest คำขอ, httpservletResponse การตอบสนอง) โยน servletexception, ioexception Response.setContentType ("ข้อความ/html; charset = utf-8"); สตริง pagenostr = request.getParameter ("pageno"); // ครั้งแรกที่คุณเข้าถึง ServletPagenOSTR คือ NULL ให้ค่าเริ่มต้นนั่นคือหน้าแรกจะเข้าถึงได้โดยค่าเริ่มต้น int pageno = 1; if (pagenosttr! = null) pageno = integer.parseint (pagenostr); บริการ blogservice = new blogservice (); BlogPage BlogPage = Service.FindPagerEcord (Pageno); request.setAttribute ("blogpage", blogpage); request.getRequestDispatcher ("/blogpage.jsp"). forward (คำขอ, การตอบกลับ); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, httpservletResponse การตอบสนอง) พ่น servletexception, ioexception {doget (คำขอ, การตอบสนอง); - ด้วยวิธีนี้ข้อมูลการเพจทั้งหมดจะถูกห่อหุ้มลงในหน้าเว็บ
การใช้งาน JSP จำเป็นต้องดึงข้อมูลใน PageBean เท่านั้น
การใช้งาน JSP ของฉัน (จำลอง Ligerui) ได้รับด้านล่าง
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html><head> <meta http-equiv =" content-ype "content =" text/html; charset = utf-8 " ว่าตัวเลือกเลือกสอดคล้องกับหน้าปัจจุบัน select = document.getElementById ("เลือก"); pageno = '$ {blogpage.pageno}'; select.options [pageno - 1]. selected = 'เลือก'; } // เลือกฟังก์ชั่นการกระโดดแบบดรอปดาวน์รายการ selectjump () {var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // ข้อความกระโดด, เหตุการณ์ onblur, กล่องอินพุตสูญเสียโฟกัส, ฟังก์ชั่น textjump () {var pageno = document.getElementById ("ข้อความ") ค่า; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } </script> </head> <body> <% blogpage blogpage = (blogpage) request.getAttribute ("BlogPage"); รายการ <blog> list = blogpage.getPagerEcord (); // หน้าสุดท้ายเต็มไปด้วยแถวว่าง หากไม่กรอกข้อมูลจำนวนแถวของตารางหน้าสุดท้าย TR ไม่สอดคล้องกับอันก่อนหน้า มันน่าเกลียดถ้า (list.size () <blogpage.getPagesize ()) {สำหรับ (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); } %> <div> <table cellpacing = "0" bgcolor = "#cef0c5"> <tr> <td> id </td> <td> ชื่อเรื่อง </td> <td> เนื้อหา </td> <td> เวลาสร้าง </td> </tr> <td> <%= blog.getId ()%> </td> <td> <%= blog.getTitle ()%> </td> <td> <%= blog.getContent ()%> </td> <td> <%= blog.getcreated_time () <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}}%> </table> id = "เลือก"> <%สำหรับ (int i = 1; i <= blogpage.getTotalPage (); i ++) {%> <ตัวเลือก onclick = "SelectJump ()"> <%= i%> href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = 1"> home </a> <a href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getPageno ()-1 <1? blogpage.getPageno (): text =" text = "text =" text = "text =" text = " value = "$ {blogpage.pageno}" onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getPageno ()+1> blogpage.getTotalPage ()? href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getTotalPage ()%>"> หน้าสุดท้าย </a> <div style = "float: ขวา;" $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, รวม $ {blogpage.totalrecord} แต่ละหน้าจะปรากฏขึ้น </div> </div> </div> </body> </html> นี่คือรูปลักษณ์สุดท้าย รูปแบบได้รับการปรับประมาณและฟังก์ชั่นนั้นเหมือนกับการปนเปื้อนเริ่มต้นของ Ligerui
เปลี่ยนรหัสใน JSP เป็นแท็ก (JSTL แพ็คเกจ JAR ที่สอดคล้องกันจะต้องมีการแนะนำ) และใส่ฟิลเลอร์หน้าสุดท้ายใน JSP ใน Servlet
เพิ่มลงใน servlet
// หน้าสุดท้ายเต็มไปด้วยแถวว่าง หากไม่ได้เติมจำนวนแถวในตารางหน้าสุดท้าย TR ไม่สอดคล้องกับแถวก่อนหน้า รายการ <blog> list = blogpage.getPagerEcord (); if (list.size () <blogpage.getPagesize ()) {สำหรับ (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); } blogpage.setpagerecord (รายการ);หน้า JSP
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage" prefix = "c"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 การเปลี่ยนผ่าน // en" "http://www.w3.org/tr/html4/loose.dtd"> ฟังก์ชั่นการกระโดดแบบดรอปดาวน์รายการ selectjump () {var select = document.getElementById ("เลือก"); var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // ข้อความกระโดด, เหตุการณ์ onblur, ฟังก์ชั่น textjump () {var pageno = document.getElementById ("ข้อความ") ค่า; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } </script> </head> <body> <div> <table cellpacing = "0" bgcolor = "#cef0c5"> <tr> <td> id </td> <td> title </td> <td> เนื้อหา </td> <td> varstatus = "vs"> <c: ถ้า test = "$ {c! = null}"> <tr> <td> $ {c.id} </td> <td> $ {c.title} </td> <td> $ {c.content} </td> การเติมบรรทัดเปล่า-> <c: ถ้า test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> style = "ความสูง: 50px; พื้นหลังสี: #4b7db3; จุดสูง: 40px;"> <!-เลือกกล่องดรอปดาวน์-> <เลือก id = "เลือก"> <c: foreach เริ่มต้น = "1" end = "$ {blogpage.totalpage}" var = "i"> <ตัวเลือก $ {blogpage.pageno == i? 'selected = "เลือก"': ''}> $ {i} </optup> </c: foreach> </select> <a href = "$ {pageContext.request.contextpath}/blogsplitservlet href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.pageno-1 <1? blogpage.pageno: blogpage.pageno-1}"> หน้าก่อนหน้า </a> onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.pageno+1> blogpage.totalpage? <a href = "$ {pageContext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.totalpage}"> หน้าสุดท้าย </a> <div style = "float: ขวา;"> แสดง $ {blogpage.pagenostart+1} $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, รวม $ {blogpage.totalrecord} แต่ละหน้าจะปรากฏขึ้น </div> </div> </div> </body> </html>ในการใช้งานจริงคุณสามารถเขียนหน้า JSP ตามความต้องการของคุณ แต่รหัสพื้นหลังนั้นเป็นเรื่องทั่วไปโดยทั่วไป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น