欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

聊聊在Servlet中怎么上傳文件

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

首先對(duì)Servlet上傳文件的簡(jiǎn)單理解

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

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

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

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

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

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

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

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

1.首先寫(xiě)一個(gè)頁(yè)面(前端) 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.寫(xiě)Servlet后端類(lèi)代碼

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;

//首先必須聲明這個(gè)類(lèi)是用來(lái)處理(文件)流的【不可獲取】
@MultipartConfig
public class FileServlet extends HttpServlet {
    @Override
    //因?yàn)樘峤槐韱沃恍枰猵ost,那么這里就不需要get方法了
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先拿到流信息,他返回的是一個(gè)part對(duì)象
        Part part = req.getPart("img");
        //手下聲明一個(gè)保存路徑,這里保存在D盤(pán)的File文件下
        String filePath = "D:\\File\\";
        //保存文件的名稱(chēng)這里就和原文件的名稱(chēng)一樣,通過(guò)part里面的方法得到原文件名稱(chēng)
        String fileName = part.getSubmittedFileName();
        //通過(guò)write方法,可以將這個(gè)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.效果展示

在這里插入圖片描述

存在問(wèn)題

那么哪里存在問(wèn)題呢?

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

注意:其實(shí)這里是存在一點(diǎn)問(wèn)題的

在這里插入圖片描述

那么如何進(jìn)行改進(jìn)呢?

方法:使用UUID作為文件名

在這里插入圖片描述

代碼改進(jìn):也就是把代碼中的fileName改成如下

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

結(jié)果驗(yàn)證

在這里插入圖片描述

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

相關(guān)文章

  • java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法

    java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了雙向循環(huán)隊(duì)列的原理與數(shù)組實(shí)現(xiàn)技巧,并附帶說(shuō)明了該算法的用途,需要的朋友可以參考下
    2016-08-08
  • java將圖片至暗的實(shí)現(xiàn)方法

    java將圖片至暗的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇java將圖片至暗的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • springboot結(jié)合maven實(shí)現(xiàn)多模塊打包

    springboot結(jié)合maven實(shí)現(xiàn)多模塊打包

    本文主要介紹了springboot借助maven完成多模塊打包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    在這篇文章里,我們主要討論如何使用Java實(shí)現(xiàn)網(wǎng)絡(luò)通信,包括TCP通信、UDP通信、多播以及NIO
    2013-05-05
  • Java基礎(chǔ)之八大排序算法

    Java基礎(chǔ)之八大排序算法

    這篇文章主要介紹了Java基礎(chǔ)之八大排序算法,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • java中不定長(zhǎng)參數(shù)的實(shí)例用法

    java中不定長(zhǎng)參數(shù)的實(shí)例用法

    在本篇文章里小編給大家分享的是關(guān)于java中不定長(zhǎng)參數(shù)的使用方法以及相關(guān)代碼內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • @MapperScan掃描包里混有@Service等問(wèn)題如何解決

    @MapperScan掃描包里混有@Service等問(wèn)題如何解決

    這篇文章主要介紹了@MapperScan掃描包里混有@Service等問(wèn)題如何解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java開(kāi)發(fā)環(huán)境的完整搭建過(guò)程

    java開(kāi)發(fā)環(huán)境的完整搭建過(guò)程

    這篇文章主要給大家介紹了關(guān)于java開(kāi)發(fā)環(huán)境的完整搭建過(guò)程,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 如何使用ActiveMQ中間件方式發(fā)送郵件

    如何使用ActiveMQ中間件方式發(fā)送郵件

    這篇文章主要介紹了如何使用ActiveMQ中間件方式發(fā)送郵件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring?IoC容器Bean作用域的singleton與prototype使用配置

    Spring?IoC容器Bean作用域的singleton與prototype使用配置

    這篇文章主要為大家介紹了Spring?IoC容器Bean作用域的singleton與prototype使用配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論