Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение объекта из сессии / 19 сообщений из 19, страница 1 из 1
25.04.2005, 14:04
    #33033327
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
Что-то у меня сегодня опять трудности.
Задача: получить из сессии объект, а если такового нет, т. е. сессия потеряна, то делать редирект на страницу с ошибкой.
Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<!DOCTYPE HTML  PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<META http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<%@ page contentType="text/html;charset=Windows-1251" language="java" %>
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<TABLE width="100%"  border="0">
  <TR>
    <TD width="16%" valign="top">
        Пользователь: <BR>
        Организация:<BR>
        Телефон:<BR>
        Электронная почта:
    </TD>
    <TD width="84%" valign="top">
        <%
            UserBean bean = (UserBean) session.getAttribute("Bean");
             if  (bean ==  null ) {
                RequestDispatcher rd = request.getRequestDispatcher("/NoSessionError.jsp");
                rd.forward(request, response);
            }
        %>
        <%=bean.getUserName()%><BR>
        <%=bean.getUserOrganization()%><BR>
        <%=bean.getUserTelephone()%><BR>
        <%=bean.getUserEmail()%>
    </TD>
  </TR>
</TABLE>
</BODY>
</HTML>
В итоге, если сессия действительно была потеряна, то получаю не редирект, а ошибку 500 с таким текстом:
type Exception report

message
description The server encountered an internal error () that prevented it from fulfilling this request.

exception
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause
java.lang.NullPointerException
org.apache.jsp.UserInfo_jsp._jspService(UserInfo_jsp.java:75)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
Где и что я делаю не так? И как надо?
...
Рейтинг: 0 / 0
25.04.2005, 14:13
    #33033359
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
А если вместо
Код: plaintext
1.
RequestDispatcher rd = request.getRequestDispatcher("/NoSessionError.jsp");
rd.forward(request, response);
поставить
Код: plaintext
<jsp:forward page="NoSessionError.jsp" />
то все работает.
Почему?
...
Рейтинг: 0 / 0
25.04.2005, 14:15
    #33033371
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
И если оставить первоначальный вариант, но закоментировать строки:
Код: plaintext
1.
2.
3.
        <%=bean.getUserName()%><BR>
        <%=bean.getUserOrganization()%><BR>
        <%=bean.getUserTelephone()%><BR>
        <%=bean.getUserEmail()%>
то тоже все работает.
...
Рейтинг: 0 / 0
25.04.2005, 14:21
    #33033391
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
я тут новичек, но возможно скрипт обрабатывает

Код: plaintext
1.
2.
3.
4.
        <%=bean.getUserName()%><BR>
        <%=bean.getUserOrganization()%><BR>
        <%=bean.getUserTelephone()%><BR>
        <%=bean.getUserEmail()%>

в любом случае, и соответственно при

Код: plaintext
bean ==  null 

вываливается с ошибкой...

(?)
...
Рейтинг: 0 / 0
25.04.2005, 14:22
    #33033393
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
типа эта, else надо вкрячить...
...
Рейтинг: 0 / 0
25.04.2005, 14:25
    #33033403
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
а так если?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<!DOCTYPE HTML  PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<META http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<%@ page contentType="text/html;charset=Windows-1251" language="java" %>
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<TABLE width="100%"  border="0">
  <TR>
    <TD width="16%" valign="top">
        Пользователь: <BR>
        Организация:<BR>
        Телефон:<BR>
        Электронная почта:
    </TD>
    <TD width="84%" valign="top">
        <%
            UserBean bean = (UserBean) session.getAttribute("Bean");
             if  (bean ==  null ) {
                RequestDispatcher rd = request.getRequestDispatcher("/NoSessionError.jsp");
                rd.forward(request, response);
            }
        else {%>
        <%=bean.getUserName()%><BR>
        <%=bean.getUserOrganization()%><BR>
        <%=bean.getUserTelephone()%><BR>
        <%=bean.getUserEmail()%>
       <%}%>
    </TD>
  </TR>
</TABLE>
</BODY>
</HTML>
...
Рейтинг: 0 / 0
25.04.2005, 14:31
    #33033432
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
Вообще-то у меня с самого начала возникала такая мысль (вставить else), но она была отвергнута как бредовая :)
Тем более когда заработало с jsp: forward без всяких else.
Сейчас я попробовал все-таки этот вариант и все заработало.
А кто-нибудь мне может объяснить почему все так происходит? Ведь компилятор изначально не знает нулевой объект или нет.
...
Рейтинг: 0 / 0
25.04.2005, 14:33
    #33033435
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
А может просто return поставить вот здесь:
Код: plaintext
1.
2.
3.
4.
5.
6.
 if  (bean ==  null ) {
                RequestDispatcher rd = request.getRequestDispatcher("/NoSessionError.jsp");
                rd.forward(request, response);
                 return ;       
     }

