Невозможно заставить сервлет вести себя по-разному в зависимости от наличия параметра запроса POST - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть это в doPost () моего сервлета:

if(request.getParameter("mode").equals("html"))
    request.getRequestDispatcher("WEB-INF/jsp/Menu.jsp").forward(request, response);
else {
    request.getRequestDispatcher("WEB-INF/jsp/success.jsp").forward(request, response);
}

Я проверяю выполнение первого оператора, имея HTML-страницу в следующей форме:

<form action="" method="post">
    Username:<br>
    <input type="text" name="user"><br>
    Password:<br>
    <input type="text" name="pass"><br><br>
    <input type="hidden" name="mode" value="html" />
    <input type="submit" value="Submit">
</form>

Когда я отправляю форму, первый оператор (пересылка в Menu.jsp) выполняется правильно. Я проверяю выполнение второго оператора с помощью модульного теста (который я сам не писал), который отправляет запрос на публикацию напрямую, а не через форму, как показано ниже:

@Test
public void testLoginSuccess() {
    try {
        WebClient webClient = new WebClient();
        String jsonText = login(webClient, "bob3", "fred3");
        DocumentContext dc = JsonPath.parse(jsonText);
        Assert.assertEquals("success", dc.read("$['status']"));


    } catch (IOException e) {
        e.printStackTrace();
        Assert.assertTrue(false);
    }
}

Метод входа:

private String login(WebClient webClient, String username, String password)
            throws MalformedURLException, IOException {
    WebRequest requestSettings = new WebRequest(new URL(URL_BASE+"Login"), HttpMethod.POST);
    requestSettings.setRequestParameters(new ArrayList());
    requestSettings.getRequestParameters().add(new NameValuePair("user", username));
    requestSettings.getRequestParameters().add(new NameValuePair("pass", password));

    Page page = webClient.getPage(requestSettings);
    String jsonText = page.getWebResponse().getContentAsString();
    testLogger.log(Level.INFO, jsonText);
    return jsonText;
}

Тест не пройден и выдает мне FailingHttpStatusCodeException в этой строке внутри метода входа в систему:

Page page = webClient.getPage(requestSettings);

Поскольку я сам не писал тест и не до конца понимал его код, я не могу сказать, почему он не работает, но он проходит, когда в моем сервлете нет if-else и, вместо этого, всегда выполняйте оператор else.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 ноября 2018

Плохо, я делал

request.getParameter("mode").equals("html")

где "request.getParameter (" mode ")" может возвращать ноль, если параметр не установлен, тогда вызывать .equals для нулевого результата.

Почему он не выдал мне исключение NullPointerException в трассировке стека ??

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