jsp下载excel文件
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();
%>