Los ejemplos en este artículo comparten con usted el método de hacer álbumes de Java para su referencia. El contenido específico es el siguiente
Nota:
1) La imagen en HTML se especifica estáticamente. Cuando se actualizan nuevas imágenes, deben actualizarse manualmente. Por lo tanto, use Servlet para leer todas las imágenes en imágenes locales y mostrarlas dinámicamente al usuario.
2) Si hay una imagen con un nombre chino, causará un error porque el método GET no puede pasar directamente al chino.
Página principal índice.jsp
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 Transitional // en"> <html> <fead> <title> pequeño álbum </title> </thead> <!-<!-<!-<!-<!-<! http: // localhost: 8080/Photosweb/ -> <h2> pequeño álbum </h2> <a href = "jsps/upload.jsp"> cargar foto </a> <a href = "< %= request.getContextPath () %>/servlet/showallimg"> Photos de browse </a> </body> </html>
Pantalla de la página:
Función de imagen de carga:
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! Doctype html público "-// w3c // dtd html 4.01 transición // en"> <html> <fead> <title> pequeño álbum </titter> </tod> <body> <h2> álbum pequeño </h2> Action = "< %= request.getContextPath () %>/servlet/uploadServlet" método = "post" enctype = "multipart/form-data"> Photo: <input type = "file" nombre = "archivo"/> <br/> descripción: <input type = "text" name = "descuN" </body> </html>
paquete 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; import javax.servlet.servlet.servletexception; import; importar; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletreSponse; importar org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.fileUploadException; importar org.apache.commons.fileupload.disk.diskFileItemFactory; importar org.apache.commons.fileupload.servlet.servletfileupload; importar org.apache.commons.io.fileutils; cn.hncu.dao.photodaoImpl; import cn.hncu.domain.photomodel; import cn.hncu.utils.myutils; public class uploadServlet extiende httpservlet {public void doget (httpservletRequest solicitud, httpServlet Respuesta) lanza el servicio de servicio, Ioid (httpServletRequest solicitud, httpServletResponse) lanza ServettException, IoDoget (httpServletRequest solicitud, httpServletReSponse Respuesta). respuesta.setContentType ("Text/html"); PrintWriter out = Response.getWriter (); out.println ("<! DocType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); out.println ("<body>"); out.println ("<body>"); out.println ("<body>"); out.close (); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {request.setcharacterEncoding ("UTF-8"); respuesta.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 ("<Evieve> <title> cargue la página de fotos </title> </head>"); out.println ("<body>"); // Extraiga información del formulario de carga: 1. Encapséla en un objeto de valor de foto, llame a la capa DAO para almacenarla en segundo plano // 2. Almacene las fotos cargadas en el disco duro del servidor // base de datos: almacene la información sobre el almacenamiento de las fotos ,,, el archivo real se almacena en el disco duro diskfileitemFactory DFI = newfileImfactory (); Archivo archivo = nuevo archivo ("d:/a"); if (file.exists ()) {file.mkdirs (); } dfi.setRepository (archivo); ServletFileUpload upload = new ServLetFileUpload (DFI); cargar.setsizeMax (1024*1024*8); upload.setheaderEncoding ("utf-8"); // ==> request.setcharacterEncoding ("UTF-8"); intente {list <StilEitem> list = upload.parserequest (request); Photomodel PM = new Photomodel (); InputStream in = null; for (fileitem fi: list) {if (fi.isformfield ()) {// Esto no tendrá una cadena de archivo temporal desc = fi.getString ("utf-8"); PM.SetDesc (DESC); } else {in = fi.getInputStream (); // string filename = fi.getFieldName (); // system.out.println ("getFieldName:"+fileName); Cadena filename = fi.getName (); // system.out.println ("getName:"+filename); // test: c:/users/adl1/imágenes/imágenes guardadas/111.jpg? // Condiciones predeterminadas if (filename == null || filename.trim (). Equals ("sin archivo seleccionado ,,,,, debe seleccionar un archivo ... <br/>"); String strpath2 = request.getContextPath ()+"/jsps/upload.jsp"; out.println ("<a href ="+strpath2+"/"/"returning to up up"); retorno; RealName.length ()); // Eliminar el "/" de RealName // Extension String ext = FileName.Substring (FileName.lastIndexOf (".") PM.SetDir (myUtils.getDir (id)); ruta = "Photos/"+PM.getDir (); // System.out.println ("Path:"+Path); // Test: Photos/9/0 String filePath = GetServletContext (). GetRealPath (ruta); // System.out.println ("FilePath:"+FilePath); // Prueba: D: /apache-Tomcat-7.0.30/webapps/photosweb/photos/9/0 archivo dir = nuevo archivo (filepath); if (! dir.exists ()) {dir.mkdirs (); } FileUtils.CopyInputStreamToFile (in, nuevo archivo (filepath+"/"+pm.getid ()+pm.getext ())); // // Si el disco duro se guarda correctamente, salte a la página principal - reenviar /// requestdispatcher rd = request.getRequestDispatcher (getServletContext (). getContextPath ()+"/index.jsp"); // "/Photosweb/Photosweb/index.jsp" // requestdispatcher rd = request.getRequestDispatcher ("/index.jsp"); // "/photosweb/index.jsp" g // ////el inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la inicio de la url. Block y Web.xml representa el directorio root del proyecto // rd.forward (solicitud, respuesta); // El reenvío no se puede usar aquí. La diferencia específica entre la redirección y el reenvío: http://blog.csdn.net/xanlv/article/details/52701085 // redirect Response.sendedirect (getServletContext (). GetContextPath ()+"/index.jsp"); } else {// La base de datos de ahorro de la base de datos Falló-en la página de carga requestdispatcher rd = request.getRequestDispatcher ("/jsps/upload..jsp"); // "/Photosweb/index.jsp" rd.forward (request, respuesta); }} catch (fileUploadException e) {throw new runtimeException ("cargar fallido", e); } Finalmente {// borrar archivo de archivo temporal f = nuevo archivo ("d:/a"); Archivo fs [] = f.listFiles (); for (archivo ff: fs) {ff.delete (); }} out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Efecto de visualización de la página:
Examinar la función de la imagen:
paquete 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.httpservletRequest; javax.servlet.http.httpServletResponse; import cn.hncu.dao.photodaoImpl; import cn.hncu.domain.photomodel; public class showAllImgSeServlet extiende httpservlet {public void doget (httpServletRequest Solicitud {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> álbum navegue </title> </head>"); out.println ("<body>"); String strpath = request.getContextPath ()+"/jsps/upload.jsp"; out.println ("<a href =/" "+strpath+"/"> return a cargar página </a>"); // cadena table = "<table border = '1px' width = '100%' cellPacing = '0' align = 'Center'>" +// Este método no se puede configurar en Center horizontalmente string table = "<table border = '1px' width = '100%100%° CLIMS%CELET' style = 'text-align: center;'> "+" <tr> <th> nombre de archivo </th> <th> fecha de carga y hora </th> <th> foto </th> <th> Descripción de la foto </th> <th> Operation </th> </tr> "; out.println (tabla); // Lea toda la información fotográfica de la capa DAO y envíela a la lista de páginas front-end <Photomodel> list = new PhotodaImpl (). GetAllPhotos (); for (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 (ruta); // "/Photosweb/Photos/D/7/E78E18352B42410F85DBD8DF834BD718.JPG la imagen más grande out.println ("<td width = 100> <a href = '"+ruta+"'> <img width = 100 height = 100 src = '"+ruta+"' //"); 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 ()+"'> delete la imagen </a>"); // out.println ("<a href = '<%= request.getContextPath ()%>/servlet/down? id = "+pm.getid ()+"'> Descargar la imagen </a> </td> "); out.println ("<br/> <a href = '"+getServletContext (). out.println ("</tr>"); } out.println ("</table>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {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 ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); out.print ("no es el método de publicación no compatible ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Efecto de visualización de la página:
Eliminar la función:
paquete 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.htpservletRequest; import javax.servlet.http.httpServletResponse; import cn.hncu.dao.photodaoImpl; import cn.hncu.domain.photomodel; public class delphotoservlet extiende httpservlet {public void doget (httpservletRequest Solicitud, httpSeSweSweSpesse Respuesta). {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 ("<Evieve> <title> Eliminar la página de fotos </title> </head>"); out.println ("<body>"); String id = request.getParameter ("id"); Cadena ip = request.getRemoteaddr (); PhotodaoImpl dao = new PhotodaoImpl (); Photomodel PM = dao.getSingleById (id); if (pm! = null) {if (! pm.getip (). Equals (ip)) {out.println ("No tiene permiso para eliminar la imagen ..."); String strpath = request.getContextPath ()+"/servlet/showallimg"; out.println ("<br/> <a href =/" "+strpath+"/"> volver a continuar navegando </a>"); devolver ; } // Eliminar contiene dos partes del trabajo: borrar la información en la base de datos y eliminar los archivos de imagen en el disco duro del servidor // 1 Borrar la información en la base de datos boolean boo = dao.del (id); // 2 Eliminar los archivos de imagen en el disco duro del servidor if (boo) {string path = "fotos/"+pm.getDir ()+"/"+pm.getid ()+pm.getext (); Cadena filePath = getServletContext (). GetRealPath (ruta); Archivo F = nuevo archivo (FilePath); if (f.exists ()) {f.delete (); } String strpath = request.getContextPath ()+"/servlet/showallimg"; // system.out.println (strpath); /// photosweb/servlet/showphotos out.println ("delete con éxito ... <br/> <a href =/"+strpath+"/"> regresar a browse </a> ");"); } else {out.println ("Eliminar la información de la base de datos"); }} else {out.println ("El archivo no existe ..."); String strpath = request.getContextPath ()+"/servlet/showallimg"; out.println ("<br/> <a href =/" "+strpath+"/"> volver a continuar navegando </a>"); } out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza 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 ("<Evieve> <title> Eliminar la página de fotos </title> </head>"); out.println ("<body>"); out.print ("No hay método de publicación compatible ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Pantalla de la página:
Función de descarga:
1. Use HyperConnection en la página HTML para apuntar al archivo a descargar (inseguro y fácilmente robado).
pregunta:
¿Cómo determinar los recursos locales?
ServletContext representa un proyecto web. Un proyecto web tiene solo un objeto ServletContext.
getRealPath ("/"); // d:/prm/tom/web/
Análisis de requisitos:
En el desarrollo real, que el archivo es seleccionado dinámicamente por el usuario.
Por ejemplo, en nuestro directorio de imágenes del proyecto, hay muchos archivos de imagen. El usuario muestra todas las imágenes en la página, y el usuario puede hacer clic en el enlace de descarga para descargar las imágenes favoritas.
Diseño detallado:
Use una página web estática para mostrar todas las imágenes. Dale a cada imagen un hipervínculo descargado.
Pase la ID de imagen para descargar después de la hiperconexión.
Reciba dinámicamente nombres de imágenes en el servicio. Completa la descarga.
paquete cn.hncu.servlet; import java.io.file; import java.io.fileInputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputStream; import java.io.printwriter; import java.net.urlencoder; import javax.servlet.Rream; javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.io.fileutils; importar; import cn.hncu.dao.photodaoImpl; import cn.hncu.domain.photomodel; public class downservlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza servletException, ioexception {// obtiene la información de la imagen descargada tring tring tring tring tring tring tring tring it id = request.getParameter ("id"); Photomodel PM = new PhotodaoImpl (). GetSingleById (id); if (pm == null) {respuesta.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 ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); respuesta.getWriter (). println ("alerta ('este texto ya no existe ...')"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); // getServletContext (). getContextPath () requestDisPatcher rd = request.getRequestDispatcher ("/servlet/down"); // "/Photosweb/index.jsp" // El comienzo de la URL en el bloque de código Java y web.xml "/" Representa el directorio raíz del proyecto rd.forward (solicitud, respuesta);; } else {// Descarga real: lea el archivo fotográfico del disco duro del servidor y envíelo al cliente (configure el encabezado de respuesta) // Obtenga la cadena de archivo real realName = pm.getRealName (); RealName = urlencoder.encode (RealName, "UTF-8"); // Si es un nombre chino, debe transcodificarse para evitar que el nombre del archivo sea confuso en chino // inputStream in = downservlet.class.getClassLoader (). GetResourceASStream (RealName); // Establecer el tipo de visualización para descargar respuesta.setContentType ("Aplicación/Force-Download"); // Establezca la respuesta del encabezado de respuesta. Path = "Photos/"+PM.getDir ()+"/"+PM.GetId ()+PM.GetExt (); o = respuesta.getOutputStream (); IOException {Response.SetContentType ("text/html"); <HEAD> <title> a servlet </title> </head> "); out.println (" <body> "); out.println (" </body> "); out.println (" </html> "); out.flush (); out.close (); }} Efecto de visualización de la página:
Archivo de configuración Web.xml
<? xml versión = "1.0" encoding = "utf-8"?> <web-app versión = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <laction-name> </siple-name> <ervlet> <ervlet-name> uploadservlet </servlet> <Servlet-class> cn.hncu.servlet.uploadservlet </servlet-class> </servlet> <servlet> <ervlet-name> showAllimgServlet </servlet-name> <ervlet-class> cn.hncu.servlet.showallimgservlet </servlet-class> </servlet> <ervlet> <servlet-name> <Servlet-class> cn.hncu.servlet.downservlet </servlet-class> </servlet> <servlet> <servlet-name> delphotoservlet </servlet-name> <ervlet-class> cn.hncu.servlet.delphotoservlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> uplovlet-uplovlet-uplovlet <Url-Tattern>/Servlet/uploadServlet </url-Pattern> </servlet-mapping> <ervlet-mapping> <ervlet-name> showAllImgServlet </servlet-name> <url-pattern>/servlet/showAllimg </url-pattern> </servlet-mapping> <ervlet-papping> <ervlet> <ervlet-name> <Url-Pattern>/Servlet/Down </url-Pattern> </Servlet-Mapping> <Servlet-Mapping> <Servlet-name> Delphotoservlet </servlet-name> <url-pattern>/servlet/delphoto </url-pattern> </servlet-mapping> <beed Welcle-list> <beating-file> </////welcle-file> </welcome-file-file>
Base de datos: fotos.xml
<? xml versión = "1.0" encoding = "utf-8"?> <totos> <!-Design de base de datos <foto id = "uuid" realName = "real archivo de archivo.jpg" dt = "2016-10-03 19:51:31" ext = ". Jpg" dir = "a/5" ip = "192.168.12.12"> <desc> informes de la descripción del foto> <desc. </foto> -> </fotos>
Objeto de valor: Photomodel.java
package cn.hncu.domain;public class PhotoModel { //photo value object private String id;//UUID private String realName;//Photo real file name private String ext;//Extension private String dir;//Direct directory stored after file spread private String dt;//Upload date and time private String ip;//Upload client's ip address private String desc;//Photo description public String getId() { return id; } public void setid (ID de cadena) {this.id = id; } public String getRealName () {return realName; } public void setRealName (string realName) {this.realName = RealName; } public String getext () {return ext; } public void setext (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 = descr; }}Dao Layer: Aquí está la abreviatura, solo se escribe la clase de implementación PhotodaImpl.java
paquete cn.hncu.dao; import java.util.arrayList; import java.util.iterator; import java.util.list; importar org.dom4j.document; import og.dom4j.element; import cn.hncu.domain.photomodel; import cn.hncu.utils.utilydistractory; Classicy pública; Sava (Photomodel PM) {Document DOM = DominFactory.getDom (); Elemento root = dom.getrooTelement (); Elemento e = root.addelement ("foto"); 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 ()); booleano b = dominfactory.save (); if (b) {return true; } return false; } Lista pública <Potomodel> getAllPhotos () {list <Photomodel> li = new ArrayList <Photomodel> (); Documento dom = Dominfactory.getDom (); Elemento e = dom.getrooTelement (); Iterador <ememem> it = e.ElementIterator (); while (it.hasnext ()) {elemento 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); } return li; } public Photomodel getSingleById (ID de cadena) {List <Photomodel> li = getAllPhotos (); Photomodel PM = new Photomodel (); for (Photomodel p: li) {if (p.getId (). Equals (id)) {return p; }} return null; } public boolean del (ID de cadena) {documento dom = domingoRy.getDom (); Elemento e = (elemento) dom.selectsinglenode ("// photo [@id = '"+id+"']"); return E.getParent (). Eliminar (e); }}Herramientas:
1.
paquete cn.hncu.utils; import java.text.simpledateFormat; import java.util.date; import java.util.uuid; public class myUtils {private myutils () {} public static string getuuid () {return uuid.randomuuid (). Tosting (). } private static simpledateFormat sdf = new SimpleDateFormat ("yy-mm-dd hh: mm: ss"); public static string 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 () y 0xf0) >> 4); return dir1+"/"+dir2; }}2.
paquete 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; dosfactory de clase pública {documento estático privado dom; nombre de archivo de cadena estática privada; static {try {saxreader r = new saxreader (); // Obtenga el archivo de recursos FileName = dominfactory.class.getClassLoader (). GetResource ("Photos.xml"). GetPath (); System.out.println ("Users.xml ruta:"+nombre de archivo); // "/d: /apache-tomcat-7.0.30/webapps/photosweb/webinf/classes/photos.xml" // nota: Obtenga el método de recursos bajo el proyecto actual classpath en tomcat dom = r.read (archivo filename); } catch (DocumentException e) {E.PrintStackTrace (); }} documento estático público getDom () {return dom; } public static boolean save () {xmlwriter w; intente {w = new XMLWriter (new FileOutputStream (FileName)); w.write (DOM); w.close (); devolver verdadero; } capt (excepción e) {return false; }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.