Скрипт останавливает запуск сайта

у меня есть скрипт на моем index.jsp, что скрипт должен делать, так это получать информацию из "session.getAttribute" и отображать в div, но index.jsp все равно должен работать, даже если ни один пользователь не вошел в систему

вот сценарий

<div class="templatemo_content_left_section">
40:  <h1>Bem Vindo</h1>

40:  <%= session.getAttribute("currentSessionUser")%>
41:   <%if (session.getAttribute("currentSessionUser").equals("")){%>
42: <a href="Login.jsp"><b>Login</b></a>
43:<%}
44: else{%>
45:<a href="logout.jsp"><b>Logout</b></a>
46:<%
47:}
48:%>

журнал, который я получаю, говорит об ошибке "сообщение. Произошло исключение при обработке страницы JSP /Index.jsp в строке 43"


person HugoMonteiro    schedule 15.02.2013    source источник


Ответы (1)


session.getAttribute() возвращает null, если атрибут не существует. Это явно задокументировано . Поэтому очевидно, что если вы вызовете equals() для результата, вы получите исключение NUllPointerException. Вместо этого сравните результат с нулевым значением:

 <%if (session.getAttribute("currentSessionUser") == null)

Или, что еще лучше, используйте JSP EL и JSTL. Скриптлетов следует избегать:

<c:choose>
    <c:when test="${empty sessionScope.currentSessionUser}">
        <a href="Login.jsp"><b>Login</b></a>
    </c:when>
    <c:otherwise> 
        <a href="logout.jsp"><b>Logout</b></a>
    </c:otherwise>
</c:choose>
person JB Nizet    schedule 15.02.2013
comment
Спасибо за быстрый ответ. Плохая школа все еще учит старым путям, но теперь у меня другая проблема, она возвращает login.UserBean@5b42b86d, а не имя пользователя, есть идеи, как ее решить? - person HugoMonteiro; 16.02.2013
comment
Это означает, что у вас есть объект типа login.UserBean, хранящийся в этом атрибуте сеанса. Получите имя от этого объекта: UserBean userBean = (UserBean) session.getAttribute("currentSessionUser"); String userName = userBean.getName();. С EL было бы намного проще: ${sessionScope.currentSessionUser.name}. Пожалуйста, попросите своих учителей научить вас вещам, которые не устаревают уже более 12 лет. - person JB Nizet; 16.02.2013
comment
Конечно. Весь код Java в JSP должен быть внутри скриптлетов. Но в хорошо спроектированном приложении в JSP вообще не должно быть кода Java. - person JB Nizet; 16.02.2013
comment
Я поговорю со своими учителями, чтобы они обновили себя, потому что, насколько я могу судить, они даже не занимаются программированием. Большое спасибо за вашу помощь. - person HugoMonteiro; 16.02.2013
comment
Извините, я проверил ваш код, и он подтверждается, но не показывает имя пользователя, какой тег я использую, чтобы показать его? - person HugoMonteiro; 16.02.2013
comment
out.println(userName); или <%= userName %>. Перечитайте свой текст. Написание чего-либо в ответ — это действительно базовая вещь, которая, вероятно, объяснена в первых частях раздела о JSP и скриптлетах. - person JB Nizet; 16.02.2013
comment
я решил это с помощью ‹p›Добро пожаловать, ‹c:out value=${currentSessionUser.username} /›‹/p›, больше не буду вас беспокоить, большое спасибо за помощь, которую вы мне оказали;) - person HugoMonteiro; 16.02.2013