2012-02-19 2 views
1

В первой строке моей страницы JSP я проверяю, что значение сеанса равно null. Если null перенаправить обратно на страницу входа.JSP - выход, выполняющий остальную часть кода

Когда я протестировал его путем регистрации и проверил эту страницу, он дал ошибку org.apache.jasper.JasperException: java.lang.NullPointerException.

Итак, как выйти из кода сразу после строки sendRedirect?

Код:

<% 
    if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user"))) 
    { 
     response.sendRedirect("login.jsp"); 

     //prevent executing rest of code. 
    } 
%> 

<html> 
    <head> 
    ....... 

Для выхода из системы, я использую только: session.invalidate();

+0

Вместо response.sendRedirect ... использовать ...... Это будет напрямую перенаправить вас на страницу входа без выполнения остальной код ... –

+1

Я нашел проблему. У меня есть тег jsp: include на этой странице. Если пользователь недействителен, страница, которая должна включать этот тег, не была предоставлена. Теперь я включил условие, чтобы проверить, является ли сеанс нулевым. Если null, избегайте этого тега. Это сработало. –

+0

Отличный !! Добавьте этот ответ здесь ... так что ppl будет, по крайней мере, сперма до того, что было prblm .... –

ответ

1

Ваш код JSP эквивалентно:

if (someCondition) { 
    redirect(); 
} 
doPlentyOfOtherThings(); 

Если вы не хотите, чтобы сделать много других вещей, код должен быть

if (someCondition) { 
    redirect(); 
} 
else { 
    doPlentyOfOtherThings(); 
} 

Так это должно выглядеть так:

<% 
    if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user"))) 
    { 
     response.sendRedirect("login.jsp"); 
    } 
    else 
    { 
%> 
<html> 
    <head> 
    ....... 
<% } %> 

Кроме того, что

  • Вы не должны использовать скриптлеты, но JSP EL и JSTL на страницах JSP
  • такая логика не должна быть в JSP, которая должна только генерировать разметку. Он должен быть в сервлете действия вашей предпочтительной структуры MVC, которая перенаправляет или отправляет JSP.
+0

благодарю за объяснение. –

0

После этого еще несколько отладки, я нашел место, где эта проблема вызывает.

У меня есть тег jsp: include. И в основном коде, я только назначил страницу для включения, если пользователь действителен (вошел в систему). Таким образом, когда пользователь выходит из системы, этот тег все еще пытался его включить (я использовал переменную для передачи имени файла).

Что я добавил:

<% 
    if(session.getAttribute("user_type")!=null) 
    { 
%> 
     <jsp:include.... /> 
<% 
    } 
%> 

Теперь этот тег JSP не будет рассматриваться во время выполнения, когда пользователь не является действительным.

0

Да. Просто добавьте следующую строку:

if (true) return; 
Смежные вопросы