Les exemples de cet article partagent avec vous la méthode de fabrication d'albums Java pour votre référence. Le contenu spécifique est le suivant
Note:
1) L'image sur HTML est spécifiée statiquement. Lorsque de nouvelles images sont mises à jour, elles doivent être mises à jour manuellement. Utilisez donc Servlet pour lire toutes les images dans les images locales et afficher dynamiquement à l'utilisateur.
2) S'il y a une image avec un nom chinois, cela provoquera une erreur car la méthode GET ne peut pas transmettre directement le chinois.
Index de page principale.jsp
<% @ page Language = "Java" import = "java.util. *" pageencoding = "utf-8"%> <! doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> http: // localhost: 8080 / photosweb / -> <h2> petit album </h2> <a href = "jsps / upload.jsp"> upload Photo </a> <a href = "<% = request.getContextPath ()%> / servlet / showallimg"> reprochage </a> </gody> </html>
Affichage de la page:
Télécharger la fonction d'image:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> Little album </h2> </ title> </-head> <pody> <h2> Little Album </ H2> </ Titre> </ Head> <Hody> <H2> Little Album </ H2> </ Titre> </ Head> <Hody> <H2> Little Album </ H2> </ Titre> action = "<% = request.getContextPath ()%> / servlet / uploadServlet" metheth = "post" enctype = "multipart / form-data"> Photo: <input type = "file" name = "file" /> <br/> Description: <entrée type = "text" name = "desc" /> <br/> <entrée = "soumettre" value = "upload"
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.requestdispatcher; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletfileupload; import org.apache.commons.io.fileutils; import Cn.hncu.dao.photodaoimpl; Import Cn.hncU.Domain.photoMoDel; cn.hncu.utils.myutils; public class uploadServlet étend httpservlet {public void doget (httpservletRequest request, httpservletResponse réponse) lève ServletException, ioexception {réponse.SetContentType ("Text / html"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); out.println ("<porce>"); out.println ("<porce>"); out.println ("<porce>"); out.close (); } public void doPost (request httpServLetRequest, httpsservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); Response.SetContentType ("Text / HTML; charSet = UTF-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <tight> upload la page photo </Title> </ Head>"); out.println ("<porce>"); // Extraire les informations du formulaire de téléchargement: 1. L'encapsulez-les dans un objet de valeur de photo, appelez le calque Dao pour les stocker en arrière-plan // 2. Stockez les photos téléchargées sur le disque dur du serveur // Base de données: stocker les informations sur le stockage des photos ,,, Le fichier réel est stocké sur la disk diskfileitemfactory dfi = new DiskfileItemfactory (); Fichier file = nouveau fichier ("d: / a"); if (file.exists ()) {file.mkDirs (); } dfi.setRepository (fichier); ServletFileUpload upload = new ServletFileUpload (DFI); upload.SetSizEMax (1024 * 1024 * 8); upload.setheDereencoding ("utf-8"); // ==> request.SetcharAtterencoding ("utf-8"); essayez {list <FeleItem> list = upload.parsErequest (request); Photomodel PM = nouveau photomodel (); InputStream dans = null; for (fileItem fi: list) {if (fi.isformfield ()) {// Cela n'aura pas de chaîne de fichier temporaire desc = fi.getString ("utf-8"); PM.SetDesc (DESC); } else {in = fi.getInputStream (); // String filename = fi.getFieldName (); // system.out.println ("getFieldName:" + filename); String filename = fi.getName (); // system.out.println ("getName:" + filename); // test: c: / users / adl1 / images / images enregistrées / 111.jpg? // Conditions par défaut if (filename == null || filename.trim (). Equals ("aucun fichier sélectionné ,,,,,, doit sélectionner un fichier ... <br/>"); string strpath2 = request.getContextPath () + "/ jsps / upload.jsp"; out.println ("<a href = /" "+ strpath2 +" / "> return to up to") "return;" + strpath2 + "/" } pm.setdt (myUtils.getCurrentDataime ()); string realName = filename.substring (filename.LasTindexof ("//")); // "/ 112.jpg" System.out.println (realName.Substring (1, RealName.Length ()); realName.Length ()); // Supprimez le "STORME REALNAM PM.SetDir (MyUtils.getDir (ID));}} // Terminez l'encapsulation de l'objet de valeur photo, appelez Dao pour le stockage booléen Boo = New Photodaoimpl (). Sava (PM); path = "Photos /" + pm.getDir (); // System.out.println ("Path:" + Path); // Tester: Photos / 9/0 String FilePath = GetServletContex Test: d: /apache-tomcat-7.0.30/webapps/photosweb/photos/9/0 file dir = nouveau fichier (filepath); if (! dir.exists ()) {dir.mkDirs (); } FileUtils.copyInputStreamtoFile (IN, nouveau fichier (filepath + "/" + pm.getId () + pm.getExt ())); // // Si le disque dur est enregistré avec succès, passez à la page principale - Forward /// requestDispatcher rd = request.getRequestDispatcher (getServletContext (). getContextPath () + "/ index.jsp"); // "/ photosweb / photosweb / index.jsp" // requestdispatcher rd = request.getRequestDispatcher ("/ index.jsp"); // "/ Photosweb / index.jsp" web.xml représente le répertoire racine du projet // rd.forward (demande, réponse); // Le transfert ne peut pas être utilisé ici. La différence spécifique entre la redirection et le transfert: http://blog.csdn.net/xanlv/article/details/52701085 // redirection réponse.sendRedirect (getServletContext (). GetContextPath () + "/ index.jsp"); } else {// La sauvegarde de la base de données a échoué - continuez sur la page de téléchargement requestdispatcher rd = request.getRequestDispatcher ("/ jsps / upload..jsp"); // "/ photosweb / index.jsp" rd.forward (request, réponse); }} catch (fileUpLoadexception e) {throw new RuntimeException ("upload a échoué", e); } Enfin {// effacer le fichier temporaire du fichier f = nouveau fichier ("d: / a"); Fichier fs [] = f.listFiles (); pour (fichier ff: fs) {ff.delete (); }} out.println ("</ body>"); out.println ("</html>"); out.flush (); out.close (); }} Effet d'affichage de la page:
Fonction d'image de navigation:
package cn.hncu.servlet; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.http.httpleservlet; import; Javax.servlet.http.httpservletResponse; Import Cn.hncu.dao.photodaoimpl; Import Cn.hncu.Domain.Photomodel; classe publique Showallimgsert {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); Out.println ("<A-Head> <Title> Album Browse </Title> </A-Head>"); out.println ("<porce>"); String strpath = request.getContextPath () + "/ jsps / upload.jsp"; out.println ("<a href = /" "+ strpath +" / "> remettre à la page de téléchargement </a>"); // String Table = "<Table Border = '1px' width = '100%' cellpacing = '0' Align = 'Center'>" + // Cette méthode ne peut pas être définie sur Center Horizontally String Table = "<Table Border = '1px' Wadth = '' 100% Cellpaçage =" <Table Border = '1px' Wadth = '' 100% Cellpaing = "<Table Border = '1PX' style = 'Text-Align: Center;'> "+" <Tr> <Th> Nom de fichier </th> <th> Téléchargez la date et l'heure </th> <th> Photo </th> <th> Description de la photo </th> <th> Opération </th> </tr> "; out.println (tableau); // Lisez toutes les informations photo à partir du calque DAO et envoyez-les à la liste des pages frontaux <Chotomodel> list = new PhotodaOIMPl (). GetAllPhotos (); pour (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 / E78E18352B42410F85DBD8DF834BD718. la plus grande image out.println ("<td width = 100> <a href = '" + path + "'> <img width = 100 height = 100 src = '" + path + "' //"); 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 () + "'> supprimer l'image </a>"); // out.println ("<a href = '<% = request.getContextPath ()%> / servlet / down? id = "+ pm.getID () +"'> Téléchargez l'image </a> </td> "); out.println ("<br/> <a href = '" + getServletContext (). getContextPath () + "/ servlet / down? id =" + pm.getid () + "'> Télécharger l'image </a> </ td>"); out.println ("</tr>"); } out.println ("</pally>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); Out.print ("Non pris en charge la méthode post ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Effet d'affichage de la page:
Supprimer la fonction:
package cn.hncu.servlet; import java.io.file; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.http.httpleservlet; import; Javax.servlet.http.httpservletResponse; Import Cn.hncu.dao.photodaoimpl; Import Cn.hncu.Domain.photomodel; classe publique DelphotoSer {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<éad- head> <ititle> supprimer la page photo </title> </-head>"); out.println ("<porce>"); String id = request.getParameter ("id"); String ip = request.getReMoteaddr (); Photodaoimpl Dao = new PhotodaOIMPl (); Photomodel pm = dao.getSingleById (id); if (pm! = null) {if (! pm.getIp (). equals (ip)) {out.println ("vous n'avez pas la permission de supprimer l'image ..."); String strpath = request.getContextPath () + "/ servlet / showallimg"; out.println ("<br/> <a href = /" "+ strpath +" / "> revenez pour continuer à naviguer </a>"); retour ; } // Delete contient deux parties du travail: effacer les informations dans la base de données et supprimer les fichiers d'image dans le disque dur du serveur // 1 effacer les informations dans la base de données booléan boo = dao.del (id); // 2 Suppression des fichiers d'image dans le disque dur du serveur if (boo) {String path = "Photos /" + pm.getDir () + "/" + pm.getID () + pm.getExt (); String filepath = getServletContext (). GetRealPath (path); Fichier f = nouveau fichier (filepath); if (f.exists ()) {f.delete (); } String strpath = request.getContextPath () + "/ servlet / showallimg"; // system.out.println (strpath); /// PhotosWeb / servlet / showphotos out.println ("supprimer avec succès ... <br/> <a href = /" "+ strpath +" / "> return to Browse </a>"); } else {out.println ("Supprimer les informations de la base de données échouées"); }} else {out.println ("Le fichier n'existe pas ..."); String strpath = request.getContextPath () + "/ servlet / showallimg"; out.println ("<br/> <a href = /" "+ strpath +" / "> revenez pour continuer à naviguer </a>"); } out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / html"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<éad- head> <ititle> supprimer la page photo </title> </-head>"); out.println ("<porce>"); out.print ("Aucune méthode post-support prise en charge ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Affichage de la page:
Fonction de téléchargement:
1. Utilisez une hyperconnection sur la page HTML pour pointer vers le fichier à télécharger (dangereuse et facilement volée).
question:
Comment déterminer les ressources locales?
ServletContext représente un projet Web. Un projet Web n'a qu'un seul objet ServletContext.
getRealPath ("/"); // d: / prm / tom / web /
Analyse des exigences:
Dans le développement réel, le fichier à télécharger est sélectionné dynamiquement par l'utilisateur.
Par exemple, dans notre répertoire d'images de projet, il existe de nombreux fichiers d'image. L'utilisateur affiche toutes les images de la page et l'utilisateur peut cliquer sur le lien de téléchargement pour télécharger les images préférées.
Conception détaillée:
Utilisez une page Web statique pour afficher toutes les images. Donnez à chaque image un hyperlien téléchargé.
Passez l'ID d'image à télécharger après l'hyperconnection.
Recevoir dynamiquement les noms d'images dans le service. Terminez le téléchargement.
Package CN.hncu.servlet; Importer java.io.file; import java.io.fileInputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.io.printwriter; javax.servlet.servletException; import javax.servlet.http.httpservlet; importer javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; import org.apache.commons.io.fileutils; import cn.hncu.dao.photodaoimpl; import Cn.hncu.domain.photomodel; public class dowservlet étend httpservlet {public void doget (httpservletRequest id = request.getParameter ("id"); Photomodel PM = new PhotodaoIml (). GetSingleByid (id); if (pm == null) {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); réponse.getwriter (). println ("alert ('Ce texte n'existe plus ...')"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); // getServletContext (). getContextPath () requestDispatcher rd = request.getRequestDispatcher ("/ servlet / down"); // "/ photosweb / index.jsp" // le début de l'URL dans Java Code Block et web.xml "/" Représente le projet Root Directory Rd.Forward (request, réponse); } else {// Real Download: Lisez le fichier photo du disque dur du serveur et envoyez-le au client (définissez l'en-tête de réponse) // Obtenez la chaîne de fichiers réel realName = pm.getRealName (); realName = urLencoder.encode (realName, "utf-8"); // s'il s'agit d'un nom chinois, il doit être transcodé pour empêcher le nom de fichier d'être brouillé en chinois // inputStream dans = downservlet.class.getClassloader (). GetResourCeasStream (RealName); // Définissez le type d'affichage sur téléchargement Response.SetContentType ("Application / Force-Download"); // Définissez l'en-tête de réponse Response.sethEader ("Content-Disposition", "Piépied; filename = /" "+ realName +" / "); // String path = request.getContextPath () +" / Photos / "+ pm.getDir () +" / "+ pm.getID () + pm.getText (); String () Path = "Photos /" + PM.getDir () "/" + pm.getId () + pm.getExt (); O = Response.getoutputStream (); IOException {Response.SetContentType (Text / HTML "); <A-Head> <Title> A Servlet </Title> </Ead> "); out.println (" <body> "); out.println (" </body> "); out.println (" </html> "); out.flush (); out.close (); }} Effet d'affichage de la page:
Fichier de configuration web.xml
<? xml version = "1.0" encoding = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-ristance" XSI: ScheMalation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <splay-name> </ stadelname> <servlet> <Servlet-Name> uploadservlet </ serplet-name> <Serplet-Class> CN.hncu.servlet.uploadServlet </ servlet-Class> </ Servlet> <Serplet> <Serplet-Name> ShowallimgServlet </vrlet-name> <servlet-Class> CN.hncu.servlet.showallimgServlet </servlet-Class> </servlet> <frlet> <Vertlet-Name> Downservlet </Servlet-Name> <Servlet-Class> cn.hncu.servlet.Downservlet </Servlet-Class> </Servlet> <Serplet> <Servlet-Name> DelphotoServlet </ Servlet-Name> <Serplet-Class> CN.hncu.servlet.delphotoservlet </servlet> </ Servlet. <Servlet-Mapping> <Serplet-Name> uploadServlet </ Servlet-name> <Url-Pattern> / servlet / uploadServlet </url-Pattern> </ Servlet-Mapping> <Servlet-Mapping> <Servlet-Name> ShowallimServlet </ Servlet-name> <Url-Pattern> / Servlet> Mapplet> Showallimg </url-Pattern> <servlet-mapping> <servlet-name> downservlet </ servlet-name> <url-potern> / servlet / down </ url-potern> </ servlet-mapping> <servlet-mapping> <servlet-name> delphotoServlet </ servlet-name> <url-platern> / servlet / delphoto </url-potern> </vravlet-maping> <vêtante> <Lelcome-File> index.jsp </ Welcome-File> </ Welcome-File-list> </ web -pp>
Base de données: Photos.xml
<? xml version = "1.0" Encoding = "utf-8"?> <photos> <! - Database Design <Photo id = "uUid" realname = "real file name.jpg" dt = "2016-10-03 19:51:31" ext = ". Jpg" Dir = "A / 5" IPC = "192.168.12.12"> </ Desc> INFORMATION DESCRIPTION </ DESC> "192.168.12.12" </oto> -> </ Photos>
Objet de valeur: photomodel.java
Package cn.hncu.domain; classe publique Photomodel {// Valeur photo Object Private String id; // uUid private String realName; // Photo Real Nom du fichier String private Ext; // Extension String privé Dir; // Direct Directory stocké après le fichier Spread String privé DT; // Description de la date de télécharge } public void setid (String id) {this.id = id; } public String getRealName () {return realName; } public void setRealName (String realName) {this.realName = realName; } public String getext () {return ext; } public void sext (string ext) {this.ext = ext; } public String getDir () {return dir; } public void setDir (string dir) {this.dir = dir; } public String getdt () {return dt; } public void setdt (string dt) {this.dt = dt; } public String getdt () {return dt; } public void setdt (string dt) {this.dt = dt; } public String getIP () {return ip; } public void setIP (String ip) {this.ip = ip; } public String dreturn desc; } public void setDesc (String desc) {this.desc = desc; }}Dao Layer: Voici l'abréviation, seule la classe d'implémentation Photodaoimpl.java est écrite
Package cn.hncu.dao; import java.util.arraylist; import java.util.iterator; import java.util.list; import org.dom4j.document; import org.dom4j.element; import cn.hncu.domain.photomodel; Importer cn.hncu.utils.Domfactory; Sava (Photomodel PM) {document Dom = Domfactory.getDom (); Élément root = dom.getrootelement (); Élément 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 ()); booléen b = domfactory.save (); if (b) {return true; } return false; } public List <Comodel> getAllPhotos () {list <gomodel> li = new ArrayList <Gomodel> (); Document Dom = Domfactory.getDom (); Élément e = dom.getrootelement (); Iterator <element> it = e.elementIterator (); while (it.hasnext ()) {élément ie = it.next (); Photomodel PM = nouveau 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); } return li; } public photomodel getSingleById (String id) {list <gomodel> li = getAllPhotos (); Photomodel PM = nouveau photomodel (); pour (photomodel p: li) {if (p.getId (). equals (id)) {return p; }} return null; } public boolean del (String id) {document Dom = domfactory.getDom (); Élément e = (élément) dom.selectSingLenode ("// photo [@id = '" + id + "']"); return e.getParent (). retirer (e); }}Outils:
1 et 1
package cn.hncu.utils; importer java.text.simpledateformat; import java.util.date; import java.util.uuid; public class myutils {private myutils () {} public static geutUuid () {return uuid.randomuUid (). Tostring (). Remplacer ("" "); } private static SimpledateFormat sdf = new SimpledateFormat ("yy-mm-dd hh: mm: ss"); String statique public getCurrentDataime () {return sdf.format (new Date ()); } public static String getDir (String UUID) {String dir1 = Integer.tohexString (uUid.hashCode () & 0xf); String dir2 = Integer.tohexString ((uUid.hashcode () & 0xf0) >> 4); return dir1 + "/" + dir2; }}2
Package CN.HNCU.UTILS; IMPORT Java.io.FileOutputStream; Import Org.Dom4j.Document; Import Org.Dom4j.DocumentException; Import Org.Dom4j.io.SaxReader; Import Org.Dom4j.io.xmlwriter; Classe publique Domfactory {Private Static Document Dom; Nom de fichier de chaîne statique privé; statique {try {saxReader r = new saxReader (); // obtient le fichier de ressources fileName = 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" // Remarque: Obtenez la méthode des ressources sous le projet ClassPath actuel à Tomcat Dom = R.read (filename); } catch (documentException e) {e.printStackTrace (); }} Document statique public GetDom () {return Dom; } public static boolean Save () {xmlwriter w; try {w = new xmlwriter (new FileOutputStream (nom de fichier)); W.Write (DOM); w.close (); Retour Vrai; } catch (exception e) {return false; }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.