1. 程式人生 > >jsp下載excel文件

jsp下載excel文件

步驟 eof 關閉 cli tco data- java position web-inf

jsp下載excel文件的的實現方法很多,今天也遇到這個問題,亂敲了一陣,終於搞定了,記下來和朋友們分享吧。

假設需要下載excel文件的jsp頁面名為:down.jsp

對應的後臺action名為:downExcel.java(用struts實現,其他框架也類似)

在downExcel.java的添加downAction方法,實現下載步驟

public ActionForward downAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException {
java.io.OutputStream o = response.getOutputStream();
byte b[] = new byte[500];
java.io.File fileLoad = new java.io.File(request.getRealPath("/WEB-INF/"+"/f.xls"));
//System.out.println(fileLoad.getPath());
response.reset();

response.setContentType("application/vnd.ms-excel");

response.setHeader("content-disposition",
"attachment; filename=text.xls");
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
java.io.FileInputStream in = new java.io.FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}

in.close();
o.close();

return null;
}

藍色部分就是要下載的excel文件的路徑,註意更改就可以了。

然後就是JSP頁面部分了:

在down.jsp中放上一個‘下載’按鈕:

<input type="button" value="下載模板" class="bt2" onclick="down();" />

還有一個腳本:


function down(){
var action = "<%=request.getContextPath() %>/downExcel.do?method=downAction";
window.location=action;
}

OK!搞定了 ,為什麽要把下載的實現部分放到後臺?原本我是將這部分放到另外一個頁面(anthor.jsp)的,但是這樣下載後anthor.jsp關閉不掉,即使在onload裏寫上window.close();也是不行的,時間倉促我也沒有想其他辦法解決,留待有心人來吧,呵呵,莫忘告訴我,O(∩_∩)O~

另外,看到某兄弟的實現是這樣的,亮點在最後兩句,我覺得有如果在頁面實現下載步驟,應不出該兄弟所說,照貼如下:

<%
java.io.OutputStream o = response.getOutputStream();
byte b[] = new byte[500];
java.io.File fileLoad = new java.io.File(request.getRealPath("/WEB-INF/"+"/f.xls"));
//System.out.println(fileLoad.getPath());
response.reset();

response.setContentType("application/vnd.ms-excel");

response.setHeader("content-disposition",
"attachment; filename=text.xls");
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
java.io.FileInputStream in = new java.io.FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}

in.close();
out.clear();
out = pageContext.pushBody();

%>

jsp下載excel文件