تشارككم الأمثلة في هذه المقالة طريقة صنع ألبومات Java للرجوع إليها. المحتوى المحدد كما يلي
ملحوظة:
1) يتم تحديد الصورة على HTML بشكل ثابت. عند تحديث الصور الجديدة ، يجب تحديثها يدويًا. لذا استخدم Servlet لقراءة جميع الصور في الصور المحلية وعرضها بشكل ديناميكي للمستخدم.
2) إذا كانت هناك صورة تحمل اسمًا صينيًا ، فسوف يتسبب ذلك في حدوث خطأ لأن طريقة GET لا يمكن أن تمر مباشرة على الصينية.
الصفحة الرئيسية index.jsp
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> html> <head> <title> ettern </head> http: // localhost: 8080/photosweb/ -> <h2> ألبوم صغير </h2> <a href = "jsps/upload.jsp"> قم بتحميل الصورة </a> <a href = "<٪ = request.getContextPath () ٪>/servlet/showallimg"
عرض الصفحة:
تحميل وظيفة الصورة:
أقل Action = "<٪ = request.getContextPath () ٪>/servlet/uploadservlet" method = "post" enctype = "multipart/form-data"> photo: <input type = "file" name = "file"/> <br/> الوصف: <input type = "text" name =
package cn.hncu.servlet ؛ import java.io.file ؛ import java.io.ioException ؛ import java.io.inputstream ؛ import java.io.printwriter ؛ import java.util.list ؛ import javax.servlet.requestdispather ؛ import javax.servled.servlet.servletexception ؛ javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest org.apache.commons.fileupload.fileuploadexception ؛ import org.apache.commons.fileupload.disk.diskfileitemfactory ؛ import org.apache.commons.fileupload.servlet.servletfileudiled ؛ cn.hncu.dao.photodaoimpl ؛ import cn.hncu.domain.photomodel ؛ استيراد cn.hncu.utils.myutils ؛ الطبقة العامة uploadservlet يمتد httpservlet {public void dogge (httpservletrequest report) httpletsponse) استجابة. printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ out.println ("<body>") ؛ out.println ("<body>") ؛ out.println ("<body>") ؛ out.close () ؛ } public void dopost (طلب httpservletrequest ، استجابة httpservletponse) يلقي servletexception ، ioException {request.setcharacterencoding ("utf-8") ؛ استجابة. printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ out.println ("<head> <title> تحميل صفحة الصور </title> </head>") ؛ out.println ("<body>") ؛ // استخراج المعلومات من نموذج التحميل: 1. قم بتغليفها في كائن قيمة للصور ، اتصل بطبقة DAO لتخزينها في الخلفية // 2. قم بتخزين الصور التي تم تحميلها على DISK HARD DISK // Server: قم بتخزين المعلومات حول تخزين الصور ، ملف الملف = ملف جديد ("d:/a") ؛ if (file.exists ()) {file.mkdirs () ؛ } dfi.setRepository (ملف) ؛ servletfileupload تحميل = جديد servletfileupload (DFI) ؛ expload.setsizemax (1024*1024*8) ؛ Upload.SetHeaderenCoding ("UTF-8") ؛ // ==> request.setcharacterencoding ("UTF-8") ؛ حاول {list <IptiTem> list = upload.parserequest (request) ؛ photomodel pm = new photomodel () ؛ inputStream في = null ؛ لـ (fileItem fi: list) {if (fi.isformfield ()) {// لن يكون لهذا سلسلة ملفات مؤقت desc = fi.getString ("utf-8") ؛ pm.setdesc (desc) ؛ } آخر {in = fi.getInputStream () ؛ // string filename = fi.getfieldname () ؛ // system.out.println ("getFieldName:"+filename) ؛ اسم ملف السلسلة = fi.getName () ؛ // system.out.println ("getName:"+filename) ؛ // test: c:/user/adl1/pictures/pictures/111.jpg؟ // الشروط الافتراضية إذا (filename == null || filename.trim (). يساوي ("لا يوجد ملف محدد ،،،،، ، } pm.setdt (myutils.getCurrentDataime ()) ؛ realName.Length ()) ؛ pm.setdir (myutils.getdir (id)) ؛ الطريق) string path = "photos/"+pm.getDir () ؛ // system.out.println ("path:"+path) ؛ // test: photos/0 string filepath = getServletContext (). Test: D: /apache-Tomcat-7.0.30/webapps/photosweb/photos/9/0 file dir = new file (filepath) ؛ if (! dir.exists ()) {dir.mkdirs () ؛ } fileutils.copyinputStreamTofile (في ، ملف جديد (filepath+"/"+pm.getID ()+pm.getext ())) rd = request.getRequestDispatcher (getServletContext (). ويمثل web.xml دليل جذر المشروع // rd.forward (طلب ، استجابة) ؛ // لا يمكن استخدام إعادة التوجيه هنا. الفرق المحدد بين إعادة التوجيه والإعادة التوجيه: http://blog.csdn.net/xanlv/article/details/52701085 // redirect response.sendredirect (getServletContext (). } آخر {// فشل حفظ قاعدة البيانات-stay على صفحة التحميل requestDispatcher rd = request.getRequestDispatcher ("/jsps/upload..jsp") ؛ // "/photosweb/index.jsp" rd.forward (request ، response) ؛ }} catch (fileUploAdexception e) {رمي new runTimeException ("فشل التحميل" ، e) ؛ } أخيرًا {// clear file file file f = new file ("d:/a") ؛ file fs [] = f.listfiles () ؛ لـ (file ff: fs) {ff.delete () ؛ }} out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }} تأثير عرض الصفحة:
تصفح وظيفة الصورة:
package cn.hncu.servlet ؛ import java.io.ioException ؛ import java.io.printwriter ؛ import java.util javax.servlet.http.httpservletresponse ؛ استيراد cn.hncu.dao.photodaoimpl {response.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> ألبوم Browse </title> </head>") ؛ out.println ("<body>") ؛ String strPrath = request.getContextPath ()+"/JSPS/Upload.jsp" ؛ out.println ("<a href =/" "+strpath+"/"> العودة إلى صفحة التحميل </a>") ؛ // string table = "<table border = '1px' width = '100 ٪' cellpacing = '0' align = 'center'>"+// هذه الطريقة لا يمكن ضبطها على المركز horizontally. style = 'text-align: center ؛'> "+" <tr> <th> اسم الملف </th> <h> التحميل تاريخ ووقت </th> <th> الصورة </th> <th> وصف الصورة </th> <th> العملية </th> </tr> "؛ Out.println (الجدول) ؛ // اقرأ جميع معلومات الصور من طبقة DAO وأرسلها إلى قائمة الصفحات الأمامية <listomodel> قائمة = جديد photodaoimpl (). getAllPhotos () ؛ لـ (photomodel pm: list) {out.println ("<tr>") ؛ out.println ("<td width = 80>"+pm.getRealName ()) ؛ out.println ("</td>") ؛ out.println ("<td width = 120>"+pm.getdt ()) ؛ out.println ("</td>") ؛ string path = request.getContextPath ()+"/photos/"+pm.getdir ()+"/"+pm.getID ()+pm.getext () ؛ // system.out.println (path) ؛ // "/photosweb/photos/d/7/e78e1835242410f85dbd834bd صورة أكبر. out.println ("</td>") ؛ out.println ("<td width = 200>"+pm.getDesc ()) ؛ out.println ("</td>") ؛ out.println ("<td width = 80> <a href = '"+getServletContext (). getContextPath ()+"/servlet/delphoto؟ id ="+pm.getID ()+"> حذف الصورة </a>") ؛ // out.println ("<a a a a a a a a href = '<٪ = request.getContextPath () ٪>/servlet/down؟ id = "+pm.getID ()+"'> تنزيل الصورة </a> </td> ") ؛ out.println ("<br/> <a href = '"+getServletContext (). getContextPath ()+"/servlet/down؟ id ="+pm.getId ()+"'> تنزيل الصورة </a> </td>) ؛ out.println ("</tr>") ؛ } out.println ("</table>") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {reponse.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ out.print ("غير مدعوم طريقة ما بعد..") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }} تأثير عرض الصفحة:
حذف الوظيفة:
package cn.hncu.servlet ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ import javax.servlet.htttp.htttplet javax.servlet.http.httpservletresponse ؛ استيراد cn.hncu.dao.photodaoimpl ؛ استيراد cn.hncu.domain.photomodel {response.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> حذف صفحة الصور </title> </head>") ؛ out.println ("<body>") ؛ string id = request.getParameter ("id") ؛ سلسلة IP = request.getRemoteadDr () ؛ photodaoimpl dao = جديد photodaoimpl () ؛ photomodel pm = dao.getsinglebyid (id) ؛ if (pm! = null) {if (! pm.getip (). equals (ip)) {out.println ("ليس لديك إذن لحذف الصورة ...") ؛ String strPrath = request.getContextPath ()+"/servlet/showallimg" ؛ out.println ("<br/> <a href =/" "+strprath+"/"> return لمتابعة التصفح </a>") ؛ يعود ؛ } // DELETE يحتوي على جزأين من العمل: مسح المعلومات في قاعدة البيانات وحذف ملفات الصور في القرص الثابت الخادم // 1 مسح المعلومات في قاعدة البيانات BOOAN BOO = dao.del (id) ؛ // 2 حذف ملفات الصور في القرص الصلب الخادم إذا (boo) {string path = "photos/"+pm.getDir ()+"/"+pm.getId ()+pm.getext () ؛ String filePath = getServletContext (). getRealPath (path) ؛ ملف f = ملف جديد (filePath) ؛ if (f.exists ()) {f.delete () ؛ } string strprath = request.getContextPath ()+"/servlet/showallimg" ؛ // system.out.println (strath) ؛ /// photosweb/servlet/showphotos out.println ("حذف بنجاح ... <br/> <a href =/" "+strath+"/" } آخر {out.println ("فشل حذف معلومات قاعدة البيانات") ؛ }} آخر {out.println ("الملف غير موجود ...") ؛ String strPrath = request.getContextPath ()+"/servlet/showallimg" ؛ out.println ("<br/> <a href =/" "+strprath+"/"> return لمتابعة التصفح </a>") ؛ } out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {response.setContentType ("text/html") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> حذف صفحة الصور </title> </head>") ؛ out.println ("<body>") ؛ Out.print ("لا توجد طريقة ما بعد دعم ...") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }}عرض الصفحة:
وظيفة التنزيل:
1. استخدم HyperConnection على صفحة HTML للإشارة إلى الملف المراد تنزيله (غير آمن وسُسر بسهولة).
سؤال:
كيف تحدد الموارد المحلية؟
يمثل ServletContext مشروع ويب. يحتوي مشروع الويب على كائن ServletContext واحد فقط.
getRealPath ("/") ؛ // D:/PRM/TOM/WEB/
تحليل المتطلبات:
في التطوير الفعلي ، الذي يتم تحديد ملف للتنزيل ديناميكيًا من قبل المستخدم.
على سبيل المثال ، في دليل صور المشروع لدينا ، هناك العديد من ملفات الصور. يعرض المستخدم جميع الصور على الصفحة ، ويمكن للمستخدم النقر فوق رابط التنزيل لتنزيل الصور المفضلة.
تصميم مفصل:
استخدم صفحة ويب ثابتة لعرض جميع الصور. امنح كل صورة ارتباط تشعبي تم تنزيله.
تمرير معرف الصورة للتنزيل بعد HyperConnection.
استلام ديناميكي أسماء الصور في الخدمة. أكمل التنزيل.
package cn.hncu.servlet ؛ import java.io.file ؛ import java.io.fileInputStream ؛ import java.ioException ؛ import java.io.inputstream ؛ import java.io.outputstream ؛ import java.io.printwriter ؛ import java.net.urlencoder ؛ javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ import javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.opache.onmons.Omons cn.hncu.dao.photodaoimpl ؛ import cn.hncu.domain.photomodel ؛ public class downservlet يمتد httpservlet id = request.getParameter ("id") ؛ photomodel pm = new photodaoimpl (). getinglebyid (id) ؛ if (pm == null) {response.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ desponse.getWriter (). println ("التنبيه ('هذا النص لم يعد موجودًا ...')") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ // getServletContext (). getContextPath () requestDispatcher rd = request.getRequestDispatcher ("/servlet/down") ؛ // "/photosweb/index.jsp" // بداية url في كتلة رمز Java و web.xml "/ } آخر {// Real Download: اقرأ ملف الصور الخاص بالقرص الثابت للخادم وأرسله إلى العميل (تعيين رأس الاستجابة) // احصل على سلسلة الملف الحقيقية realName = pm.getRealName () ؛ realName = urlencoder.encode (realName ، "UTF-8") ؛ // إذا كان اسمًا صينيًا ، فيجب أن يتم ترميزه لمنع الاسم الملف من التشوه باللغة الصينية // inputStream في = downservlet.class.getClassLoader (). // قم بتعيين نوع العرض لتنزيل Response.setContentType ("Application/Force-Download") ؛ // قم بتعيين استجابة رأس الاستجابة. path = "photos/" pm.getdir () o = report.getoutream () ؛ {response.setContentType ("text/html" servlet </title> </head> ") ؛ out.println (" <body> ") ؛ out.println (" </body> ") ؛ out.println (" </html> ") ؛ out.flush () ؛ out.close () ؛ }} تأثير عرض الصفحة:
ملف التكوين web.xml
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> display-name> <Servlet-class> cn.hncu.servlet.uploadservlet </servlet-class> </servlet> <stervlet> <stervlet-name> showallimgservlet </servlet-name> <Servlet-class> cn.hncu.servlet.downservlet </servlet-class> </servlet> <vervlet> <Sradlet-Name> delphotoservlet </servlet-name> <Verlet-class> <Url-pattern>/servlet/uploadservlet </url-pattern> </servlet-mapping> <stervlet-mapping> <Sradlet-Name> showallimgservlet </servlet-name> <Url-pattern>/servlet/showallimg </url-patern> <Url-pattern>/servlet/down </url-pattern> </servlet-mapping> <servlet-mapping> <Sradlet-Name> delphotoservlet </servlet-name> <Url-pattern>/servlet/delphoto </sil-pattern> </servlet-mapping>
قاعدة البيانات: Photos.xml
<؟ </fult> -> </photos>
كائن القيمة: photomodel.java
حزمة CN.HNCU.DOMAIN ؛ الفئة العامة PHOTOMODEL {// قيمة الكائنات المعرف السلسلة الخاصة ؛ // UUID Private String RealName ؛ // photo file file name private string ext ؛ // extension private string dir ؛ // direct directory directory directory public public public detring dt ؛ } public void setId (string id) {this.id = id ؛ } السلسلة العامة getRealName () {return realName ؛ } public void setRealName (string realName) {this.realName = RealName ؛ } السلسلة العامة getext () {return ext ؛ } public void setext (String ext) {this.ext = ext ؛ } السلسلة العامة getDir () {return dir ؛ } public void setDir (string dir) {this.dir = dir ؛ } السلسلة العامة getDt () {return dt ؛ } public void setdt (String dt) {this.dt = dt ؛ } السلسلة العامة getDt () {return dt ؛ } public void setdt (String dt) {this.dt = dt ؛ } السلسلة العامة getip () {return ip ؛ } public void setip (string ip) {this.ip = ip ؛ } السلسلة العامة Dreturn desc ؛ } public void setDesc (string desc) {this.desc = desc ؛ }}داو طبقة: هنا اختصار ، فقط فئة التنفيذ photodaoimpl.java مكتوبة
package cn.hncu.dao ؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ استيراد org.dom4j.document ؛ import org.dom4j.Element ؛ public cn.hncu.domain.photomodel ؛ import cn.hul.util.dom.domfactory Sava (photomodel pm) {document dom = domfactory.getdom () ؛ العنصر جذر = dom.getRootElement () ؛ العنصر e = root.addelement ("photo") ؛ E.AdDattribute ("id" ، pm.getId ()) ؛ E.AdDattribute ("dir" ، pm.getdir ()) ؛ E.AdDattribute ("dt" ، pm.getdt ()) ؛ E.AdDattribute ("ext" ، pm.getext ()) ؛ E.AdDattribute ("ip" ، pm.getip ()) ؛ E.AdDattribute ("RealName" ، pm.getRealName ()) ؛ E.AdDelement ("desc"). setText (pm.getDesc ()) ؛ Boolean B = domfactory.save () ؛ إذا (ب) {return true ؛ } إرجاع خطأ ؛ } القائمة العامة <PhotomOdel> getAllPhotos () {list <Motomodel> li = new ArrayList <Photomodel> () ؛ dOMP = DOMFACTORY.GETDOD () ؛ العنصر e = dom.getRootElement () ؛ iterator <element> it = E.ElementIrator () ؛ بينما (it.hasnext ()) {element ie = it.next () ؛ photomodel pm = new photomodel () ؛ pm.setId (ie.attributeValue ("id")) ؛ pm.setdir (ie.attributeValue ("dir")) ؛ pm.setdt (ie.attributeValue ("dt")) ؛ pm.setext (ie.attributeValue ("ext")) ؛ pm.setip (ie.attributeValue ("ip")) ؛ pm.setRealName (ie.attributeValue ("realName")) ؛ pm.setdesc (ie.elementText ("desc")) ؛ li.add (pm) ؛ } إرجاع لي ؛ } photomodel getSingleById (string ide) {list <Photomodel> li = getAllPhotos () ؛ photomodel pm = new photomodel () ؛ لـ (photomodel p: li) {if (p.getId (). equals (id)) {return p ؛ }} الإرجاع null ؛ } public boolean del (string id) {docum dom = domfactory.getdom () ؛ العنصر e = (element) dom.selectsinglenode ("// photo [id = '"+id+"']") ؛ إرجاع E.GetParent (). إزالة (E) ؛ }}أدوات:
1.
package cn.hncu.utils ؛ import java.text.simpleDateFormat ؛ import java.util.date ؛ import java.util.uuid ؛ public class myutils {private myutils () {} static static getUuid () {return uuid.randomuid (). } static static simpledateformat sdf = new SimplEdateFormat ("yy-mm-dd hh: mm: ss") ؛ السلسلة الثابتة العامة getCurrentDataime () {return sdf.format (New Date ()) ؛ } السلسلة الثابتة العامة getDir (سلسلة uuid) {string dir1 = integer.toHexString (uuid.hashCode () & 0xf) ؛ string dir2 = integer.toHexString ((uuid.hashCode () & 0xf0) >> 4) ؛ إرجاع dir1+"/"+dir2 ؛ }}2.
package cn.hncu.utils ؛ import java.io.fileOutputStream ؛ import org.dom4j.document ؛ import org.dom4j.documentException ؛ استيراد org.dom4j.io.saxreader ؛ استيراد org.dom4j.io.xmlwriter ؛ اسم الملف الثابت الخاص ؛ static {try {saxreader r = new SaxReader () ؛ // احصل على اسم ملف المورد = domfactory.class.getClassLoader (). getResource ("photos.xml"). getPath () ؛ System.out.println ("users.xml path:"+filename) ؛ // "/d: /apache-tomcat-7.0.30/webapps/photosweb/web-inf/classes/photos.xml" // note: الحصول على طريقة الموارد في فئة المشروع الحالية في dom dom = r.read) ؛ } catch (documentException e) {E.PrintStackTrace () ؛ }} المستند الثابت العام getDom () {return dom ؛ } public static boolean save () {xmlWriter w ؛ حاول {w = new xmlWriter (fileOutputStream جديد (اسم الملف)) ؛ W.Write (DOM) ؛ W.Close () ؛ العودة صحيح. } catch (استثناء e) {return false ؛ }}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.