Сервлет Java не может получить параметры POST

Я пытаюсь создать простой экран входа, в котором есть поле электронной почты, поле пароля и кнопка входа (все три заключены в <form/>). Когда пользователь отправляет форму, клиент выполняет AJAX POST (асинхронный, чтобы пользователь не должен был "перенести" перезагрузку страницы!) В сервлет. На данный момент сервлет просто выполняет фиктивную проверку и возвращает "1", если пользователь успешно вошел в систему, или "0", если адрес электронной почты / пароль были неверными. Затем клиент обрабатывает ответ (снова будет 0 или 1).

Происходит следующее: когда я отправляю форму, сервлет получает запрос HTTP POST, но поля электронной почты и пароля отображаются как NULL:

public class SigninService extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter writer = null;
        try {
            writer = response.getWriter();
            JSONSerializer serializer = new JSONSerializer();

            System.out.println("\tFetching POST data...");
            String email = request.getParameter("email");
            System.out.println("\tEmail is " + email + "...");
            String password = request.getParameter("password");
            System.out.println("\tPassword is " + password + "...");

            Integer answer = null;
            // Dummy check; will replace with actual code once I get this example working...
            if("testing@example.com".equals(email) && "12345".equals(password))
                answer = 1;
            else
                answer = 0;

            System.out.println("\tSerializing the HTTP response...");
            String json = serializer.deepSerialize(answer);

            System.out.println("\tSending response back to client...");
            writer.write(json);
        } catch (Throwable throwable) {
            System.err.println(throwable.getMessage());
            throwable.printStackTrace();
        } finally {
            writer.close();
        }
    }
}

Выше код распечатывает null значения для электронной почты / пароля. Я прочитал несколько статей по извлечению данных POST из HttpServletRequest (особенно эта статья, а также эта), и ни одна из них, кажется, не помогает мне. Оба, кажется, предлагают использовать request.getReader() метод, но это не то, что мне нужно. Мне нужен способ прямого доступа к переменным формы и их соответствующим значениям.

Я не могу сказать, правильно ли мой клиентский код форматирует запрос POST и отправляет данные формы способом, который не может обработать Java-сервлет, или же сервлет Java не был правильно закодирован для обработки запроса.

Когда я запускаю Firebug и отправляю форму, вот содержимое Post вкладка, связанная с запросом:

-----------------------------18671963685702-some-really-long-number
Content-Disposition: form-data; name="email"

testing@example.com
-----------------------------18671963685702-another-really-long-number
Content-Disposition: form-data; name="password"

12345
-----------------------------18671963685702-and-another-really-long-number--

На первый взгляд это выглядит так, как будто клиент правильно отправляет ненулевое значение email переменная, а также не-NULL password переменная, но опять же, я здесь на незнакомой территории...

Суть

Сначала мне нужно выяснить, является ли это ошибкой на стороне клиента или на стороне сервера. Этот вопрос является попыткой либо диагностировать ее как ошибку на стороне сервера, либо исключить ее как таковую. Так видят ли какие-либо измотанные в боях ветераны сервлетов что-то неправильное, будь то HTTP-запрос или код сервлета, обрабатывающий его? И если это ошибка сервера, что мне нужно изменить, чтобы получить доступ к переменным формы?

1 ответ

Решение

Когда вы отправляете форму через ajax, отправляете ли вы данные в формате JSON? если это так, вам следует явно извлечь данные из файла jquery или js из поля userId и password, а затем отправить их на сервер в формате JSON. Это решило бы проблему.

Другие вопросы по тегам