一、采用RequestDispatcher的方式進行
1、web.xml文件中增加
??<mime-mapping>
????<extension>doc</extension>
????<mime-type>application/vnd.ms-word</mime-type>
??</mime-mapping>
2、程序如下:
???
二、采用文件流輸出的方式下載
1、web.xml文件中增加
??<mime-mapping>
????<extension>doc</extension>
????<mime-type>application/vnd.ms-word</mime-type>
??</mime-mapping>
2、程序如下:
???
1、web.xml文件中增加




2、程序如下:
???
<%@page language="java" import="java.net.*" pageEncoding="gb2312"%>
<%
?
response.setContentType("application/x-download");//設置為下載application/x-download
????String?filenamedownload?=?"/系統解決方案.doc";//即將下載的文件的相對路徑
????String?filenamedisplay?=?"系統解決方案.doc";//下載文件時顯示的文件保存名稱
????filenamedisplay?=?URLEncoder.encode(filenamedisplay,"UTF-8");
????response.addHeader("Content-Disposition","attachment;filename="?+?filenamedisplay);
????
????try

????
{
????????RequestDispatcher?dispatcher?=?application.getRequestDispatcher(filenamedownload);
????????if(dispatcher?!=?null)

????????
{
????????????dispatcher.forward(request,response);
????????}
????????response.flushBuffer();
????}
????catch(Exception?e)

????
{
????????e.printStackTrace();
????}
????finally

????
{
????
????}
%>
<%

response.setContentType("application/x-download");//設置為下載application/x-download































二、采用文件流輸出的方式下載
1、web.xml文件中增加




2、程序如下:
???
<%@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gb2312"%>
<%

//關于文件下載時采用文件流輸出的方式處理:
????//加上response.reset(),并且所有的%>后面不要換行,包括最后一個;
????//因為Application?Server在處理編譯jsp時對于%>和<%之間的內容一般是原樣輸出,而且默認是PrintWriter,
????//而你卻要進行流輸出:ServletOutputStream,這樣做相當于試圖在Servlet中使用兩種輸出機制,
????//就會發生:getOutputStream()?has?already?been?called?for?this?response的錯誤
????//詳細請見《More?Java?Pitfill》一書的第二部分?Web層Item?33:試圖在Servlet中使用兩種輸出機制?270
????//而且如果有換行,對于文本文件沒有什么問題,但是對于其它格式,比如AutoCAD、Word、Excel等文件
????//下載下來的文件中就會多出一些換行符0x0d和0x0a,這樣可能導致某些格式的文件無法打開,有些也可以正常打開。

????response.reset();//可以加也可以不加
????response.setContentType("application/x-download");//設置為下載application/x-download
????//?/../../退WEB-INF/classes兩級到應用的根目錄下去,注意Tomcat與WebLogic下面這一句得到的路徑不同,WebLogic中路徑最后沒有/
????System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
????String?filenamedownload?=?this.getClass().getClassLoader().getResource("/").getPath()?+?"/../../系統解決方案.doc";
????String?filenamedisplay?=?"系統解決方案.doc";//系統解決方案.txt
????filenamedisplay?=?URLEncoder.encode(filenamedisplay,"UTF-8");
????response.addHeader("Content-Disposition","attachment;filename="?+?filenamedisplay);

????OutputStream?output?=?null;
????FileInputStream?fis?=?null;
????try

????
{
????????output??=?response.getOutputStream();
????????fis?=?new?FileInputStream(filenamedownload);

????????byte[]?b?=?new?byte[1024];
????????int?i?=?0;

????????while((i?=?fis.read(b))?>?0)

????????
{
????????????output.write(b,?0,?i);
????????}
????????output.flush();
????}
????catch(Exception?e)

????
{
????????System.out.println("Error!");
????????e.printStackTrace();
????}
????finally

????
{
????????if(fis?!=?null)

????????
{
????????????fis.close();
????????????fis?=?null;
????????}
????????if(output?!=?null)

????????
{
????????????output.close();
????????????output?=?null;
????????}
????}
%>
<%

//關于文件下載時采用文件流輸出的方式處理:































































