亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

servlet實(shí)現(xiàn)文件下載的步驟及說(shuō)明詳解

 更新時(shí)間:2017年09月07日 10:42:10   作者:Marydon  
這篇文章主要為大家詳細(xì)介紹了servlet實(shí)現(xiàn)文件下載的步驟及說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

servlet實(shí)現(xiàn)文件下載所需步驟及說(shuō)明,供大家參考,具體內(nèi)容如下

參考文章:Servlet實(shí)現(xiàn)文件下載功能

1.原理介紹:

        Web容器為Servlet生成并且傳遞的HttpServletResponse對(duì)象不僅可以返回HTML文本,而且可以返回任何主流的其他文件格式,例如,.doc、.pdf、.jar、.avi等內(nèi)容格式的文件.這些類(lèi)型內(nèi)容在HTTP協(xié)議中主要是體現(xiàn)在HTTP響應(yīng)消息中的消息頭部的content-type字段以及響應(yīng)有效負(fù)載中.
content-type是向?yàn)g覽器指明有效負(fù)載區(qū)里的內(nèi)容是某某類(lèi)型的,例如:.jar類(lèi)型的內(nèi)容.
而有效負(fù)載中的內(nèi)容就是目標(biāo)文件的字節(jié)集合,也就是二進(jìn)制內(nèi)容格式,而不是具體的類(lèi)似于HTML的文本格式內(nèi)容.

        因此,可以說(shuō)Servlet可以利用HttpServletResponse對(duì)象返回任何想要返回的內(nèi)容。

        需要通過(guò)HttpServletResponse的實(shí)例去設(shè)置HTTP協(xié)議響應(yīng)消息消息頭部的一些屬性,這個(gè)是通過(guò)response.addHeader()或response.setHeader()或response.setIntHeader()函數(shù)來(lái)完成的。

這三個(gè)方法均有兩個(gè)參數(shù):第一個(gè)參數(shù)是屬性名,第二個(gè)參數(shù)是屬性值。

2.所需步驟:

  2.1 response.setHeader("Content-Type","文件格式所對(duì)應(yīng)的內(nèi)容類(lèi)型")

具體要根據(jù)國(guó)際標(biāo)準(zhǔn)的MIME屬性來(lái)制定,很多種格式的文件類(lèi)型在MIME都會(huì)有對(duì)應(yīng),

如果直接通過(guò)URL來(lái)指定具體資源文件,則Apache服務(wù)器會(huì)根據(jù)服務(wù)器上的資源文件類(lèi)型生成相應(yīng)的HTTP相應(yīng)消息的content-type類(lèi)型,

但是如果不是直接通過(guò)URL指定資源文件,而是指向一個(gè)Servlet,則在Servlet內(nèi)部就需要通過(guò)代碼顯式來(lái)指定響應(yīng)消息中的content-type類(lèi)型,否則不同種類(lèi)的瀏覽器會(huì)有不同的動(dòng)作,也很有可能使瀏覽器崩潰。

  2.2 response.setHeader("Content-Disposition","attachment;filename=" + 文件名稱(chēng))

       指定文件保存的默認(rèn)命名,上例指定為utils.jar,是通過(guò)"content-disposition"屬性指定的,如果不指定則瀏覽器會(huì)默認(rèn)指定為當(dāng)前Servlet的URL名稱(chēng),例如CodeServlet.do,也就是說(shuō)擴(kuò)展名變成了.do而不是.jar.

  2.3 獲取文件,并讀取文件

  2.4 以字節(jié)流的方式返回頁(yè)面

實(shí)例:

