في Javaee ، يتركز نموذج Model1 على صفحة JSSP. يجب ألا يعالج JSSP طلب المستعرض بشكل منطقي (باستخدام Javabean) وكذلك عرض الصفحات ذات الصلة عند الوصول إلى قاعدة البيانات.
في نموذج Model1 ، لا يوجد servlet.
مخطط النتيجة من طراز 1 كما يلي:
طراز 1 لديه سوء الصيانة وقابلية التوسع ، والتي هي فقط مناسبة للمشاريع الصغيرة.
تشغيل النتائج لأول مرة
Goods.jsp
<٪@page import = "entity.items" ٪> <٪@page import = "dao.itemsdao" ٪> <٪@page language = "java" import = "java.util.* String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/" ؛ ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<٪ = basepath ٪"> <title> meta my jsp 'index.jsp' page </title> http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "keywords" content = "keyword1 ، keyword2 ، keyword3"> <meta http-equiv = "description" content = type = "text/css" href = "styles.css"> -> <style type = "text/css"> div {float: left ؛ الهامش: 10px ؛ } div dd {margin: 0px ؛ حجم الخط: 10pt ؛ } div dd.dd_name {color: Blue ؛ } div dd.dd_city {color: #000 ؛ } </style> </head> <body> <center> <h1> عرض المنتج </h1> <hr> <table cellpadding = "0" cellpacing = "0"> <td> <٪ itemsdao dao = new headsdao () ؛ ArrayList <egans> list = new ArrayList <Ember> () ؛ // احصل على جميع المنتجات من DAO وحفظها إلى قائمة مجموعة القائمة = dao.getAllItems () ؛ if (list! = null && list.size ()> 0) {// loop من خلال المجموعة والعرض لـ (int i = 0 ؛ i <list.size () ؛ i ++) {item = list.get (i) ؛ ٪> <iv> <dl> <dt> <a href = "details.jsp؟ id = <٪ = item.getID () ٪>"> <img src = "images/<٪ = item.getPicture () ٪>"/> </a> </ad> <٪ = item.getPrice () ٪> </dd> </dl> </viv> <٪}}} ٪> </td> </tr> </table> </table> </center> </body> </tml> الصورة التي تمثل المنتج في الكود
<span style = "white-space: pre"> </span> <a href = "delations.jsp؟ id = <٪ = item.getID () ٪>"> <img src = "images/<٪ = item.getPicture () ٪>"/> </a>
من خلال النقر على صورة المنتج ، تمرير معرف المنتج الحالي إلى صفحة التفاصيل
التفاصيل. يعرض jsp منتجات مفصلة من خلال معرف المنتج ، ويتم الحفاظ
<٪@page import = "org.apache.taglibs.standard.tag.common.xml.foreachtag" ٪> <٪@page import = "entity.items" ٪> <٪@page isport = "dao.itemsdao" ٪> <٪@page eSport = "java.util.*" request.getContextPath () ؛ String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/" ؛ ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<٪ = basepath ٪"> <title> meta my jsp 'index.jsp' page </title> http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "Expires" content = "0" {الحدود: 1 ؛ الخلفية: #eaeae ؛ } #historyview td {font-size: 10px ؛ } </style> </head> <body> <center> <h1> تفاصيل المنتج </h1> <hr> <table cellpadding = "0" cellpacing = "0"> <td> <td> <centre> <table> <٪ itemsdao dao = new itemsdao () ؛ // احصل على كائن المنتج المقابل في DAO وفقًا لمعرف المنتج المرسلة من عنصر عناصر الطلب = dao.getItemById (Integer.Parseint (request .getParameter ("id"))) ؛ إذا كان (item! = null) {٪> <tr> <td rowspan = "5"> <img src = "images/<٪ = item.getPicture () ٪>"> </td> </r> <tr> <td> <b> <b> <٪ = item.getname () ٪> </b> </td> <٪ = item.getCity () ٪> </td> </tr> <tr> <td id = "pricename"> السعر: <٪ = item.getPrice () ٪> ¥ </td> <tr> <tr> <td id = "pricename" request.getCoOkies () ؛ String HistoryStr = "" ؛ لـ (ملف تعريف الارتباط C: ملفات تعريف الارتباط) {if (c.getName (). يساوي ("التاريخ")) {historystr = c.getValue () ؛ }} historystr + = item.getId () + "،" ؛ ملف تعريف الارتباط C = ملف تعريف الارتباط الجديد ("التاريخ" ، HistoryStr) ؛ // إعادة تعيين ملفات تعريف الارتباط. addcookie (c) ؛ ٪> </table> </center> </td> <td valign = "top" id = "historyview"> <centre> <table> <tr> <td> <b> المنتجات التي قمت بتصفحها </b> </td> </td> <٪ // Fetch السجلات الثلاثة الأخيرة من Dao استنادًا إلى ملفات تعريف الارتباط وحفظها على القائمة. dao.gethistoryview (HistoryStr) ؛ if (HistoryItems! = null && historyitems.size ()> 0) {// نقل المجموعة (العناصر HistoryItem: HistoryItems) {٪> <tr> <td> <a href = "delations.jsp؟ id = <٪ = historyitem.getid () ٪>" </r> <tr> <td> <b> <٪ = historyitem.getName () ٪> </b> </td> </tr> <td> <td> Origin: <٪ = HistoryItem.getCity () ٪> </td> </td> <٪}}} ٪> </tr> طبقة DAO مسؤولة عن تشغيل المنتجات في قاعدة البيانات
حزمة داو ؛ استيراد java.sql.connection ؛ استيراد java.sql.preparedStatement ؛ استيراد java.sql.resultset ؛ استيراد java.sql.sqlexception ؛ استيراد java.util.arraylist ؛ استيراد util.dbhelper ؛ استيراد كيان. // فئة منطق الأعمال من المنتجات العامة عناصر العناصر dutydao {// الحصول على جميع معلومات المنتج ArrayList Public <Temps> getAllItems () {// Collection ArrayList <item> list = ArrayList New Artylist <evels> () ؛ اتصال conn = null ؛ أعدت PS = NULL ؛ resultset rs = null ؛ حاول {conn = dbhelper.getConnection () ؛ String SQL = "SELECT * from heads" ؛ // sql state ps = conn.preparestatement (sql) ؛ rs = ps.executequery () ؛ // أضف نتائج الاستعلام إلى المجموعة بدوره بينما (rs.next ()) {item = new heads () ؛ item.setId (rs.getInt ("id")) ؛ item.setName (rs.getString ("name")) ؛ item.setCity (RS.GetString ("City")) ؛ item.setPrice (rs.getDouble ("Price")) ؛ item.setpicture (rs.getString ("picture")) ؛ item.setNumber (rs.getInt ("number")) ؛ list.add (item) ؛ }} catch (sqlexception e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق المورد if (rs! = null) {try {rs.close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }} if (ps! = null) {try {ps.Close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }}} قائمة الإرجاع ؛ } // احصل على معلومات المنتج بناءً على رقم المنتج عناصر عامة getItemById (int id) {item = items () ؛ الاتصال con = null ؛ أعدت PS = NULL ؛ resultset rs = null ؛ String SQL = "SELECT * من العناصر التي يكون فيها معرف =؟" ؛ حاول {con = dbhelper.getConnection () ؛ ps = con.preparestatement (SQL) ؛ Ps.SetInt (1 ، id) ؛ rs = ps.executequery () ؛ // إذا تم العثور على المعرف ، فقم بتهيئته لكائن العنصر if (rs.next ()) {item.setId (rs.getInt ("id")) ؛ item.setName (rs.getString ("name")) ؛ item.setCity (RS.GetString ("City")) ؛ item.setPrice (rs.getDouble ("Price")) ؛ item.setpicture (rs.getString ("picture")) ؛ item.setpicture (rs.getString ("picture")) ؛ item.setNumber (rs.getInt ("number")) ؛ }} catch (sqlexception e) {// todo catch catch e.printstacktrace () ؛ } أخيرًا {// إغلاق المورد إذا (rs! = null) {try {rs.close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }} if (ps! = null) {try {ps.Close () ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }}} عنصر الإرجاع ؛ } // احصل على آخر ثلاثة عناصر تم تصفحها استنادًا إلى ملفات تعريف الارتباط ArrayList Public <Temps> gethistoryview (سلسلة ملفات تعريف الارتباط) {ArrayList <item> list = new ArrayList <Temper> () ؛ معرفات السلسلة [] = cookie.split ("،") ؛ تعداد int = 3 ؛ // السجلات الثلاثة الأخيرة التي تتصفحها إذا (ids! = null && ids.length> 0) {for (int i = ids.length - 1 ؛ i> = 0 && i> ids.length - counts - 1 ؛ i--) {item item = getItemById (integer.parseint (ids [i])) ؛ / * * أولاً حدد ما إذا كان العنصر الحالي موجودًا في المجموعة. في حالة وجود تعداد+1 ، اقرأها مرة أخرى (مضمونة للحصول على 3 كائنات في مجموعة القائمة) لا تضيف هذا العنصر*/ if (list.contains (item)) {counts ++ ؛ يكمل؛ } list.add (item) ؛ }} قائمة الإرجاع ؛ }} عناصر فئة الكيان
كيان الحزمة ؛ عناصر الفئة العامة {private int id ؛ اسم السلسلة الخاصة ؛ سيتي سلسلة خاصة ؛ سعر مزدوج خاص ؛ رقم int الخاص ؛ صورة سلسلة خاصة public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getCity () {return City ؛ } public void setCity (String City) {this.city = City ؛ } public double getPrice () {return price ؛ } public void setPrice (price double) {this.price = price ؛ } public int getNumber () {return number ؛ } public void setNumber (int number) {this.number = number ؛ } السلسلة العامة getPicture () {return picture ؛ } public void setPicture (سلسلة سلسلة) {this.picture = picture ؛ } Override public int hashcode () {// todo method method method tuto return this.getID ()+this.getName (). hashcode () ؛ } Override public boolean equals (object obj) {if (this == obj) {return true ؛ } else {if (OBJ extryof heads) {items item = (items) obj ؛ if (this.getId () == item.getId () && this.getName (). equals (item.getName ())) {return true ؛ }}} return false ؛ }} هنا أعيد كتابنا عن Hascode ومساوي طرق لتعديل طريقة المقارنة (جميع العناصر كائن جديد. حتى لو كانت محتويات المنتجين متماثلة ، فلن تكون متساوية. لذلك نحن بحاجة إلى تعديل طريقة المقارنة)
لأنه بالنسبة لتصفح التاريخ ، لا يمكننا تحديث تاريخ تصفح المنتج الحالي وجميع المنتجات هي المنتجات. نحتاج فقط إلى التأكد من وجود منتج واحد فقط في تاريخ التصفح. لذا فإن طريقة Gethistoryview في طبقة DAO لديها هذا الرمز
<span style = "White-Space: pre"> </span> if (list.contains (item)) {counts ++ ؛ يكمل؛ } ثم هناك فئة الأدوات
نمط Dbhelpher Singleton يحصل على كائن الاتصال
حزمة استخدام استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.sqlexception ؛ الفئة العامة dbhelper {private Static Final String Driver = "com.mysql.jdbc.driver" ؛ url url static final static static = "jdbc: mysql: // localhost: 3306/shorping؟ useUnicode = true & charcterencoding = utf-8" ؛ username username username = "الجذر" ؛ password static final String Password = "123" ؛ اتصال ثابت خاص con = null ؛ // رمز الكتلة الثابتة مسؤول عن تحميل برنامج التشغيل الثابت {try {class.forname (driver) ؛ } catch (classnotfoundException e) {// todo catch catch e.printstacktrace () ؛ }} connection static static getConnection () {if (con == null) {try {con = drivermanager.getConnection (url ، اسم المستخدم ، كلمة المرور) ؛ } catch (sqlexception e) {// todo acto catch block e.printstacktrace () ؛ }} return con ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.