没有HTML代码的JSP页面,用于将数据导出到Excel工作表
我在将数据导出到excel表单时遇到了一个问题,这是因为我的团队中的其他开发人员所做的一些代码。 所以主要的问题是使用JSP页面将数据导出到Excel或.cvs,但不使用任何HTML代码。 任何build议也将帮助我在发展领域探索。 感谢您的努力。
为此更好地使用一个Servlet。 原始的Java代码不属于JSP文件,这只是维护故障的秘诀。
首先,创build一个简单的Java实用程序类,它以例如List<List<T>>
或List<Data>
(其中Data
代表一行)代表CSV内容,并使用一个OutputStream
作为方法参数,数据复制任务。
一旦你得到这个工作,创build一个Servlet类,它需要一些CSV文件标识符作为请求参数或path信息(我推荐使用pathinfo作为一个由雷德蒙德团队开发的Web浏览器会失败检测文件名/ MIMEtypes否则),使用标识符从某处获取List<List<T>>
或List<Data>
,并将其按照一组正确的响应头写入HttpServletResponse
的OutputStream
。
这是一个基本的开球的例子:
public static <T> void writeCsv (List<List<T>> csv, char separator, OutputStream output) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, "UTF-8")); for (List<T> row : csv) { for (Iterator<T> iter = row.iterator(); iter.hasNext();) { String field = String.valueOf(iter.next()).replace("\"", "\"\""); if (field.indexOf(separator) > -1 || field.indexOf('"') > -1) { field = '"' + field + '"'; } writer.append(field); if (iter.hasNext()) { writer.append(separator); } } writer.newLine(); } writer.flush(); }
下面是一个如何使用它的例子:
public static void main(String[] args) throws IOException { List<List<String>> csv = new ArrayList<List<String>>(); csv.add(Arrays.asList("field1", "field2", "field3")); csv.add(Arrays.asList("field1,", "field2", "fie\"ld3")); csv.add(Arrays.asList("\"field1\"", ",field2,", ",\",\",\"")); writeCsv(csv, ';', System.out); }
而在Servlet中你基本上可以这样做:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getPathInfo(); List<List<Object>> csv = someDAO().list(); response.setHeader("content-type", "text/csv"); response.setHeader("content-disposition", "attachment;filename=\"" + filename + "\""); writeCsv(csv, ',', response.getOutputStream()); }
把这个servlet映射到像/csv/*
这样的东西上,像http://example.com/context/csv/filename.csv
那样调用它。 这基本上都是。 pathinfo中的文件名非常重要,因为Redmond团队开发的某个浏览器将忽略Content-Disposition
标头的filename
部分,而是使用URL的最后一个path部分。