Servlet - 导出对Excel文件的响应

时间:2013-04-24 13:59:06

标签: java excel jsp servlets response

我无法将servlet的响应导出到excel文件。请参阅以下代码:

Test.java:

 @Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
out = response.getWriter();
out.print("<form name=\"test\" method=\"post\" action=\"Export\">");
out.print("<table border=\"1\" cellpadding=\"3\" bordercolor='black'");
out.print("<tr>");
out.print("<td>1</td>");
out.print("<td>hello how are you?</td>");
out.print("</tr>");
out.print("</table>");
out.print("<td><input type=\"submit\" name =\"submit1\" value=\"Export To Excel\"></td>");
out.print("</form>");

单击时,提交按钮会生成不包含任何值的Excel工作表。请参阅单击“提交”按钮时调用的Export.java

Export.java

public class Export extends HttpServlet {

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    String submit1 = request.getParameter("submit1");
   if (submit1 != null) {
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment; filename=users.xls");
    }
}
}

此外,据观察,如果我在Test.java中编写以下代码,其工作正常,excel表确实包含表值。

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=users.xls");

单击提交按钮时,有没有办法将Export.java的输出转发到Test.java

2 个答案:

答案 0 :(得分:4)

最后,我找到了解决方案!我将所有out.print()内容存储到StringBuffer中。然后使用getServletContext().setAttribute("test", Buffer);我将整个内容转发到另一个servlet,并从另一个servlet使用StringBuffer data = (StringBuffer) getServletContext().getAttribute("test");检索数据。

最后,

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=sample.xls");
response.getWriter().write(data.toString());`

完成了这项工作。

答案 1 :(得分:1)

您必须在打印响应之前调用setContentType。您无法打印HTML表格,然后让用户单击一个按钮,将它们带到一个完全不同的servlet,该servlet除了将setContentType设置为Excel之外什么都不做,并期望它以某种方式记住您的HTML表格。您还应该真正考虑获取Java的Excel库(例如Apache POI)并使用application / msexcel而不是依赖application / vnd.ms-excel将HTML转换为Excel,如果这个项目有任何真实世界的话效用