Carregar, baixar e gerenciar tecnologia de arquivos funcionais: 1. Use XML como informações de armazenamento de banco de dados (DOM4J, XPath)
2. Carregue e download de formulários Java
3. Quebrar o diretório de arquivos (o diretório de hash é um método para otimizar o desempenho do armazenamento de arquivos)
Precisa de pacote JAR:
Commons-FileupLoad-1.2.2.jar, Commons-io-2.1.jar, dom4j-1.6.1.jar e jaxen-1.1-beta-6.jar
----------------------------------------------------------------------------------
Write Index.jsp primeiro
<%@ página linguagem = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! href = "jsps/upload.jsp"> upload álbum </a> <a href = "servlets/showServlet"> navegar no álbum </a> </body> </html>
upload.jsp é a página de download colocada no diretório JSPS
<%@ Page Language = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! Action = "<%= request.getContextPath ()%>/servlets/uploadServlet" Method = "post" Enctype = "Multipart/Form-Data"> Arquivo: <input Type = "File" Name = "File1"/> <br/> Descrição: <input Type = "Text =" Desc "/> <br/> </body> </html>
Coloque o Photos.xml no diretório SRC
<? xml versão = "1.0" coding = "utf-8"?> <hotos> </fotos>
Write Value Object Photomodel
pacote cn.hncu.Demain; public class Photomodel {private string ID; String Private String Realname; Private String ext; Dir de cordas privadas; Private String DateTime; private string ip; Private String Desc; public string getId () {return id; } 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 SetExt (string ext) {this.ext = ext; } public string getdir () {return dir; } public void SetDir (String dir) {this.dir = dir; } public string getDateTime () {return dateTime; } public void setDateTime (string dateTime) {this.dateTime = DateTime; } public string getip () {return ip; } public void setip (string ip) {this.ip = ip; } public string getDesc () {return desc; } public void setDesc (string desc) {this.desc = desc; } @Override public string tostring () {return "photomodel [id =" + id + ", realname =" + realname + ", ext =" + ext + ", dir =" + dir + ", dateTime =" + dateTime + ", ip =" + ip + ", desc =" + desc + "]; }} Existem dois tipos de ferramentas de escrita:
Myutil (formatação de data, código de quebra de diretório, código de identificação aleatório)
package cn.hncu.utils;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;public class MyUtils { private MyUtils() { } private static SimpleDateFormat format=new SimpleDateFormat("yyyyy year MM month dd day hh:mm:ss"); public static string getCurrentDateTime () {return format.format (new date ()); } public static string getUuid () {uuid uuid = uuid.randomuuid (); String id = uuid.toString (). Replaceall ("-", ""); ID de retorno; } public static string getdir (string uuid) {string dir1 = Integer.tohexString (uuid.hashcode () e 0xf); String dir2 = Integer.toHexString ((uuid.hashcode () & 0xf0) >> 4); retornar dir1+"/"+dir2; }}Dom4jFactory (operações relacionadas do DOM4J, obtenha objeto de documento, salvar operação)
pacote cn.hncu.utils; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileNotFoundException; importar java.io.fileOuttStream; importar java.io.UnsupportEdCodingException; import.jdom4.document; org.dom4j.io.outputFormat; importar org.dom4j.io.saxReader; importar org.dom4j.io.xmlwriter; public class Dom4jFactory {Private Static Document Dom = null; Caminho de cordas estáticas privadas; static {tente {saxreader sax = new saxReader (); / Aprenda como carregar o caminho do recurso no servidor (porque nossos recursos foram publicados do Myeclipse para o servidor Tomcat, por isso é diferente do projeto Java Pure original) // Use a classe atual para encontrar seu carregador de classe e depois usar o carregador de classe para obter o caminho do recurso = Dom4jFactory.ClassM.GlLlassLoader (). dom = sax.read (new FileInputStream (caminho)); } catch (Exceção e) {lança nova RunTimeException (e.getMessage (), e); }} documento estático público getDom () {return dom; } public static boolean save () {try {outputFormat format = new OutputFormat (); format.setEncoding ("UTF-8"); XmlWriter w = new XMLWriter (new FileOutputStream (novo arquivo (caminho), formato); W.Write (DOM); w.Close (); retornar true; } catch (Exceção e) {return false; }}}Escreva Photodao da camada inferior
pacote cn.hncu.dao; importar java.util.ArrayList; importar java.util.iterator; importar java.util.list; importar org.dom4j.document; importomodel; flotMelOn.nCu.nCu.nCu.hncu.hncu.demain.photomodel; import cn.hilem Boolean Add (foto do fotomodel) {document Dom = dom4jFactory.getDom (); Elemento root = dom.getrootelement (); Elemento ephoto = root.addElement ("foto"); ephoto.addattribute ("id", foto.getId ()); ephoto.addattribute ("realname", foto.getRealName ()); ephoto.addattribute ("dir", foto.getdir ()); ephoto.addattribute ("ip", foto.getip ()); ephoto.addattribute ("DateTime", foto.getDateTime ()); ephoto.addattribute ("ext", foto.getext ()); ephoto.addElement ("desc"). setText (foto.getDesc ()); boone boo = dom4jFactory.Save (); retornar boo; } // navegar na lista pública <Photomodel> getall () {document dom = dom4jfactory.getDom (); List <Photomodel> list = new ArrayList <Photomodel> (); Elemento root = dom.getrootelement (); Iterator <lement> it = root.ElementIterator (); while (it.hasNext ()) {photomodel photo = new Photomodel (); Elemento e = it.next (); foto.SetId (E.AttributeValue ("ID")); foto.SetDateTime (E.AttributeValue ("DateTime")); foto.SetDir (E.AttributeValue ("dir")); foto.SETEXT (E.AttributeValue ("ext")); foto.setip (e.attributeValue ("ip")); foto.SetRealName (E.AttributeValue ("Realname")); foto.setDesc (elementText ("desc"); list.add (foto); } Lista de retorno; } public photomodel getsingleById (string id) {document dom = dom4jFactory.getDom (); Lista <Photomodel> list = getall (); para (Foto Photomodel: List) {if (foto.getId (). Equals (id)) {return photo; }} retornar nulo; } public boolean del (string id) {document Dom = dom4jFactory.getDom (); Elemento e = (elemento) dom.selectSinglenode ("// foto [@id = '"+id.trim ()+"']"); retornar e.getParent (). Remover (e); }} Escreva quatro servlets no final
UploadServlet Upload Código de servlet
pacote cn.hncu.servlets; importar java.io.file; importar java.io.ioException; importar java.io.inputStream; importar java.io.printwriter; import java.util.list; import javax.serv.servxception; import javax.Servlettlet.list; javax.servlet.http.httpServletReQuest; importar javax.servlet.http.httpServletResponse; importar org.apache.commons.fileupload.fileitem; import orgache.commons.fileUplOad.fileUploadex org.apache.commons.fileupload.disk.diskfileItemFactory; importar org.apache.commons.fileupload.servlet.servletfileUpload; importação org.apache.commons.io.fileutils; imporn.hncu.mao.phaoModaMoMOOOO; cn.hncu.utils.myutils; a classe pública uploadServlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servleTException, ioxception {resposta.setContenttype ("text/html; PrintWriter out = Response.getWriter (); out.println ("<! doctype html public/"-// w3c // dtd html 4.01 transitório // en/">"); out.println ("<html>"); out.println ("<head> <title> um servlet </ititle> </ad Head>"); out.println ("<body>"); out.println ("Get Upload não é suportado!"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.Close (); } public void DoPost (solicitação httpServletRequest, resposta httpSertletResponse) lança servletexception, ioexception {Response.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); String path = request.getServletContext (). GetRealPath ("/fotos"); DiskFileItemFactory Factory = new DiskFileItemFactory (); fábrica.setRepository (novo arquivo ("g:/a")); ServletfileUpload upload = new ServletFileUpload (fábrica); upload.SetSizEMAX (1024*1024*10); // Máximo de 10m upload.setheadeRencoding ("utf-8"); // use para definir a codificação do nome do arquivo, equivalente a: request.Setcharacterencoding ("UTF-8"); FileItem fi = null; tente {list <FileItem> list = upload.parserequest (request); Foto do fotomodel = novo Photomodel (); // Encapsulamento de dados --- 7 atributos são necessários boone boo = false; InputStream in = null; para (fileItem fi2: list) {fi = fi2; if (fi.isformfield ()) {string desc = fi.getString ("utf-8"); foto.setDesc (desc); // desc} else {in = fi.getInputStream (); String realname = fi.getName (); if (realname == null || realname.trim (). Equals ("")) {out.print ("nenhum arquivo selecionado!"); retornar; } if (realname.indexof ("//")! =-1) {realname = realname.substring (realname.lastindexof ("//")+1); } foto.SetRealName (RealName); // Nome do arquivo real String ext = realname.substring (realname.lastIndexOf ("."); foto.SETEXT (ext); // 3 foto.SetDateTime (myutils.getCurrentDateTime ()); // 4 foto.setId (myutils.getuuid ()); // 5 foto.setdir (requestRemotEnTr (photo.getId);/// 6 Photo.Setip (requestrMemotndr (getRomndr (fottem); banco de dados Photodao Dao = new Photodao (); boo = dao.add (foto); // Se as informações da foto acima forem salvas com sucesso, você começará a receber o arquivo de imagem e salvá -las no disco rígido do servidor se (boo) {System.out.println (dao); caminho = caminho+"/"+foto.getDir (); Arquivo dir = novo arquivo (caminho); if (! Dir.Exists ()) {Dir.mkdir (); } String filename = path+"/"+foto.getId ()+foto.getext (); Fileutils.copyInputStreamTofile (in, novo arquivo (nome do arquivo)); String strpath = request.getContextPath ()+"/servlets/showServlet"; out.print ("Carregado com sucesso! } else {out.print ("Falha no upload!"); }} catch (fileUploadexception e) {throw novo RUNTimeException ("Falha no upload!"); ", e);} finalmente {if (fi! = null) {fi.Delete ();}} out.flush (); out.close ();}}ShowServlet O servlet do lado dos álbuns de navegação
package cn.hncu.servlets;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;import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDao;import cn.hncu.demain.PhotoModel;public class ShowServlet extends HttpServlet { IOException if an error occurred public void doGet(HttpServletRequest request, HttpServletResponse response) throws Servletexception, ioexception {doPost (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, resposta httpSertletResponse) lança servletexception, ioexception {Response.setContentType ("text/html; charset = utf-8"); request.setcharacterencoding ("UTF-8"); PrintWriter out = Response.getWriter (); out.println ("<! doctype html public/"-// w3c // dtd html 4.01 transitório // en/">"); out.println ("<html>"); out.println ("<head> <title> um servlet </ititle> </ad Head>"); out.println ("<body>"); String tabela = "<tabela borda = '1' width = '100%'>"+ "<tr> <th> Nome do arquivo </th> <th> upload ip </th> <th> tempo de upload </th> <th> imagem </th> <th> instruções </th> <th> operação </th> </tr>; out.print (tabela); Photodao dao = new photodao (); List <Photomodel> list = dao.getall (); for (Photomodel p: list) {out.print ("<tr>"); out.println ("<td>"+p.getRealName ()+"</td>"); out.println ("<td>"+p.getip ()+"</td>"); out.println ("<td>"+p.getDateTime ()+"</td>"); // saída de string de imagem Path = request.getContextPath ()+"/fotos/"+p.getDir ()+"/"+p.getId ()+p.getext (); out.println ("<td> <a href = '"+path+"'> <img src = '"+path+"' width = '200' altura = '200'> </mg> </a> </td>"); String op = "<a href = '"+request.getContextPath ()+"/servlets/delservlet? Id ="+p.getId ()+"'> excluir </a>"; out.println ("<td>"+p.getDesc ()+"</td>"); op+= "<a href = '"+request.getContextPath ()+"/servlets/donServlet? id ="+p.getId ()+"'> download </a>"; out.println ("<td>"+op+"</td>"); out.print ("</tr>"); } out.println ("</ table>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.Close (); }}Código do servidor baixado por downServlet
pacote cn.hncu.servlets; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importação java.io.iotputStream; import java.io.printwriter; import java.net.et.aUsTream; javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletReQuest; import javax.servlet.http.httpsletLeond; CN.HNCU.DEMAIN.PHOTOMODEL; Public Class OffServlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse) lança servleTexception, ioexception {doPost (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {string id = request.getParameter ("id"); Response.setContentType ("Application/Force-download"); Fotomodel p = novo photodao (). GetsinglebyId (id); if (p! = null) {string realName = p.getRealName (); realname = new String (realname.getbytes ("ISO8859-1"), "UTF-8"); Response.setheader ("Content-Disposition", "Anexamento; nome do arquivo =/" "+realname+"/""); String relpath = getServletContext (). GetRealPath ("/fotos/"+p.getDir ()+"/"+p.getId ()+p.geText ()); InputStream in = new FileInputStream (RelPath); OutputStream out = Response.getOutputStream (); System.out.println (relpath); byte buf [] = novo byte [1024]; int len = 0; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.close (); } else {Response.SetContentType ("text/html; charset = utf-8"); Response.getWriter (). println ("Este arquivo foi excluído!"); }}}DelServlet Excluir servidor
pacote cn.hncu.servlets; importar java.io.file; importar java.io.fileInputStream; importar java.io.ioException; importar java.io.inputStream; import java.io.outputStream; importação java.printwriter; import javáx.sertlet.Servletletlex; javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; import cn.hncu.dao.Otodao; cn.hncu.dncu.memin.memin.memain.nemain.nemain.nemain.nemain.nemain.nemain.nemain.nemain.nemain.nemain.nemain.nemain. {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doPost (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); Response.setContentType ("Texto/html; charset = utf-8"); PrintWriter out = Response.getWriter (); String id = request.getParameter ("id"); Fotomodel p = novo photodao (). GetsinglebyId (id); if (p! = null) {if (! retornar; } // ※※※※ As seguintes peças são adicionadas à aula a seguir !!! // 1Delete as informações no banco de dados Photodao Dao = new Photodao (); boone boo = dao.del (id); // 2DELETE O arquivo no disco rígido do servidor if (boo) {string filename = "photos/"+p.getDir ()+"/"+p.getId ()+p.getext (); String pathfilename = getServletContext (). GetRealPath (nome do arquivo); Arquivo f = novo arquivo (PathFileName); if (f.Exists ()) {f.Delete (); } String strpath = request.getContextPath ()+"/servlets/showServlet"; out.println ("Photo Excluir com sucesso! } else {out.println ("Excluir a foto falhou!"); }} else {Response.SetContentType ("text/html; charset = utf-8"); Response.getWriter (). println ("Este arquivo não existe!"); }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.