国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

如何用 servlet 打開非 HTML 格式的文檔

如何用 servlet 打開非 HTML 格式的文檔

更新時間:2022-05-04 文章作者:未知 信息來源:網絡 閱讀次數:

如何用 servlet 打開非 HTML 格式的文檔
一種向 Web 客戶端發送非 HTML 格式文檔的簡單方法


摘要
Java Servlet 編程可以很方便地將 HTML 文件發送到客戶端 Web 瀏覽器。然而許多站點還允許訪問非 HTML 格式的文檔,包括 Adobe PDF、Microsoft Word 和 Micorsoft Excel 等。事實上這些非 HTML 格式只要能用 MIME 類型表示,就可以利用 servlet 來發送。本文將以 PDF 和 Microsoft Word 文件為例,向你介紹如何使用 servlet 傳送非 HTML 格式文件,以及與防火墻交互的方法。
你只要將文件寫到 servlet 的輸出流中,就可以利用 servlet 在瀏覽器中打開一個文件。盡管這看起來非常簡單,在打開非 HTML 格式文檔(比如二進制數據或多媒體文件)的時候,仍要注意一些要點。
首先從獲得 servlet 的輸出流開始:

ServletOutputStream out = res.getOutputStream();


互聯網上使用 MIME (multipurpos Internet mail extension 多目的互聯網郵件擴展協議)來傳送混合格式、多媒體和二進制數據文件。如果要在 servlet 的 response 對象中打開某個文檔,就必須設置該文檔的 MIME 類型。下面這個例子中我們將打開 PDF 文檔。

MIME 類型
Web 瀏覽器使用 MIME 類型來識別非 HTML 文檔,并決定如何顯示該文檔內的數據。將插件 (plug-in) 與 MIME 類型結合使用,則當 Web 瀏覽器下載 MIME 類型指示的文檔時,就能夠啟動相應插件處理此文檔。某些 MIME 類型還可以與外部程序結合使用,瀏覽器下載文檔后會啟動相應的外部程序。

MIME 類型非常有用。它們允許 Web 瀏覽器處理不同格式的文檔,卻不需要事先嵌入相關知識。Java Servlets 可以使用 MIME 類型來向瀏覽器傳送非 HTML 文件,比如 Adobe PDF 和 Micorsoft Word。使用正確的 MIME 類型能夠保證這些非 HTML 文件被正確的插件或外部程序顯示。本文末的資料部分提供了一些網址,指向一些已定義 MIME 類型列表和關于 MIME 類型的文章。

PDF 文件的 MIME 類型是 "application/pdf"。要用 servlet 來打開一個 PDF 文檔,需要將 response 對象中 header 的 content 類型設置成 "application/pdf":

// MIME type for pdf doc
res.setContentType( "application/pdf" );


若要打開一個 Microsoft Word 文檔,你就要將 response 對象的 content 類型設置成 "application/msword":

// MIME type for MSWord doc
res.setContentType( "application/msword" );


如果是一個 Excel 文檔,則使用 MIME 類型 "application/vnd.ms-excel"。其中 vnd 表示該應用程序的制造者,必須將它包含在 MIME 類型里才能夠打開該類型文檔。

有時候瀏覽器不能識別文檔的 MIME 類型。通常這是由于沒有安裝這些文檔需要的插件而導致的。這種情況下,瀏覽器會彈出一個對話框,詢問用戶是否需要打開該文件或是將它保存到本地磁盤上。

Content disposition
一種叫做 content-disposition 的 HTTP response header 允許 servlet 指定文檔表示的信息。使用這種 header ,你就可以將文檔指定成單獨打開(而不是在瀏覽器中打開),還可以根據用戶的操作來顯示。如果用戶要保存文檔,你還可以為該文檔建議一個文件名。這個建議名稱會出現在 Save As 對話框的“文件名”欄中。如果沒有指定,則對話框中就會出現 servlet 的名字。更多關于 content-disposition header 的信息,可以參閱資料。

