jsp下载excel文件的一般做法

本文介绍了一种使用JSP和Struts框架实现从Web应用下载Excel文件的方法。通过具体的代码示例,展示了如何配置HTTP响应头以正确发送Excel文件,并提供了一个简单的前端按钮触发下载流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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" οnclick="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();

   %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术之家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值