Я пытаюсь реализовать простую форму:

Есть глобальное имя и глобальный пароль, и пользователю предлагается ввести свое имя и пароль.

If name == globalname and pass = globalpass -> "Hello name"
If name == blank or pass == blank -> "O NOEZ, you fergit sumpn!"
If name != globalname or pass != globalpass -> "WHUT? Who be you, intruder?"

Пока мне удается получить только первый if-working...

<% 
  String name = request.getParameter("name");
  String pass= request.getParameter("pass");
  String globalname = "webeng";
  String globalpass = "2009";
  if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
   {
%>
    <jsp:include page="formular-modul1.jsp" />
<% } else
   {
%>
<% }
%>

<%
 else if (name =="b" && pass =="c" && name.equals("b") && pass.equals("c"))
  {
%>
    <jsp:include page="formular-modul2.jsp" />
<%} else
    {
%>
<%
}%>

Имя=="b" && pass =="c" было предназначено только для тестовых целей, что не удалось! Может кто-нибудь помочь мне, пожалуйста?

1
Grumpy ol' Bear 15 Ноя 2009 в 20:06
ОП продолжился в другой теме: stackoverflow.com /вопросы/1738294/…
 – 
BalusC
15 Ноя 2009 в 21:45

2 ответа

Строки являются объектами, а не примитивами. При использовании == для сравнения объектов будет возвращено значение true, только если оба они указывают на одну и ту же ссылку. Он не проверяет значение объекта. Там у вас уже есть Object#equals() для.

Помимо этой проблемы, использование этих старомодных скриптлетов в файле JSP является признаком плохой практики. В этом конкретном случае вам лучше использовать для этого класс Servlet. Удачи.

2
BalusC 15 Ноя 2009 в 20:10
Я только начинаю с JSP. Я буду использовать сервлеты, когда дойду до этого. Сейчас мне нужно использовать скриптлеты. Даже если (name.equals("b") && pass.equals("c")) это не работает!
 – 
Grumpy ol' Bear
15 Ноя 2009 в 20:15
Трудно обнаружить ошибку, когда вы используете уродливые скриптлеты и не подробно описываете реальную проблему. «это не работает» не дает нам практически ничего, с чем можно было бы работать. Я рекомендую создать класс Java, который выполняет эту задачу, и протестировать его с помощью main(). Или вы можете приложить немного больше усилий для разработки проблемы и рассказать, что на самом деле происходит на уровне кода (включая исключения/ошибки).
 – 
BalusC
15 Ноя 2009 в 20:20
О, не забудьте прочитать журналы сервера приложений. Поскольку вы используете скриптлеты, вы не увидите никаких исключений с полезной отладочной информацией на странице, а просто пустую страницу, ничего не говорящую в случае сбоя. Мои центы на NullPointerException.
 – 
BalusC
15 Ноя 2009 в 20:22

Теперь он работает.

<% 
  String name = request.getParameter("name");
  String pass = request.getParameter("pass");
  String globalname = "webeng";
  String globalpass = "2009";
  if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
   {
   %>
    <hr />
    <p><b>Howdy, <%= request.getParameter("name") %></b></p>
    <hr />
<% }
  else if (name !=null | pass!=null && name.equals("") | pass.equals(""))
  {
  %>
    <hr />
    <p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p>
    <hr />
<% }
  else if (name !=null | pass!=null && !name.equals(globalname) | !pass.equals(globalpass))
  {
  %>
    <hr />
    <p><b>Incorrect Userdata!</b></p>
    <hr />
<% }
  else{
  }
%>

Теперь мне нужно использовать .toLowercase.

Означает, что имя и пароль должны быть преобразованы в .toLowercases, ТОГДА использоваться. У кого-нибудь есть идеи? Просто используя newname = name.toLowercase(); или newpass = pass.toLowercase(); не работает!

0
Grumpy ol' Bear 15 Ноя 2009 в 20:40
Класс String имеет метод equalsIgnoreCase(). Угадайте, что он делает :)
 – 
BalusC
15 Ноя 2009 в 20:46
Кстати, я действительно не буду считать "PaSsWoRd" и "пароль" равными.
 – 
BalusC
15 Ноя 2009 в 20:47
Я бы тоже не стал. Этот .jsp не считает «пароль» и «PaSsWoRd» равными. Если globalpassword является паролем, то PaSsWoRd возвращает «Неверные данные пользователя!»
 – 
Grumpy ol' Bear
15 Ноя 2009 в 20:50
String#toLowercase() дает новую строку. Потому что строки неизменяемы. Это должно работать нормально, если вы присвоите .toLowercase() новой переменной. В приведенном выше коде вы используете операторы |, которые являются побитовыми ИЛИ и НЕ сокращают условную оценку. Вам нужен логический оператор ИЛИ ||.
 – 
rsp
15 Ноя 2009 в 20:50
Тогда какой смысл делать pass.toLowercase() ? Просто не делай этого. Кстати, если у вас все еще есть проблемы, вам действительно нужно уточнить «не работает!» подробнее подробно.
 – 
BalusC
15 Ноя 2009 в 20:51