日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Servlet和JSP中的文件上传示例

發(fā)布時間:2023/12/3 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet和JSP中的文件上传示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Servlet和JSP將文件上傳到服務器是Java Web應用程序中的常見任務。 在對Servlet或JSP進行編碼以處理文件上傳請求之前,您需要了解一點有關HTML和HTTP協議中文件上傳支持的知識。 如果要讓用戶從文件系統(tǒng)中選擇文件并上傳到服務器,則需要使用<input type =” file” />。 這將使您能夠選擇任何文件形式的文件系統(tǒng)并上傳到服務器。 接下來的事情是,表單方法應該是HTTP POST ,其enctype為multipart / form-data ,這使得文件數據可在請求主體內的部分中使用。 現在,為了讀取這些文件部分并在Servlet中創(chuàng)建文件,可以使用ServletOutputStream完成。 最好使用Apache commons FileUpload (一個開放源代碼庫)。 當您將表單方法的發(fā)布和內容類型設置為“ multipart / form-data”時,Apache FileUpload處理解析HTTP請求的所有低級細節(jié),這些細節(jié)均會確認RFC 1867或“ HTML中基于表單的文件上傳 ”。

重要事項:

  • DiskFileItemFactory是FileItem的默認Factory類 。 當Apache Commons讀取多部分內容并生成FileItem時,此實現將根據閾值大小將文件內容作為臨時文件保留在內存或磁盤中。 默認情況下,DiskFileItemFactory的閾值為10KB,并在temp目錄中生成臨時文件,由System.getProperty(“ java.io.tmpdir”)返回。 這兩個值都是可配置的,最好針對生產用途進行配置。 如果用于運行Server的用戶帳戶沒有足夠的權限將文件寫入temp目錄,則可能會遇到權限問題。
  • 根據內存使用情況仔細選擇閾值大小,將大量內容保留在內存中可能會導致java.lang.OutOfMemory ,而值太小則可能會導致大量臨時文件。
  • Apache commons文件上傳還提供FileCleaningTracker來刪除DiskFileItemFactory創(chuàng)建的臨時文件。 一旦對相應的File實例進行垃圾回收,FileCleaningTracker就會刪除臨時文件。 它通過在加載FileCleaner時創(chuàng)建的清潔器線程來完成此操作。 如果使用此功能,請記住在Web應用程序結束時終止此線程。
  • 在配置文件中保留可配置的詳細信息,例如上載目錄,最大文件大小,閾值大小等,并在未配置的情況下使用合理的默認值。
  • 根據您的項目要求驗證文件的大小,類型和其他詳細信息是很好的,例如,您可能希望僅允許上傳特定大小和特定類型的圖像,例如JPEG,PNG等。
  • Java Servlet和JSP中的文件上傳示例

    這是使用Servlet和JSP在Java Web應用程序中上傳文件的完整代碼。 此文件上傳示例需要四個文件:

  • index.jsp包含HTML內容以設置表單,該表單允許用戶選擇文件并將其上傳到服務器。
  • FileUploader Servlet,處理文件上傳請求并使用Apache FileUpload庫解析多部分表單數據
  • web.xml在Java Web應用程序中配置servlet和JSP。
  • result.jsp,用于顯示文件上傳操作的結果。
  • FileUploadHandler.java

    import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;/*** Servlet to handle File upload request from Client* @author Javin Paul*/ public class FileUploadHandler extends HttpServlet {private final String UPLOAD_DIRECTORY = "C:/uploads";@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//process only if its multipart contentif(ServletFileUpload.isMultipartContent(request)){try {List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);for(FileItem item : multiparts){if(!item.isFormField()){String name = new File(item.getName()).getName();item.write( new File(UPLOAD_DIRECTORY + File.separator + name));}}//File uploaded successfullyrequest.setAttribute("message", "File Uploaded Successfully");} catch (Exception ex) {request.setAttribute("message", "File Upload Failed due to " + ex);} }else{request.setAttribute("message","Sorry this Servlet only handles file upload request");}request.getRequestDispatcher("/result.jsp").forward(request, response);}}

    index.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>File Upload Example in JSP and Servlet - Java web application</title></head><body> <div><h3> Choose File to Upload in Server </h3><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" value="upload" /></form> </div></body> </html>

    result.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>File Upload Example in JSP and Servlet - Java web application</title></head><body> <div id="result"><h3>${requestScope["message"]}</h3></div></body> </html>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"><servlet><servlet-name>FileUploadHandler</servlet-name><servlet-class>FileUploadHandler</servlet-class></servlet><servlet-mapping><servlet-name>FileUploadHandler</servlet-name><url-pattern>/upload</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

    總之,在使用Java Web應用程序上傳文件時,請記住三件事

  • 使用HTML表單輸入類型作為文件瀏覽要上傳的文件
  • 使用表單方法作為發(fā)布,使用enctype作為multipart / form-data
  • 在Servlet中使用Apache commons FileUpload來處理包含多部分數據的HTTP請求。
  • 相依性

    為了在任何Web服務器(例如Tomcat)中編譯并運行此Java Web應用程序,您需要在WEB-INF lib文件夾中包括以下依賴項JAR。

    commons-fileupload-1.2.2.jar

    commons-io-2.4.jar

    如果您正在使用Maven,則還可以使用以下依賴項:

    <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version> </dependency> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version> </dependency>

    這就是如何在Java Web應用程序中使用Servlet和JSP上傳文件的全部內容。 可以使用JSP,Filter或Servlet編寫此文件上載示例,因為這三個都是Java Web應用程序中請求的入口點。 為了簡單起見,我已經使用Servlet處理文件上傳請求。 通過Servlet 3.0 API,Servlet支持多部分表單數據,您可以使用HttpServletRequest的getPart()方法來處理文件上傳。

    參考: Servlet和JSP中的文件上傳示例– Java Web應用程序教程示例,來自我們JCG合作伙伴 Javin Paul在Javarevisited博客上。

    翻譯自: https://www.javacodegeeks.com/2013/08/file-upload-example-in-servlet-and-jsp.html

    總結

    以上是生活随笔為你收集整理的Servlet和JSP中的文件上传示例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。