Servlet – 导出对Excel文件的响应
我无法将来自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>");
单击时提交button会生成一个不包含任何值的Excel工作表。 请参阅单击“提交”button时调用的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");
当提交button被点击时,有没有办法将Export.java
的输出Export.java
到Test.java
。
最后,我find了一个解决scheme! 我把所有的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());`
做了这个工作。
在打印响应之前,您必须调用setContentType。 你不能打印你的HTML表格,然后让用户点击一个button,把它们带到一个完全不同的servlet,它只会将setContentType设置为Excel,并期望以某种方式记住你的HTML表格。 如果这个项目的目的是要有任何真实的世界,你也应该真正考虑获得一个用于Java的Excel库(例如Apache POI)和使用application / msexcel而不是依靠application / vnd.ms-excel来将HTML转换成Excel用处。