Сервлет не может прочитать параметр XMLHttpRequest - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю HTTP-запрос POST из JavaScript следующим образом:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <input id="num" type="text" />
    <input type="button" id="btn" value="submit" onclick="func()"/>
    <script>
    function func() {
        var num = document.getElementById("num").value;
        var request = new XMLHttpRequest();
        request.open("POST", "/Servlet/MyServlet", true);
        request.onreadystatechange = function() {
            if(request.readyState == 4 && request.status == 200) {
                 ...        }
        };
        request.setRequestHeader("Content-Type", "application/www-x-form-urlencoded");
        request.send("num=" + num);
    }
    </script>
</body>
</html>

, и это мой сервлет:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
              ...
            int num = Integer.parseInt(request.getParameter("num"));            
    }

Сервлет вызывается, но параметр null.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Найдена проблема: это строка setRequestHeader.Ваш application/www-x-form-urlencoded, который должен быть application/x-www-form-urlencoded.Попробуйте заменить приведенную ниже строку в вашем коде.В противном случае ваш код работает как шарм (я пробовал).

 request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
0 голосов
/ 25 сентября 2018

Ваш код выглядит нормально, попробуйте распечатать все параметры, которые вы получаете с request.getParameterMap(); Что вы передаете в качестве параметра в переменной num?Я предполагаю, что это число, но если это строка, вам нужно убедиться, что она также закодирована в URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...