...
Рейтинг: 0 / 0
25.04.2005, 14:35
    #33033442
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMaxВообще-то у меня с самого начала возникала такая мысль (вставить else), но она была отвергнута как бредовая :)
Тем более когда заработало с jsp: forward без всяких else.
Сейчас я попробовал все-таки этот вариант и все заработало.
А кто-нибудь мне может объяснить почему все так происходит? Ведь компилятор изначально не знает нулевой объект или нет.
не знает потому и проверку необходимо ставит if else,либо выход return
...
Рейтинг: 0 / 0
25.04.2005, 14:35
    #33033443
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMaxА кто-нибудь мне может объяснить почему все так происходит? Ведь компилятор изначально не знает нулевой объект или нет.
дело не в компиляторе - код сам по себе не содержит ошибок.
тут просто ошибка логики, поэтому поломка происходит только на стадии выполнения скрипта, а именно, когда
Код: plaintext
bean ==  null 
...
Рейтинг: 0 / 0
25.04.2005, 14:42
    #33033461
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
Все. До меня дошло! :) Он сначала видимо пытается отобразить всю страницу, а потом уже делает редирект.
Всем спасибо. Буду исползовать jsp: forward, красивее получается.
P.S. Вариант с return вижу впервые. Не вижу никакой логики, чтобы это работало, но работает.
...
Рейтинг: 0 / 0
25.04.2005, 14:49
    #33033483
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMaxВсе. До меня дошло! :) Он сначала видимо пытается отобразить всю страницу, а потом уже делает редирект.
Всем спасибо. Буду исползовать jsp: forward, красивее получается.
P.S. Вариант с return вижу впервые. Не вижу никакой логики, чтобы это работало, но работает.
Так пишут книги,в частности Дейтел,и логика по-моему есть
...
Рейтинг: 0 / 0
25.04.2005, 15:01
    #33033538
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
ИМХО. Определение: return - возвращает результат работы метода. Я здесь никакого метода не вижу. Может после компиляции он и есть конечно :) Но у меня такой код вызывает только недоумение.
...
Рейтинг: 0 / 0
25.04.2005, 15:56
    #33033723
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMaxИМХО. Определение: return - возвращает результат работы метода. Я здесь никакого метода не вижу. Может после компиляции он и есть конечно :) Но у меня такой код вызывает только недоумение.
А
Код: plaintext
 return   NULL ;
разве не является возвратом результата???
...
Рейтинг: 0 / 0
25.04.2005, 16:02
    #33033742
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
Sehensucht! (потерял пароль) GMaxИМХО. Определение: return - возвращает результат работы метода. Я здесь никакого метода не вижу. Может после компиляции он и есть конечно :) Но у меня такой код вызывает только недоумение.
А
Код: plaintext
 return   NULL ;
разве не является возвратом результата???Конечно является. В моем посте ключевое слово "Метод". Просто я не вижу здесь явного метода, поэтому и говорю, что для меня этот код нелогичен.
...
Рейтинг: 0 / 0
25.04.2005, 16:03
    #33033749
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMaxПросто я не вижу здесь явного метода, поэтому и говорю, что для меня этот код нелогичен.
просто надо знать, что контент jsp вставляется (грубо говоря) в метод
_jspService() соот. класса :)
...
Рейтинг: 0 / 0
25.04.2005, 16:04
    #33033750
Sehensucht! (потерял пароль)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
шИрше мыслить надо, Товарисч! ширЕе, так сказать :)

и это... хорош флудить ;)
...
Рейтинг: 0 / 0
25.04.2005, 16:06
    #33033763
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
А.Грасоff™ JE GMaxПросто я не вижу здесь явного метода, поэтому и говорю, что для меня этот код нелогичен.
просто надо знать, что контент jsp вставляется (грубо говоря) в метод
_jspService() соот. класса :)
Я конечно догадывался, что он вставляется в какой-то метод. Вот только в какой не знал. Теперь знаю. Но его же явно не видно, правильно? :) Ну да ладно...
...
Рейтинг: 0 / 0
25.04.2005, 16:10
    #33033774
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение объекта из сессии
GMax А.Грасоff™ JE GMaxПросто я не вижу здесь явного метода, поэтому и говорю, что для меня этот код нелогичен.
просто надо знать, что контент jsp вставляется (грубо говоря) в метод
_jspService() соот. класса :)
Я конечно догадывался, что он вставляется в какой-то метод. Вот только в какой не знал. Теперь знаю. Но его же явно не видно, правильно? :) Ну да ладно...

тебе томкэт признался, что за метод:

type Exception report

message
description The server encountered an internal error () that prevented it from fulfilling this request.

...

root cause
java.lang.NullPointerException
org.apache.jsp.UserInfo_jsp._jspService(UserInfo_jsp.java:75)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение объекта из сессии / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]