没有HTML代码的JSP页面,用于将数据导出到Excel工作表

Ram*_*esh 8 java csv jsp servlets

我在将数据导出到excel表时遇到问题,这是因为我的团队中的其他开发人员所做的一些代码.因此,主要问题是使用JSP页面将数据导出到Excel或.cvs但不使用任何HTML代码.任何建议也有助于我在发展中的舞台上探索.谢谢你的努力.

Bal*_*usC 16

最好使用Servlet.原始Java代码不属于JSP文件,这只是维护问题的秘诀.

首先,创建一个简单的Java实用程序类,它采用例如表示CSV内容的a List<List<T>>或a List<Data>(其中Data代表一行),以及OutputStream执行数据复制任务的as方法参数和写入逻辑.

一旦你开始工作,创建一个Servlet类,它将一些CSV文件标识符作为请求参数或pathinfo(我建议使用pathinfo作为由Redmond团队开发的某个webbrowser,否则将检测到filename/mimetype失败),使用标识以获得List<List<T>>List<Data>从某处,并将其写入到OutputStreamHttpServletResponse沿设定正确的响应头.

这是一个基本的启动示例:

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();
}
Run Code Online (Sandbox Code Playgroud)

以下是如何使用它的示例:

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);
}
Run Code Online (Sandbox Code Playgroud)

在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());
}
Run Code Online (Sandbox Code Playgroud)

将此servlet映射到类似的东西上/csv/*并将其调用为类似的东西http://example.com/context/csv/filename.csv.这基本上都是.在PATHINFO的文件名是重要的,因为在微软团队开发了一个网页浏览器的某些忽略filename的部分Content-Disposition头,并使用URL的最后一个路径一部分,而不是.