在 servlet 中,你需要將 header 設置成下面這樣:

res.setHeader("Content-disposition",
"attachment; filename=" +
"Example.pdf" );
// attachment - since we don't want to open
// it in the browser, but
// with Adobe Acrobat, and set the
// default file name to use.


如果你要打開的是 Microsoft Word 文件,你可以設成:

res.setHeader("Content-disposition",
"attachment; filename" +
"Example.doc" );


封裝非 HTML 文檔
完成上述工作后,剩下的就非常簡單了。你需要根據待傳送文件的名字,創建一個 java.net.URL 對象。交給 URL 構造器的字符串必須是指向該文件的一個有效 URL 地址。在這個例子中,我要打開 Adobe employment 格式的文檔:

String fileURL =
"http://www.adobe.com/aboutadobe/careeropp/pdfs/adobeapp.pdf;"


你的 URL 字符串也可以類似于 http://www.gr.com/pub/somefile.doc 或 http://www.gr.com/pub/somefile.xls。但必須確保待傳送文件類型與先前在 HTTP response 對象中設置的 MIME 類型一致。

URL url = new URL ( fileURL );


防火墻
如果需要通過防火墻,最后一件要考慮的事情就是你的 URL 鏈接。首先應當搜集所用代理服務器的相關信息,例如主機名稱和端口號等。更多關于如何通過防火墻建立鏈接的信息,可以參看下面的資料部分。

如果使用的是 Java 2,你應該從 URL 對象類中創建一個 URLConnection 對象,并設置下列系統屬性:

URLConnection conn = url.openConnection();

// Use the username and password you use to
// connect to the outside world
// if your proxy server requires authentication.
String authentication = "Basic " + new
sun.misc.BASE64Encoder().encode("username:password".getBytes());

System.getProperties().put("proxySet", "true");

System.getProperties().put("proxyHost", PROXY_HOST); // your proxy host
System.getProperties().put("proxyPort", PROXY_PORT); // your proxy port
conn.setRequestProperty("Proxy-Authorization", authentication);


如果你使用的是 JDK 1.1,則不能設置這些系統屬性。這種情況下,你可以根據所用代理服務器的信息創建 java.net.URL 對象:

url = new URL("http", PROXY_HOST,
Integer.parseInt(PROXY_PORT),
fileURL );
// assumes authentication is not required


深入工作
開始閱讀你傳送的文檔之前,首先要從 URLConnection (或 URL) 對象中獲得輸入流 InputStream。在這個例子中,用 BufferedInputStream 將 InputStream 封裝起來。

如果你采用 URLConnection,可以嘗試如下代碼:

BufferedInputStream bis = new
BufferedInputStream(conn.getInputStream());


如果你使用 URL,則可用下列代碼:

BufferedInputStream bis = new
BufferedInputStream(url.openStream());


一旦你完成上述操作,就只要簡單地將 InputStream 中的字節,寫入到 servlet 的輸出流 OutputStream 中:

BufferedOutputStream bos = new
BufferedOutputStream(out);

byte[] buff = new byte[2048];
int bytesRead;

// Simple read/write loop.
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}


在最后的代碼塊中,關閉這些流。

這個例子是利用 doPost 來實現的(doPost 是 HttpServlet 子類的一個方法):

