最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

聊聊在Servlet中怎么上傳文件

 更新時間:2021年05月15日 10:09:43   作者:你這家伙  
很多朋友不清楚在Servlet中怎么上傳文件,談到這個問題,首先需要我們掌握開發(fā)servlet的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

首先對Servlet上傳文件的簡單理解

此前,Servlet本身沒有對文件上傳提供直接的支持,一般需要使用第三方框架來實現(xiàn),這樣就比較麻煩
不過,Servlet3.0之后提供了這個功能,而且使用非常簡單,,為此,HTTPServletRequest提供了兩個方法用于從請求中解析出上傳的文件:

Part getPart(String name)  //獲取請求中給定 name 的文件
Collection<Part> getParts() //獲取所有的文件

其中每一個文件用一個javax.servlet.http.Part對象來表示,該接口提供了處理文件的簡易方法,如write(),delete(),那么,結(jié)合 HttpServletRequest 和 Part 來保存上傳的文件變得非常簡單

Part img = request.getPart("img");
img.write("根路徑+\\img.jpg")

注意:可以配合 @MultipartConfig 注解來對上傳操作進行一些自定義的配置,比如限制上傳文件的大小,以及保存文件的路徑等,但是,如果請求的 MIME 類型不是 multipart/form-data,則不能使用上面的兩個方法,否則將拋異常。

首先我們掌握開發(fā)Servlet的步驟:

前端:如果有前端內(nèi)容的話,需要再寫一個html文件
后端

  • 首先編寫后臺的Servlet代碼(也即重寫doGet和doPost方法)
  • 配置項目文件,web.xml里面的映射文件

1.首先寫一個頁面(前端) html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上傳文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="img"><p>
    <input type="submit" value=" 提 交 ">
</form>
</body>
</html>

代碼分析

在這里插入圖片描述

2.寫Servlet后端類代碼

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;

//首先必須聲明這個類是用來處理(文件)流的【不可獲取】
@MultipartConfig
public class FileServlet extends HttpServlet {
    @Override
    //因為提交表單只需要post,那么這里就不需要get方法了
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先拿到流信息,他返回的是一個part對象
        Part part = req.getPart("img");
        //手下聲明一個保存路徑,這里保存在D盤的File文件下
        String filePath = "D:\\File\\";
        //保存文件的名稱這里就和原文件的名稱一樣,通過part里面的方法得到原文件名稱
        String fileName = part.getSubmittedFileName();
        //通過write方法,可以將這個png文件保存在任意路徑下,write里面的參數(shù),就是要保存的路徑
        part.write(filePath+fileName);

        //然后給前端返回響應(yīng)的結(jié)果
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>上傳成功</h1>");
    }}

3.配置web.xml映射

<servlet>
    <servlet-name>fileServlet</servlet-name>
    <servlet-class>FileServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>fileServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>

4.效果展示

在這里插入圖片描述

存在問題

那么哪里存在問題呢?

//首先拿到流信息,他返回的是一個part對象
        Part part = req.getPart("img");
        //手下聲明一個保存路徑,這里保存在D盤的File文件下
        String filePath = "D:\\File\\";
        //保存文件的名稱這里就和原文件的名稱一樣,通過part里面的方法得到原文件名稱
        String fileName = part.getSubmittedFileName();
        //通過write方法,可以將這個png文件保存在任意路徑下,write里面的參數(shù),就是要保存的路徑
        part.write(filePath+fileName);

注意:其實這里是存在一點問題的

在這里插入圖片描述

那么如何進行改進呢?

方法:使用UUID作為文件名

在這里插入圖片描述

代碼改進:也就是把代碼中的fileName改成如下

//首先需要一個文件名,改進文件名的名稱(防止重復(fù)名稱覆蓋之前的文件)
        String fileName = UUID.randomUUID().toString()+
                part.getSubmittedFileName().substring(part.getSubmittedFileName().indexOf("."));

結(jié)果驗證

在這里插入圖片描述

以上就是聊聊在Servlet中怎么上傳文件的詳細內(nèi)容,更多關(guān)于Java Servlet上傳文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解讀@Transactional失效的幾種情況

    解讀@Transactional失效的幾種情況

    這篇文章主要介紹了@Transactional失效的幾種情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 使用Spring靜態(tài)注入實現(xiàn)讀取配置工具類新方式

    使用Spring靜態(tài)注入實現(xiàn)讀取配置工具類新方式

    這篇文章主要介紹了使用Spring靜態(tài)注入實現(xiàn)讀取配置工具類新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java中enum的用法

    java中enum的用法

    這篇文章主要介紹了java中enum的用法,包括了枚舉類型的基本定義及用法分析,對于學(xué)習(xí)Java有著一定的學(xué)習(xí)與借鑒價值,需要的朋友可以參考下
    2014-11-11
  • 單元測試 @mock與@SpringBootTest的使用

    單元測試 @mock與@SpringBootTest的使用

    這篇文章主要介紹了單元測試 @mock與@SpringBootTest的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中LinkedList的模擬實現(xiàn)

    Java中LinkedList的模擬實現(xiàn)

    本文主要介紹了Java中LinkedList的模擬實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java將word轉(zhuǎn)pdf的方法示例詳解

    java將word轉(zhuǎn)pdf的方法示例詳解

    這篇文章主要介紹了java將word轉(zhuǎn)pdf的相關(guān)資料,文中講解了使用Aspose-Words工具將Word文檔轉(zhuǎn)換為PDF的優(yōu)劣,并提供了一種在Java項目中使用Aspose-Words進行Word轉(zhuǎn)PDF的示例方法,需要的朋友可以參考下
    2025-01-01
  • SpringBoot用JdbcTemplates操作Mysql實例代碼詳解

    SpringBoot用JdbcTemplates操作Mysql實例代碼詳解

    JdbcTemplate是Spring框架自帶的對JDBC操作的封裝,目的是提供統(tǒng)一的模板方法使對數(shù)據(jù)庫的操作更加方便、友好,效率也不錯,這篇文章主要介紹了SpringBoot用JdbcTemplates操作Mysql
    2022-10-10
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    這篇文章主要介紹了Spring cloud gateway工作流程原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Struts2中圖片以base64方式上傳至數(shù)據(jù)庫

    Struts2中圖片以base64方式上傳至數(shù)據(jù)庫

    這篇文章主要介紹了Struts2中圖片以base64方式上傳至數(shù)據(jù)庫的實現(xiàn)代碼,代碼分為前臺和后臺兩段,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Lambda表達式的使用及注意事項

    Lambda表達式的使用及注意事項

    這篇文章主要介紹了Lambda表達式的使用及注意事項,主要圍繞?Lambda表達式的省略模式?Lambda表達式和匿名內(nèi)部類的區(qū)別的相關(guān)內(nèi)容展開詳情,感興趣的小伙伴可以參考一下
    2022-06-06

最新評論

苗栗市| 芜湖市| 中阳县| 舟山市| 柳河县| 修水县| 张掖市| 临洮县| 原阳县| 黑龙江省| 临夏县| 丰城市| 柏乡县| 弋阳县| 富顺县| 东阿县| 延边| 萝北县| 那坡县| 新巴尔虎右旗| 湘潭市| 突泉县| 肇东市| 通州市| 昌邑市| 长沙县| 宁武县| 繁峙县| 苏尼特左旗| 成武县| 津市市| 罗田县| 万全县| 泰来县| 吉林市| 尚义县| 阿克| 曲水县| 务川| 永平县| 澳门|