如何使用JSP&amp ;;导出CSV Servlet的

时间:2015-11-13 02:00:01

标签: jsp csv servlets

所以我试图让我的JSP从表中导出CSV文件。

但我有一些问题:

我的编译器一直显示空指针错误,由于我的CSV脚本错误或者我将脚本放在错误的servlet方法中,它仍然无法理解。

到目前为止,这是我的JSP。

<%@page import="jxl.write.*"%>
<%@page import="java.io.File" %>
<%@page import="jxl.*" %>


<%@page import="Model.FuzzyTopsis"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title> 
        Fuzzy Topsis Supplier Selection
    </title>

    <!-- Normalize -->
    <link href="assets/css/normalize.css" rel="stylesheet">

    <!-- Bootstrap -->
    <link href="assets/css/bootstrap.min.css" rel="stylesheet">

    <!-- Bootstrap -->
    <link href="assets/css/custom_style_00.css" rel="stylesheet">

    <!-- Font -->
    <link href="assets/css/font.css" rel="stylesheet">

</head>

<!-- BODY STARTS HERE -->
<body>
    <section class="main_wrapper">           
        <div class="table-responsive">
            <table class="table table-bordered">
                <tr>
                    <td>Name</td>
                </tr>

                <%
                   for (int i = 0; i < sNum; i++) {
                %>
                <tr>
                    <td>test-<%=i + 1%></td>
                </tr>
                <%
                    }
                %>
            </table>
        </div>

        <form method="post" action="./Page_Five_Controller">
            <div class="sub_form_wrapper">
                <div class="sub_form_input">
                    <input class="btn btn-default btn-lg" type="submit" value="Download to XLS" name="submit">
                </div>
            </div>
        </form>

    </section>     
</body>

这是我的servlets:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);

    int sNum = (Integer) request.getSession().getAttribute("sNum");

    //Variabel excel
    String header = "No, Nama Suppier";

    FileWriter fileWriter = new FileWriter("result.csv");
    fileWriter.append(header.toString());
    fileWriter.append("\n");

    for(int i=0;i<sNum;i++){
        fileWriter.append(String.valueOf(i+1));
        fileWriter.append(",");
        fileWriter.append("TES");
        fileWriter.append("\n");
    }

    fileWriter.flush();
    fileWriter.close();  
}

所以任何人都可以指出我的错误或告诉我应该怎么做?

而且,如果要将表导出为CSV,是否将脚本放在doPost()servlet函数中是正确的?

谢谢。

1 个答案:

答案 0 :(得分:0)

这让人很乱。我将根据我的假设回答你的问题。我希望这就是你想要的......所以,

假设您提供的servlet代码是针对servlet Page_Five_Controller的,那么您获得异常的行就是int sNum = (Integer) request.getSession().getAttribute("sNum");。那是因为您没有将值sNum设置为session隐式对象的属性。

如果我要在jsp中添加会话对象中的所有变量,然后转到servlet从会话中检索这些值(因为视图中没有任何变化),我会怎么做。

在jsp中会出现类似的情况:

session.setAttribute("sName",sName);
session.setAttribute("stringTemp",stringTemp);
session.setAttribute("ccTemp",ccTemp);
session.setAttribute("sNum",sNum );
session.setAttribute("dNum",dNum );
session.setAttribute("cNum",cNum );

然后在您的Servlet中检索如下值:

String[] sName = (String[]) request.getSession().getAttribute("sName");
String[] stringTemp = (String[]) request.getSession().getAttribute("stringTemp");
double[] ccTemp = (double[]) request.getSession().getAttribute("ccTemp");
int sNum = (Integer) request.getSession().getAttribute("sNum");
int dNum = (Integer) request.getSession().getAttribute("dNum");
int cNum = (Integer) request.getSession().getAttribute("cNum");

然后在servlet中执行循环并输出数据。

希望这有帮助