يستخدم التنفيذ الأمامي Ligerui لتنفيذ الترحيل. يشعر أن استخدام الإطار أمر بسيط حقًا ، وهو ممل. إنه يحاكي واجهة الترحيل من Liger وتنفذها (طالما أنها وظيفة ، فهي تتجاهل النمط)
هنا نستخدم بنية الطبقة المكونة من ثلاث طبقات + Servlet + JSP لتنفيذها. الفكرة بسيطة للغاية. اكتب جميع المعلومات المتعلقة بالترحيل في فئة PageBean. الخدمة إرجاع هذه الفاصوليا. في كل مرة يتم البحث في استعلام الترحيل ، يتم العثور على المعلومات من الفول. ومع ذلك ، فإن التفاصيل معقدة للغاية ، مثل المعالجة الحدودية (يجب معالجة كل من حدود الواجهة الأمامية والخلفية) ، يجب عرض الصفحة الحالية بعد قفزات المربع المنسدلة ، إلخ.
هذا هو أسلوب ترقيم الصفحات الذي تنفذه Ligerui (تمت كتابة عملية التنفيذ في مدونتي السابقة: //www.vevb.com/article/92850.htm)
عملية تنفيذ المحاكاة:
هيكل الدليل
قاعدة البيانات (MySQL)
طبقة النموذج ، قاعدة بيانات تتوافق مع النموذج (المدونة) ، و PageBean (صفحة المدونة)
استيراد java.sql.date ؛ مدونة الفئة العامة {private int id ؛ private int category_id ؛ عنوان السلسلة الخاصة ؛ محتوى سلسلة خاصة ؛ تاريخ خاص تم إنشاؤه _time ؛ // getter و setter MethodsToverride public string toString () {return "blog [id =" + id + "، category_id =" + category_id + "، content =" + content + "، create_time =" + create_time + "] ؛ }} Public Class Blogpage {Private List <Blog> PagerEcord ؛ // سجل لكل صفحة pageno int pageno ؛ // الصفحة الحالية pagenostart الخاصة ؛ // كل صفحة تبدأ فهرس int pagesize = 5 ؛ // مقدار البيانات لكل totalRecord int totalRecord ؛ تعتبر معلومات موجودة this.totalRecord = TotalRecord ؛ . // معالجة الحدود من Pageno if (pageno <= 1) this.pageno = 1 ؛ آخر إذا (pageno> = totalpage) this.pageno = totalPage ؛ آخر this.pageno = pageno ؛ // احسب فهرس كل صفحة ، أي فهرس البيانات الأولى لكل صفحة ، يستخدم لترقيم الصفحات pagenostart = (this.pageno-1)*pagesize ؛ } public int getPagenostart () {return pagenostart ؛ } public void setPagenostart (int pagenostart) {this.pagenostart = pagenostart ؛ } القائمة العامة <log> getPagerEcord () {return pagerecord ؛ } public void setPagerEcord (قائمة <log> 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 {url url static private {private static url = "jdbc: mysql: // localhost: 3306/blogs_stu" ؛ username username static static static = "الجذر" ؛ كلمة مرور السلسلة الثابتة الخاصة = "" ؛ ثابت {try {class.forname ("com.mysql.jdbc.driver") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} اتصال ثابت getConnection () {connection conn ؛ حاول {conn = drivermanager.getConnection (url ، اسم المستخدم ، كلمة المرور) ؛ إرجاع كون ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ } إرجاع فارغ ؛ } إصدار الفراغ الثابت العام (ResultSet rs ، preparedStatement 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 {// سجلات لكل صفحة ، تمرير في كل صفحة من فهرس بدء صفحة وكل صفحة من أجل ترقيم الصفحات ، أي اثنين من المعلمتين من الحد (يتم استخدام mysql paging للحد) القائمة العامة <log> getPagerEcord (int pagenostart ، int pagesize) {connection connting = jdbcutil.getconnection () ؛ أعدت PS = NULL ؛ resultset rs = null ؛ String SQL = "SELECT * FROM BLOCK LIME؟ ،؟" ؛ قائمة <log> list = new ArrayList <Blog> () ؛ حاول {ps = conn.preparestatement (sql) ؛ Ps.Setint (1 ، Pagenostart) ؛ ps.setint (2 ، pagesize) ؛ rs = ps.executequery () ؛ بينما (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 (blog) ؛ } قائمة الإرجاع ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ } أخيرًا {jdbcutil.release (Rs ، ps ، conn) ؛ } إرجاع فارغ ؛ } // إجمالي عدد السجلات العامة int getTotal () {connection conn = jdbcutil.getConnection () ؛ أعدت PS = NULL ؛ resultset 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) ؛ } العودة 0 ؛ }}طبقة الخدمة
Public Class Blogservice {blogdao blogdao = new blogdao () ؛ // return PageBean ، جميع المعلومات المطلوبة للترقيم في PageBean للعثور على صفحة المدونة العامة FindPageRecord (int pageno) {int totalRecord = blogdao.getTotal () ؛ Blogpage blogpage = new Blogpage (Pageno ، TotalRecord) ؛ قائمة <Nog> list = blogdao.getPageRecord (blogpage.getPagenostart () ، blogpage.getPagesize ()) ؛ blogpage.setpagerecord (list) ؛ Return Blogpage ؛ }}فئة servlet
@webservlet ("/blogsplitservlet") public class blogsplitservlet يمتد httpservlet {public void doget (httpservletrequest request ، httpservletresponse) يلقي servleTexception ، ioException {request.setcharacterencoding ("UTF-8") ؛ استجابة. String pagenosttr = request.getParameter ("pageno") ؛ . if (pagenostr! = null) pageno = integer.parseint (pagenostr) ؛ Service المدونة = New BlogService () ؛ blogpage blogpage = service.findpagerecord (pageno) ؛ request.setattribute ("blogpage" ، blogpage) ؛ request.getRequestDispatcher ("/blogpage.jsp"). } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {doget (request ، response) ؛ }} وبهذه الطريقة ، سيتم تغليف جميع معلومات الترحيل في 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" ٪> <! "http://www.w3. يتوافق خيار SELECT مع الصفحة الحالية SELECT = document.getElementByID ("SELECT") ؛ Pageno = '$ {blogpage.pageno}' ؛ select.options [pageno - 1] .selected = 'select "؛ }. 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 ؛ } </script> </head> <body> <٪ blogpage blogpage = (blogpage) request.getAttribute ("blogpage") ؛ قائمة <log> list = blogpage.getPagerEcord () ؛ // تم ملء الصفحة الأخيرة مع صفوف فارغة. إذا لم يتم ملؤها ، فإن عدد صفوف جدول الصفحة الأخير لا يتماشى مع واحد سابق. إنه قبيح إذا (list.size () <blogpage.getPagesize ()) {for (int i = list.size () ؛ i <blogpage.getPagesize () ؛ i ++) list.add (null) ؛ } ٪> <viv> <table cellpacing = "0" bgColor = "#cef0c5"> <tr> <td> id </td> tid> title </td> <td> content </td> <td> وقت إنشاء </td> <td> <٪ = blog.getID () ٪> </td> <td> <٪ = blog.getTitle () ٪> </td> <td> <٪ = blog.getContent () ٪> </td> <td> <٪ = blog.getcreated_time () ٪> </td> </tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <٪}} ٪> </table> <div style = "الارتفاع: 50px ؛ colord-color: #4b7db3 ؛ line-high: 40px ؛ <٪ لـ (int i = 1 ؛ i <= blogpage.getTotalPage () ؛ i ++) {٪> <onclick = "selectjump () href = "$ {pagecontext.request.contextpath}/blogsplitservlet؟ pageno = <٪ = blogpage.getpageno ()-1 <1؟ blogpage.getpageno (): blogpage.getpageno ()-1 ٪>"> الصفحة السابقة> value = "$ {blogpage.pageno}" onblur = "textJump ()">/$ {blogpage.totalPage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet؟ pageno = <٪ = blogpage.getpageno ()+1> blogpage.gettotalpage ()؟ blogpage.getpageno (): blogpage.getpageno ()+1 ٪>" href = "$ {pagecontext.request.contextpath}/blogsplitservlet؟ pageno = <٪ = blogpage.getTotalPage () ٪>"> الصفحة الأخيرة </a> <div style = "float: right ؛" $ {blogpage.pageno == blogpage.totalPage؟ blogpage.totalrecord: blogpage.pagesize} ، يتم عرض ما مجموعه $ {blogpage.totalrecord}. يتم عرض كل صفحة. </viv> </viv> </viv> </body> </html> هذه هي النظرة الأخيرة. يتم ضبط النمط تقريبًا ، والوظيفة هي بالضبط نفس ترقيم Ligerui الافتراضي.
قم بتغيير الكود في JSP إلى علامة (JSTL ، يجب تقديم حزمة JAR المقابلة) ووضع حشو الصفحة الأخير في JSP في Servlet.
تمت إضافة إلى servlet
// تم ملء الصفحة الأخيرة مع صفوف فارغة. إذا لم يتم ملؤها ، فإن عدد الصفوف في جدول الصفحة الأخير لا يتماشى مع واحد سابق. قائمة <log> list = blogpage.getPagerEcord () ؛ if (list.size () <blogpage.getPagesize ()) {for (int i = list.size () ؛ i <blogpage.getPagesize () ؛ i ++) list.add (null) ؛ } blogpage.setpagerecord (list) ؛صفحة JSP
أقل prefix = "c" ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en" القائمة المنسدلة دالة القفز selectjump () {var select = document.getElementById ("SELECT") ؛ var pageno = select.selectedIndex + 1 ؛ window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet؟ pageno =" + pageno ؛ } // text Jump ، onblur event ، function textJump () {var pageno = document.getElementById ("text"). value ؛ window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet؟ pageno =" + pageno ؛ } </script> </head> <body> <viv> <table cellpacing = "0" bgColor = "#cef0c5"> <tr> <td> id </td> <td> title </td> <td> content </td> <td> وقت الخلق </td> </tr> varstatus = "vs"> <c: if test = "$ {c! = null}"> <tr> <td> $ { Page Blank Line Lining-> <C: if test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </c: style = "الارتفاع: 50px ؛ خلفية اللون: #4B7DB3 ؛ خط الذروة: 40px ؛"> <!-حدد مربع المنسدلة-> <حدد ID = "SELECT"> <C: foreach begin = "1" end = "$ {blogpage.totalpage}" var = $ {blogpage.pageno == i؟ '' select = "selection" ':' '}> $ {i} </potion> </ c: foreach> </select> <a href = "$ {pagecontext.request.context}/blogsplitservlet؟ pageno = 1" href = "$ {pagecontext.request.contextpath}/blogspsplitservlet؟ pageno = $ {blogpage.pageno-1 <1؟ blogpage.pageno: blogpage.pageno-1}"> الصفحة السابقة </a> <إدخال "text" id = onblur = "textJump ()">/$ {blogpage.totalPage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet؟ pageno = $ {blogpage.pageno+1> blogpage.totalpage الصفحة </a> <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet؟ pageno = $ {blogpage.totalpage}" $ {blogpage.pageno == blogpage.totalPage؟ blogpage.totalrecord: blogpage.pagesize} ، يتم عرض ما مجموعه $ {blogpage.totalrecord}. يتم عرض كل صفحة. </viv> </viv> </viv> </body> </html>في الاستخدام الفعلي ، يمكنك كتابة صفحات JSP وفقًا لاحتياجاتك ، ولكن رمز الخلفية عام في الأساس
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.