public void doPost(HttpServletRequest req,
 HttpServletResponse res)
 throws ServletException, IOException
{
ServletOutputStream out =
res.getOutputStream ();

//---------------------------------------------------------------
// Set the output data's mime type
//---------------------------------------------------------------

res.setContentType( "application/pdf" ); // MIME type for pdf doc

//---------------------------------------------------------------
// create an input stream from fileURL
//---------------------------------------------------------------

String fileURL =
"http://www.adobe.com/aboutadobe/careeropp/pdfs/adobeapp.pdf";

//------------------------------------------------------------
// Content-disposition header - don't open in browser and
// set the "Save As..." filename.
// *There is reportedly a bug in IE4.0 which ignores this...
//------------------------------------------------------------
res.setHeader("Content-disposition",
"attachment; filename=" +=
"Example.pdf" );

//-----------------------------------------------------------------
// PROXY_HOST and PROXY_PORT should be your proxy host and port
// that will let you go through the firewall without authentication.
// Otherwise set the system properties and use URLConnection.getInputStream().
//-----------------------------------------------------------------
BufferedInputStream bis = null;
BufferedOutputStream bos = null;

try {
URL url = new URL( "http", PROXY_HOST,
 Integer.parseInt(PROXY_PORT), fileURL );

// Use Buffered Stream for reading/writing.
bis = new BufferedInputStream(url.openStream());
bos = new BufferedOutputStream(out);

byte[] buff = new byte[2048];
int bytesRead;

// Simple read/write loop.
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}

} catch(final MalformedURLException e) {
System.out.println ( "MalformedURLException." );
throw e;
} catch(final IOException e) {
System.out.println ( "IOException." );
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}


