将javascript数组传递给servlet问题

pass javascript array to a servlet issue

本文关键字:servlet 问题 javascript 数组      更新时间:2023-09-26

早上好,我正在使用jQuery.post()从JSP发送java脚本数组到servlet,但这里的问题是,当执行动作时,它会抛出java.lang.NullPointerException at servlets.DeleteServlet.doPost(DeleteServlet.java:45)下面是将数组发送给servlet的java-script方法:

<script type="text/javascript" src="jquery-1.9.1.min.js"></script>

     var myIdsArray = new Array;
function getCarId(tableID) { // these methods fills the array with values
    try {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        for ( var i = 0; i < rowCount; i++) {
            var row = table.rows[i];
            var chkbox = row.cells[0].childNodes[0];
            if (null != chkbox && true == chkbox.checked) {
                if (rowCount <= 2) {
                    alert("Cannot delete all the rows.");
                    break;
                }
                myIdsArray.push(table.rows[i].cells[1].innerHTML);
            }
        }
        sendArrayToServer();
    } catch (e) {
        alert(e);
    }
}
        function sendArrayToServer() {
    alert("Called");
    $.post('DeleteServlet', {
        arrayData : myIdsArray,
        mode : "insert"
    });
这是我的servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String[] arrayData=request.getParameterValues("arrayData");
    PrintWriter out=response.getWriter();
    for (String string : arrayData) { // line 45
        out.println(string);
    }

request.getParameterValues("arrayData")将返回名为"arrayData"的所有HTTP请求参数的字符串数组。参数可以在查询字符串中,也可以在HTTP POST正文中。

然而,

$.post('DeleteServlet', {
        arrayData : myIdsArray,
        mode : "insert"
});

不创建任何该名称的参数。这就是为什么你在第45行得到一个空指针。

在这种情况下,发送到服务器的是一个JSON字符串。您需要做的是在服务器上解析这个字符串。这意味着(1)从POST主体中获取字符串。(2)解析它。您可能需要使用第三方JSON解析器。Json-simple是个不错的选择。

或者,如果希望保持服务器代码不变,则可以更改客户端代码以创建这些请求参数。可能最简单的方法是将它们放在查询字符串中。