Следующий код пытается определить, какое поле ввода заполнил пользователь с помощью метода getParameter():
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
System.out.println(request.getParameter("userinput"));
if (request.getParameter("userinput") != "userinput")
accessExampleView(request, response);
else
accessServletSubsidiary(request, response);
}
Визуально пытаюсь выяснить, вводил ли пользователь значение в первое поле, или во второе:
Однако каждый раз, когда это выполняется, он указывает на accessExampleView. Я попытался установить логику оператора if на:
if (request.getParameter("userinput") != null)
безрезультатно - первая строка продолжает быть истинной и направляется к методу accessExampleView.
По сути, есть ли лучший способ проверить, какое значение существует в объекте request?
Вот файл JSP, который он использует:
<%@ page language = "java" contentType = "text/html; charset=ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1">
<title>JSP HTML page</title>
</head>
<body>
<form action = "ServletHome" method = "post">
<fieldset name = "f1">
This page communicates with the servlet page via input types.
<br>
<br>
<label>Enter some text: </label>
<input type = "text" name = "userinput">
<input type = "submit" value = "send">
<br>
Enter your age:
<input type = "number" name = "userAge">
<input type = "submit" value = "send">
<br>
</fieldset>
</form>
</body>
</html>




Проблема в том, что вы написали код JavaScript, но скомпилировал его, как если бы это был код Java.
В Яве,
String — это объект.
Когда вы выполняете тест if (objectReference1 != objectReference2) вы
тестирование, чтобы убедиться, что местоположение objectReference1
совпадает с расположением objectReference2.
В вашем случае это записывается как if (request.getParameter("userinput") != "userinput")
Этот тест почти всегда будет верным, независимо от значения, хранящегося в параметре с именем «userinput». Это правда, потому что адрес значения параметра с именем «userinput» почти никогда не будет адресом строки «userinput».
Вполне вероятно, что вы действительно хотите сравнить значение параметра с именем «userinput» со строковым значением «userinput».
Если это так,
вы должны использовать метод equals.
Один из способов сделать этоif ("userinput".equals(request.getParameter("userinput")))
Это предполагает, что значением по умолчанию для «userinput», поданного на странице HTML (возможно, JSP), является значение «userinput».
Да, я должен был заметить это раньше. Довольно хардкорная ошибка нуба с моей стороны. Спасибо за помощь.
Неправильная маркировка @BalusC. Этот вопрос не о том, как сравнивать строки. Речь идет о том, как анализируется запрос POST с точки зрения того, какие значения передаются. Хотя предоставленный ответ устранил мою проблему, безусловно, есть лучший способ проверить значения запросов POST, чем способ, который я показал выше (проверка пустых строк), который является корнем моей проблемы.