案例-完成文件下載
先創建一個文件夾叫download
然后在文件里創建幾個例子文件
然后這個文件夾復制到你的Webcontion下去
然后在Webcontion上創建一個jsp,叫download
除了能在標簽種能設置post請求以外的所有的標簽都是get請求,就是不能設置post請求的標簽都是get請求
所以a標簽就是個get請求
因為是get請求所以這個filename就是所帶的參數 讓他服務器知道顧客點的是那個 所給出相應的資源
然后在src下創建一個包叫com.oracle.demo01在創建一個Servlet叫DownloadServlet
然后在jsp寫
重啟服務器顯示出
a.png
a.txt
是亂碼
a.wmv和a.rar都是直接下載
游覽器能解析的就直接打開 不能解析的就提供下載
上述代碼可以將圖片從服務器端傳輸到瀏覽器,但瀏覽器直接解析圖片顯示在頁面上, 而不是提供下載,我們需要設置兩個響應頭,告知瀏覽器文件的類型和文件的打開方 式。
1)告知瀏覽器文件的類型:response.setContentType(文件的MIME類型);
2)告示瀏覽器文件的打開方式是下載:
response.setHeader("Content-Disposition","attachment;filename=文件名稱");
寫完后重啟服務器顯示:
然后在做一個實例
右鍵你的圖片改成中文名字
然后之前jsp的也改成小狗
改完后再重啟服務器測試發現
這樣的話下載是沒有問題的,但是因為碼表的問題中文亂碼所以名字不顯示,為了改正這種情況
但是,如果下載中文文件,頁面在下載時會出現中文亂碼或不能顯示文件名的情況, 原因是不同的瀏覽器默認對下載文件的編碼方式不同,ie是UTF-8編碼方式,而火狐 瀏覽器是Base64編碼方式。所里這里需要解決瀏覽器兼容性問題,解決瀏覽器兼容 性問題的首要任務是要辨別訪問者是ie還是火狐(其他),通過Http請求體中的一 個屬性可以辨別
解決亂碼方法如下(不要記憶--了解):
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");
}
其中agent就是請求頭User-Agent的值
代碼如下
運行結果:
一次性驗證碼
解壓到
把CheckImgServlet復制到src里的demo01下 在把包名改了
在把new_words復制到WEB-INF下
在設置你的web-xml
運行出現
在webcontion創建一個jsp
點一下刷新一張圖片
response細節點:
- response獲得的流不需要手動關閉,web容器(tomcat容器)會幫助我們關閉,
- getWriter和getOutputStream不能同時調用
- 重定向語句一般作為終結代碼