Примеры в этой статье делятся с вами методом создания альбомов Java для вашей ссылки. Конкретный контент заключается в следующем
Примечание:
1) Изображение на HTML указывается статически. Когда новые изображения обновляются, они должны быть обновлены вручную. Поэтому используйте сервис, чтобы прочитать все изображения в локальных изображениях и динамически отобразить их для пользователя.
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> <tite> Little Album </title> <bodle> <body> <! http: // localhost: 8080/photosweb/ -> <h2> Little Album </h2> <a href = "jsps/upload.jsp"> загрузить фото </a> <a href = "< %= request.getContextPath () %>/servlet/showallimg"> rowse photos </a> </body> </html> </html> </html> </html> </ht>
Отображение страницы:
Загрузить функцию изображения:
<%@ page language = "java" import = "java.util.*" pageencoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <Head> </Html </title> </Head> <hod> <h2> <html> <Head> </hate> </Head> <hod> <h2> </h2> </h2> </h2> </h2> <html> </h2 </h2> action="<%=request.getContextPath() %>/servlet/uploadServlet" method="post" enctype="multipart/form-data"> Photo: <input type="file" name="file"/><br/> Description:<input type="text" name="desc"/><br/> <input type="submit" value="upload"/> </form> </body></html>
Пакет cn.hncu.servlet; import java.io.file; import java.io.ioexception; импорт java.io.inputstream; import java.io.printwriter; import java.util.list; import javax.servlet.requestdispatcher; import javax.servlet.servlet.servletexceptexceptexceptexceptexceptexceptexcept. javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.apache.commons.fileUplaud.fileItem; import org.apache.commons.file org.apache.commons.fileupload.disk.diskFileItemFactory; import org.apache.commons.fileupload.servlet.servletfileUpload; импорт org.apache.commons.io.fileutils; импорт cn.hncu.dao.photodaImpl; import.honl.honcu.hncu.dao.photodaImpl; импорт. cn.hncu.utils.myutils; открытый класс uploadservlet расширяет httpservlet {public void doget (httpservletrequest, httpservletresponse response) throws 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> a Servlet </title> </head>"); out.println ("<body>"); out.println ("<body>"); out.println ("<body>"); out.println ("<body>"); out.close (); } public void Dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {request.setcharacterencoding ("utf-8"); 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>"); // Извлеките информацию из формы загрузки: 1. Инкапсулируйте ее в объект значения фотографий, вызовите слой DAO, чтобы сохранить его в фоновом режиме // 2. Хранить загруженные фотографии на сервер жесткий диск // база данных: хранить информацию о хранилище фото ,,, Real File -File - в жестком диске DiskFileItemfactory DFI = NewSkfileTemory ();); File file = new File ("d:/a"); if (file.exists ()) {file.mkdirs (); } dfi.setRepository (file); ServletFileUpload upload = new ServletFileUpload (DFI); upload.setsizemax (1024*1024*8); upload.setheAderencoding ("utf-8"); // ==> request.setcharacterencoding ("utf-8"); try {list <fieleItem> list = opload.parserequest (request); Photomodel pm = new Photomodel (); InputStream in = null; for (fileItem fi: list) {if (fi.isformfield ()) {// Это не будет иметь временной строки файлов 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/picture/saved picture/111.jpg? // Условия по умолчанию if (filename == null || filename.trim (). Equals ("no файл не выбран ,,,,, должен выбрать файл ... <br/>"); string strpath2 = request.getContextPath ()+"/jsps/upload.jsp"; out.println ("<A href =/" "+strPath2+"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"(" <A href =/""; return; realName.length ()); // Удалить «/» realName // extension string ext = filename.substring (filename.lastiNdexof ("."); pm.setdir (myutils.getdir (id)); path = "photos/"+pm.getDir (); // system.out.println ("path:"+path); // test: photos/9/0 String filePath = getServletContext (). getRealPath (path); // system.out.println ("filePath:"+filePath); // Тест: D: /apache-tomcat-7.0.30/webapps/photosweb/photos/9/0 файл dir = new File (filePath); if (! dir.exists ()) {dir.mkdirs (); } FileUtils.copyInputStreamToFile (in, новый файл (filePath+"/"+pm.getId ()+pm.getext ())); // // Если жесткий диск успешно сохранен, перейдите на главную страницу - Forward /// requestDispatcher rd = request.getRequestDispatcher (getServletContext (). getContextPath ()+"/index.jsp"); // "/photosWeb/photosWeb/index.jsp" // requestDispatcher rd = request.getRequestdispatcher ("/index.jsp"); // "/photosweb/index.jsp"//ratebe.jsp "///photosweb/index. Java Code Block и Web.xml представляют собой каталог Project Root // rd.forward (запрос, ответ); // пересылка не может быть использована здесь. Конкретное различие между перенаправлением и пересылкой: http://blog.csdn.net/xanlv/article/details/52701085 // redirect response.sendredirect (getservletcontext (). GetContextPath ()+"/index.jsp"); } else {// Сохранение базы данных не удалось-Stay на странице загрузки requestDispatcher rd = request.getRequestDispatcher ("/jsps/upload..jsp"); // "/photosweb/index.jsp" rd.forward (запрос, ответ); }} catch (fileuploadexception e) {throw new Runtimeexception ("upload не удастся", e); } наконец {// очистить временный файл файла f = new File ("d:/a"); Файл fs [] = f.list -files (); for (file ff: fs) {ff.delete (); }} out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Эффект отображения страницы:
Просмотрите функцию изображения:
Пакет cn.hncu.servlet; import java.io.ioexception; import java.io.printwriter; импорт java.util.list; import javax.servlet.servletexception; импорт javax.servlet.http.httpservlet; import javax.servlet.http.httperservlet; import javax.servlet.http.httperservlet; import javax.servlet.http.httperservlet; javax.servlet.http.httpservletresponse; import cn.hncu.dao.photodaoimpl; import cn.hncu.domain.photomodel; public class showallimgservlet httpservlet {public void doget (httpsepret repection repection repection repection), httpsErvlet {public void doget (httpsectorev 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 ("<Head> <Title> Album Browse </title> </head>"); out.println ("<body>"); String strPath = request.getContextPath ()+"/jsps/upload.jsp"; out.println ("<a href =/" "+strpath+"/"> вернуть страницу загрузки </a>"); // string table = "<table border = '1px width =' 100%'cellpacing =' 0 'align =' center '>"+//. style = 'text-align: center;'> "+" <tr> <ht> Имя файла </th> <Th> Дата загрузки и время </th> <Th> photo </th> <Th> Фотография </th> <Th> операция </th> </tr> "; out.println (таблица); // Прочитайте всю информацию о фотографиях с слоя DAO и отправьте ее в список страниц фронт-конце <photoModel> list = new 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/photo/d/7/e78e18352b42410f85dbd8df834bd718.jpg"/clipgmpg "/clipgmpg"/clipgmpg "/clicksgmpg"/uckempg "/d/7/e78e18352b42410f85dbd8df834bd718. более крупное изображение 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 ()+"'> Удалить изображение </a>"); // out.println ("<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, httpservletresponse response) throws 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 ("<head> <Title> a Servlet </title> </head>"); out.println ("<body>"); out.print («Не поддерживается метод Post ...»); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Эффект отображения страницы:
Удалить функцию:
Пакет cn.hncu.servlet; import java.io.file; import java.io.ioexception; импорт java.io.printwriter; import javax.servlet.servletexception; импорт javax.servlet.http.httpservlet; import javax.servlet.http.httperservelt; import javax.servlet.http.httperservlet; javax.servlet.http.httpservletresponse; import cn.hncu.dao.photodaoimpl; import cn.hncu.domain.photomodel; открытый класс Delphotoservlet Extends httpservlet {public void doget (httpseprequest recection refection refection) werroksessevons refection) {public void dogetsevons refection) {httpseps 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 ("<Head> <title> Удалить страницу фото </title> </head>"); out.println ("<body>"); 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 («У вас нет разрешения на удаление изображения ...»); String strPath = request.getContextPath ()+"/servlet/showallimg"; out.println ("<br/> <a href =/" "+strpath+"/"> вернуться, чтобы продолжить просмотр </a>"); возвращаться ; } // Удалить содержит две части работы: очистка информации в базе данных и удаление файлов изображений на сервере жесткий диск // 1 Очистка информации в базе данных Boolean Boo = dao.del (id); // 2 Удаление файлов изображений на сервере жесткий диск if (boo) {String path = "photos/"+pm.getDir ()+"/"+pm.getid ()+pm.getext (); String filePath = getServletContext (). GetRealPath (path); Файл F = новый файл (filePath); if (f.exists ()) {f.delete (); } String strPath = request.getContextPath ()+"/servlet/showallimg"; // system.out.println (strpath); /// photosweb/servlet/showphotos out.println ("Удалить успешно ... <br/> <a href =/" "+strpath+"/"> return to browse </a>"); } else {out.println ("Удалить информацию о базе данных не удалась"); }} else {out.println ("Файл не существует ..."); String strPath = request.getContextPath ()+"/servlet/showallimg"; out.println ("<br/> <a href =/" "+strpath+"/"> вернуться, чтобы продолжить просмотр </a>"); } out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (httpservletrequest, httpservletresponse response) throws 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. Используйте гиперконнекцию на странице HTML, чтобы указать на загруженный файл (небезопасно и легко украдено).
вопрос:
Как определить местные ресурсы?
ServletContext представляет веб -проект. Веб -проект имеет только один объект ServletContext.
getRealPath ("/"); // d:/prm/tom/web/
Анализ требований:
В реальной разработке, какой файл для загрузки динамически выбран пользователем.
Например, в нашем каталоге изображений нашего проекта есть много файлов изображений. Пользователь отображает все изображения на странице, и пользователь может нажать ссылку на скачивание, чтобы загрузить любимые картинки.
Подробный дизайн:
Используйте статическую веб -страницу для отображения всех изображений. Дайте каждому изображению загруженную гиперссылку.
Пропустите идентификатор изображения для загрузки после гиперконнекции.
Динамически получать имена изображений в сервисе. Заполните загрузку.
Пакет cn.hncu.servlet; import java.io.file; import java.io.fileinputstream; импорт java.io.ioexception; импорт java.io.inputstream; import java.io.outputstream; import.io.io.printwriter; import java.net.urlencoder; import.io. javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; импорт org.apach.commons.io.fileutils; cn.hncu.dao.photodaoimpl; import cn.hncu.domain.photomodel; public class downervlet exters httpservlet {public void Doget (httpservletrequest, httpservlectrespons id = request.getParameter ("id"); Photomodel pm = new photodaoimpl (). Etsinglybyid (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> a Servlet </title> </head>"); out.println ("<body>"); response.getWriter (). 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 "/" представляет проект root Directory rd.forward (запрос, ответ); } else {// Real Download: Прочтите фото -файл сервера жесткого диска и отправьте его клиенту (установить заголовок ответа) // Получить реальную строку файла realName = pm.getRealName (); realName = urlencoder.encode (realName, "utf-8"); // Если это китайское имя, его необходимо трандотировать, чтобы не было искажено имен файла в китайском // inputStream в = downservlet.class.getClassloader (). getResourceasStream (realName); // Установить тип дисплея для загрузки response.setContentType ("Application/Force-Download"); // Установите ответ заголовка ответа. SetheAder ("Content-Disposition", "ATTHAMENT; FILENAME =/" "+realName+"/"); // String path = request.getContextPath ()+"/"+pm.getDir ()+"/"+pm.getExt ()+pmotext (); PATH = "+PM.GETDIR ()+"/"+PM.GETID ()+PM.GETEXT (); O = response.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 (); }} Эффект отображения страницы:
Файл конфигурации web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <shiple-mame> </display-name> <servlet> <servlet> ropletserverserser </servlet-nameserserser nameser nameser nameser nameerser nameser nameser name name name name name d <Servlet-class> cn.hncu.servlet.uploadservlet </servlet> </servlet> <servlet> <servlet-name> showallimgservlet </servlet-name> <berlet-class> cn.hncu.servlet.showallimgservlet </servlet> </servlet> <vervlet> <Servlet-name> DownServlet </servlet-name> <servlet-class> cn.hncu.servlet.downservlet </servlet-class> </servlet> <servlet> <servlet-name> delphotoservlet </servlet-name> <bertlet-class> cn.hncu.servagement.delphotoservlet </servlet-servaltagepation> servlectagement.delpletsagement.delphotservalt </servletagepation> servlectagepatement.delpletsagement.delpletsagement.delpletsagepate <servlet-name>UploadServlet</servlet-name> <url-pattern>/servlet/uploadServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ShowAllImgServlet</servlet-name> <url-pattern>/servlet/showAllImg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-mapping> <Servlet-name> DownServlet </servlet-name> <url-pattern>/Servlet/Down </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> delphotoservlet </servlet-name> <url-pattern>/servlet/delphoto </url-pattern> </servlet-mapping> <bellest-file-il-il-il-il-il-il-il-il-il-le-h <selcoveryfile> index.jsp </wervedied-file> </werving-file-list> </web-app>
База данных: Photo.xml
<? xml version = "1.0" Encoding = "utf-8"?> <fhotee> <!-дизайн базы данных <photo id = "uuid" realName = "real file name.jpg" dt = "2016-10-03 19:51:31" Ext = ". Jpg" Dir = "A/5" IP = "192.168.12.12"> desce> </5 Photo Photo> </5 "</5" </5 "</5". -> </photos>
Объект значения: Photomodel.java
Пакет cn.hncu.domain; открытый класс PhotoModel {// Фото значения объект объект частной строки; // UUID Private String RealName; // Фотография реального имени } 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 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 Druturn Desc; } public void setDesc (String desc) {this.desc = desc; }}слой DAO: вот аббревиатура, только класс внедрения PhotoDaoImpl.java написан
Пакет cn.hncu.dao; import java.util.arraylist; import java.util.iterator; import java.util.list; import org.dom4j.document; import org.dom4j.element; импорт cn.hncu.domain.photomodel; import cn.hncu. SAVA (PhotoModel PM) {Document dom = domfactory.getDom (); Элемент root = 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 (); if (b) {return true; } вернуть false; } public List <womodel> getallphotos () {list <photoModel> li = new ArrayList <FotoModel> (); Документ dom = domfactory.getdom (); Элемент e = dom.getRootelement (); Итератор <element> it = elementiterator (); while (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); } вернуть li; } public photomodel etsinglybyid (String id) {list <photomodel> li = getallphotos (); Photomodel pm = new Photomodel (); for (photomodel p: li) {if (p.getid (). equals (id)) {return p; }} return null; } public boolean del (String id) {document dom = domfactory.getdom (); Элемент e = (элемент) dom.selectsinglenode ("// photo [@id = '"+id+"']"); вернуть e.getParent (). Удалить (e); }}Инструменты:
1
пакет cn.hncu.utils; import java.text.simpledateformat; import java.util.date; import java.util.uuid; открытый класс myutils {private myutils () {} public static String getUuid () {uuid.randomuuid (). } 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 () & 0xf0) >> 4); вернуть dir1+"/"+dir2; }}2
пакет cn.hncu.utils; import java.io.fileoutputstream; import org.dom4j.document; import org.dom4j.documentexception; импорт org.dom4j.io.saxreader; импорт org.dom4j.io.xmlwriter; public class domfactory {private static dom; частное статическое имя файла строки; static {try {saxreader r = new saxreader (); // Получить файл ресурса 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" // Примечание. Получите метод ресурса в текущем проекте Classpath в Tomcat Dom = R.Read (filename); } catch (documentException e) {e.printstacktrace (); }} public Static Document getDom () {return dom; } public static boolean save () {xmlwriter w; try {w = new XmlWriter (new FileOutputStream (имя файла)); W.Write (dom); w.close (); вернуть истину; } catch (Exception e) {return false; }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.