結論
正如你所讀到的,用 servlet 來打開非 html 文檔相當簡單。即使是要通過防火墻也是如此。只要設置了正確的 MIME 類型,就可以使用同樣的代碼來打開圖片或其他多媒體文件。當今的互聯網上包含了大量信息,其中許多數據被存儲為非 HTML 格式。使用 servlet 能夠克服 HTML 的限制,簡單方便地向用戶傳送這些非 HTML 格式的信息。

 

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        久久精品一区二区| 91在线观看美女| 高清视频一区二区| 国产精品免费av| 91在线看国产| 亚洲成人你懂的| 777色狠狠一区二区三区| 日韩精品每日更新| 国产日本欧洲亚洲| 欧美在线免费视屏| 激情综合网最新| 1000精品久久久久久久久| 欧美主播一区二区三区美女| 亚洲午夜激情网站| 国产亚洲欧美一级| 欧美日韩一卡二卡三卡 | 亚洲天堂久久久久久久| 色天使色偷偷av一区二区| 青青草国产成人av片免费| 国产欧美一区二区三区网站| 欧美在线你懂得| 国产精品一卡二| 无码av中文一区二区三区桃花岛| 欧美成人综合网站| 色哦色哦哦色天天综合| 国产一区二区在线影院| 亚洲国产日日夜夜| 国产精品嫩草影院av蜜臀| 777亚洲妇女| 日本韩国欧美国产| 成人一区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 最新热久久免费视频| 2022国产精品视频| 69成人精品免费视频| 色香蕉成人二区免费| 国产盗摄精品一区二区三区在线| 亚洲一区精品在线| 亚洲视频网在线直播| 久久久av毛片精品| 欧美大片拔萝卜| 欧美精品久久一区| 色欧美片视频在线观看| 不卡视频一二三四| 国产jizzjizz一区二区| 久久国产精品99久久久久久老狼 | 亚洲国产精品视频| 亚洲精品亚洲人成人网在线播放| 久久这里只有精品6| 日韩一区二区在线播放| 欧美美女一区二区在线观看| 色综合天天综合在线视频| 国产成人免费视频网站| 国产精品中文有码| 国产福利91精品一区二区三区| 久久精品久久99精品久久| 蜜桃久久精品一区二区| 蜜臂av日日欢夜夜爽一区| 青青草原综合久久大伊人精品| 亚洲bdsm女犯bdsm网站| 五月婷婷另类国产| 美女高潮久久久| 国产精品综合二区| 成人av电影在线观看| 成av人片一区二区| 色婷婷精品久久二区二区蜜臂av| 在线亚洲免费视频| 91精品在线免费观看| 久久精品男人天堂av| 国产精品视频麻豆| 亚洲自拍偷拍欧美| 美女久久久精品| 99在线精品视频| 欧美顶级少妇做爰| 国产亚洲精品超碰| 亚洲人xxxx| 秋霞电影网一区二区| 高清日韩电视剧大全免费| 日本高清免费不卡视频| 欧美一区二区三区电影| 国产午夜精品一区二区三区四区| 国产精品日日摸夜夜摸av| 一个色综合av| 激情综合色播激情啊| 91麻豆高清视频| 精品国产伦理网| 亚洲一区在线观看网站| 国产一区二区精品在线观看| 色欲综合视频天天天| 精品少妇一区二区三区日产乱码 | 另类中文字幕网| 成人av在线网站| 日韩精品一区二区三区在线播放| 亚洲欧洲性图库| 视频精品一区二区| 成人激情午夜影院| 精品久久久久久久人人人人传媒| 国产精品第四页| 久久99日本精品| 欧美日韩中文一区| 国产精品你懂的在线欣赏| 美女一区二区视频| 日本精品视频一区二区| 久久婷婷一区二区三区| 午夜精品视频一区| 色综合天天视频在线观看 | 亚洲国产精品麻豆| 不卡的电影网站| 久久久久久久电影| 麻豆成人久久精品二区三区红| 在线观看av不卡| 亚洲婷婷在线视频| 粉嫩一区二区三区在线看 | 欧美日韩免费观看一区二区三区 | av网站一区二区三区| 精品精品国产高清a毛片牛牛| 五月天丁香久久| 欧美亚洲尤物久久| 亚洲免费高清视频在线| 成人免费视频app| 中文字幕免费不卡| 国产成人自拍网| 久久久午夜精品| 国产一区二区福利视频| 精品国产乱码久久久久久久| 秋霞午夜av一区二区三区| 4438亚洲最大| 麻豆成人免费电影| 日韩欧美在线影院| 久久97超碰国产精品超碰| 欧美成人乱码一区二区三区| 麻豆91精品视频| 国产亚洲一二三区| av在线不卡网| 亚洲乱码日产精品bd| 欧美色手机在线观看| 婷婷国产在线综合| 日韩视频永久免费| 国产精品一区二区果冻传媒| 国产欧美日韩麻豆91| 99re在线精品| 婷婷夜色潮精品综合在线| 在线播放视频一区| 国产尤物一区二区| 一区免费观看视频| 欧美日韩国产小视频在线观看| 天天综合色天天综合色h| 日韩免费高清视频| 成人动漫一区二区三区| 亚洲国产aⅴ成人精品无吗| 精品少妇一区二区三区| 成人av先锋影音| 日韩高清不卡一区| 国产偷v国产偷v亚洲高清| 一道本成人在线| 美女视频第一区二区三区免费观看网站 | 久久99国产精品久久99| 亚洲国产岛国毛片在线| 日本韩国精品在线| 精品一区二区三区视频在线观看| 国产精品网站在线观看| 欧美高清一级片在线| 国产精品69毛片高清亚洲| 一区二区三区精品久久久| 日韩一区二区免费在线电影 | 欧美综合久久久| 国产一区二区精品在线观看| 一区二区三区在线免费视频| 精品日韩欧美一区二区| 一本到三区不卡视频| 国产在线国偷精品免费看| 亚洲免费视频成人| 久久毛片高清国产| 欧美精品久久久久久久多人混战| 国产一区二区三区av电影| 亚洲国产欧美日韩另类综合| 国产嫩草影院久久久久| 日韩一区二区不卡| 91高清在线观看| 成人午夜碰碰视频| 国产一区在线看| 欧美a一区二区| 亚洲成人av一区| 亚洲天天做日日做天天谢日日欢| 久久婷婷综合激情| 欧美一区二区观看视频| 色综合色综合色综合| 成人综合婷婷国产精品久久 | 亚洲精品免费一二三区| 久久网站热最新地址| 日韩一级完整毛片| 欧美一区二区在线观看| 91久久精品国产91性色tv| 成人动漫中文字幕| 国产成人8x视频一区二区| 精品在线观看视频| 精品制服美女久久| 国产麻豆精品95视频| 国内成+人亚洲+欧美+综合在线| 丝袜诱惑制服诱惑色一区在线观看|