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

Java response響應(yīng)體和文件下載實(shí)現(xiàn)原理

 更新時(shí)間:2020年05月26日 09:40:26   作者:嘿抬頭i  
這篇文章主要介紹了Java response響應(yīng)體和文件下載實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

通過response 設(shè)置響應(yīng)體:

響應(yīng)體設(shè)置文本:

PrintWriter getWriter()

  獲得字符流,通過字符流的write(String s)方法可以將字符串設(shè)置到response 緩沖區(qū)中,隨后Tomcat會(huì)將response緩沖區(qū)中的內(nèi)容組裝成Http響應(yīng)返回給瀏覽 器端。

關(guān)于設(shè)置中文的亂碼問題

  原因:response緩沖區(qū)的默認(rèn)編碼是iso8859-1,此碼表中沒有中文,可以通過 response的setCharacterEncoding(String charset) 設(shè)置response的編碼,

但我們發(fā)現(xiàn)客戶端還是不能正常顯示文字。

  原因:我們將response緩沖區(qū)的編碼設(shè)置成UTF-8,但瀏覽器的默認(rèn)編碼是本地系統(tǒng)的編碼,因?yàn)槲覀兌际侵形南到y(tǒng),所以客戶端瀏覽器的默認(rèn)編碼是GBK,我們可以手動(dòng)修改瀏覽器的編碼是UTF-8。

我們還可以在代碼中指定瀏覽器解析頁面的編碼方式,通過response的setContentType(String type)方法指定頁面解析時(shí)的編碼是UTF-8。

response.setContentType("text/html;charset=UTF-8");

上面的代碼不僅可以指定瀏覽器解析頁面時(shí)的編碼,同時(shí)也內(nèi)含 setCharacterEncoding的功能,所以在實(shí)際開發(fā)中只要編寫 response.setContentType("text/html;charset=UTF-8"),就可以解決頁面輸出中文亂碼問題。

package com.oracle;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Encoder;


public class DownloadServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //服務(wù)器獲取文件名(文件名是中文的話,獲取的時(shí)候就成了亂碼了)
    String filename = request.getParameter("file");//??.png
    //get請(qǐng)求中---解決文件名中文亂碼問題
    filename =new String(filename.getBytes("ISO-8859-1"),"UTF-8");//亂碼.png
    
    //獲取User-Agent獲取客戶端瀏覽器到底是哪個(gè)瀏覽器  
    String agent=request.getHeader("User-Agent");
    String filenameEncoder="";
    if (agent.contains("MSIE")) {
        // IE瀏覽器
        filenameEncoder= URLEncoder.encode(filename, "utf-8");
        filenameEncoder= filenameEncoder.replace("+", " ");
    } else if (agent.contains("Firefox")) {
        // 火狐瀏覽器
    BASE64Encoder base64Encoder = new BASE64Encoder();
        filenameEncoder= "=?utf-8?B?"
            + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
    } else {
        // 其它瀏覽器
        filenameEncoder= URLEncoder.encode(filename, "utf-8");        
    }
    //告知瀏覽器文件的類型(響應(yīng)體)
    response.setContentType(getServletContext().getMimeType(filename));
    //告知瀏覽器以附件的方式提供下載功能 而不是解析
    response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder);
    //服務(wù)器獲取后開始進(jìn)行復(fù)制的程序:獲取字節(jié)輸出流
    ServletOutputStream sos = response.getOutputStream();
    //獲取數(shù)據(jù)源的絕對(duì)路徑
    String realpath = getServletContext().getRealPath("download/"+filename);
    //獲取字節(jié)輸入流
    FileInputStream fis =new FileInputStream(realpath);
    //開始復(fù)制
    byte[] bytes=new byte[1024];
    int len=0;
    while((len=fis.read(bytes))!=-1){
      sos.write(bytes, 0, len);
    }
    //釋放資源
    fis.close();
  }
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
  }

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
  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>Insert title here</title>
</head>
<body>
   <a href="/WEB02/DownLoadServlet?filename=a.txt" rel="external nofollow" >a.txt</a>
   <a href="/WEB02/DownLoadServlet?filename=a.wmv" rel="external nofollow" >a.wmv</a>
   <a href="/WEB02/DownLoadServlet?filename=科比.png" rel="external nofollow" >科比.png</a>
   <a href="/WEB02/DownLoadServlet?filename=a.zip" rel="external nofollow" >a.zip</a>
</body>
</html>

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

相關(guān)文章

  • java鎖synchronized面試常問總結(jié)

    java鎖synchronized面試常問總結(jié)

    這篇文章主要介紹了java鎖synchronized面試常問總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作示例

    Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作,結(jié)合實(shí)例形式分析了spring在bean銷毀之前的行為相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下
    2019-11-11
  • Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解

    Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解

    這篇文章主要介紹了Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • spring boot實(shí)現(xiàn)自動(dòng)輸出word文檔功能的實(shí)例代碼

    spring boot實(shí)現(xiàn)自動(dòng)輸出word文檔功能的實(shí)例代碼

    這篇文章主要介紹了spring boot實(shí)現(xiàn)自動(dòng)輸出word文檔功能的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Spring中property-placeholder的使用與解析詳解

    Spring中property-placeholder的使用與解析詳解

    本篇文章主要介紹了Spring中property-placeholder的使用與解析詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java?Calendar類使用之日期和時(shí)間處理指南

    Java?Calendar類使用之日期和時(shí)間處理指南

    這篇文章主要給大家介紹了關(guān)于Java?Calendar類使用之日期和時(shí)間處理指南的相關(guān)資料,Calendar類是Java中用于處理日期和時(shí)間的抽象類,它提供了一種獨(dú)立于特定日歷系統(tǒng)的方式來處理日期和時(shí)間,需要的朋友可以參考下
    2023-12-12
  • 詳細(xì)聊聊Mybatis中萬能的Map

    詳細(xì)聊聊Mybatis中萬能的Map

    最近有個(gè)需求,就是使用mybatis時(shí),向mysql中插入數(shù)據(jù),其參數(shù)為map類型,下面這篇文章主要給大家介紹了關(guān)于Mybatis中萬能的Map的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Java源碼解析LinkedList

    Java源碼解析LinkedList

    今天小編就為大家分享一篇關(guān)于Java源碼解析LinkedList,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JVM類加載,垃圾回收

    JVM類加載,垃圾回收

    這篇文章主要介紹了JVM的幾種垃圾回收器,文中通過示例代碼介紹的很詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 詳解spring cloud eureka注冊(cè)中心

    詳解spring cloud eureka注冊(cè)中心

    這篇文章主要介紹了詳解spring cloud eureka注冊(cè)中心,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論

郎溪县| 昭平县| 延吉市| 宁远县| 昔阳县| 大竹县| 黄石市| 获嘉县| 禄劝| 容城县| 城固县| 平南县| 陵川县| 南阳市| 安陆市| 安义县| 公主岭市| 且末县| 闽侯县| 南华县| 长沙县| 济阳县| 黄平县| 安岳县| 区。| 建德市| 道孚县| 内黄县| 夹江县| 永登县| 连山| 温州市| 垦利县| 苍山县| 青浦区| 喀喇| 天津市| 桦川县| 南漳县| 长宁区| 布拖县|