/**
 * 處理文件下載的post
 * @throws IOException
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 // 1.獲得請(qǐng)求文件名
 String fileName = request.getParameter("fileName");
 // 2.設(shè)置文件MIME類(lèi)型(指定要返回內(nèi)容的類(lèi)型)
 response.setContentType(getServletContext().getMimeType(fileName));
 // 3.設(shè)置Content-Disposition(指定下載該文件時(shí)的文件名)
 response.setHeader("content-disposition", "attachment;filename=" + fileName);
 // 4.讀取目標(biāo)文件,通過(guò)response將目標(biāo)文件寫(xiě)到客戶(hù)端
 // 4.1 獲取目標(biāo)文件的絕對(duì)路徑
 String filePath = "WEB-INF/uploadFiles/" + fileName;
 filePath = this.getServletContext().getRealPath(filePath);
 // 4.2 讀取文件
 InputStream in = new FileInputStream(filePath);
 // 4.3 輸出文件
 OutputStream out = response.getOutputStream();
 // 寫(xiě)文件
 int n;
 while ((n = in.read()) != -1) {
  out.write(n);
 }

 in.close();
 out.close();
}


說(shuō)明:

1.所需jar包,版本不限

commons-fileupload-1.3.1.jar

commons-io-2.2.jar

2.導(dǎo)包時(shí)不要導(dǎo)錯(cuò)了

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

3.更多對(duì)于文件的操作,請(qǐng)移步文章:servlet實(shí)現(xiàn)文件上傳,預(yù)覽,下載和刪除

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis批量刪除多表

    Mybatis批量刪除多表

    MyBatis的作用我想不用多說(shuō),今天說(shuō)說(shuō)MyBatis中的批量刪除操作。 需要的朋友一起看看吧
    2017-10-10
  • Win10 Java jdk14.0.2安裝及環(huán)境變量配置詳細(xì)教程

    Win10 Java jdk14.0.2安裝及環(huán)境變量配置詳細(xì)教程

    這篇文章主要介紹了Win10 Java jdk14.0.2安裝及環(huán)境變量配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 基于java類(lèi)路徑classpath和包的實(shí)例講解

    基于java類(lèi)路徑classpath和包的實(shí)例講解

    下面小編就為大家分享一篇基于java類(lèi)路徑classpath和包的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java單例的寫(xiě)法詳解

    Java單例的寫(xiě)法詳解

    在java中,單例有很多種寫(xiě)法,面試時(shí),手寫(xiě)代碼環(huán)節(jié),除了寫(xiě)算法題,有時(shí)候也會(huì)讓手寫(xiě)單例模式,這里記錄一下單例的幾種寫(xiě)法和優(yōu)缺點(diǎn)。需要的朋友可以參考下
    2021-09-09
  • SWT(JFace) Menu、Bar...體驗(yàn)代碼

    SWT(JFace) Menu、Bar...體驗(yàn)代碼

    SWT(JFace)體驗(yàn)之Menu、Bar實(shí)現(xiàn)代碼。
    2009-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(shù)的實(shí)現(xiàn)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(shù)的實(shí)現(xiàn)詳解

    平衡二叉樹(shù)又被稱(chēng)為AVL樹(shù)(有別于AVL算法),且具有以下性質(zhì):它是一棵空樹(shù)或它的左右兩個(gè)子樹(shù)的高度差的絕對(duì)值不超過(guò)1,并且左右兩個(gè)子樹(shù)都是一棵平衡二叉樹(shù)。本文將詳解介紹一下平衡二叉樹(shù)的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-03-03
  • Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例詳解

    Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例詳解

    在本篇文章里小編給大家整理了關(guān)于Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程詳解

    Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程詳解

    這篇文章主要介紹了Springboot整合minio實(shí)現(xiàn)文件服務(wù)的教程,文中的示例代碼講解詳細(xì),對(duì)我們的工作或?qū)W習(xí)有一定幫助,需要的可以參考一下
    2022-06-06
  • Spring?BOOT?AOP基礎(chǔ)應(yīng)用教程

    Spring?BOOT?AOP基礎(chǔ)應(yīng)用教程

    這篇文章主要介紹了Spring?BOOT?AOP的使用,文章從相關(guān)問(wèn)題展開(kāi)全文內(nèi)容詳情,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 帶你詳細(xì)了解Spring Security的注解方式開(kāi)發(fā)

    帶你詳細(xì)了解Spring Security的注解方式開(kāi)發(fā)

    這篇文章主要介紹了詳解spring security四種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評(píng)論