Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts - обработка удаления HTTP-сессии / 19 сообщений из 19, страница 1 из 1
14.03.2005, 17:20
    #32959396
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Допустим, пользователь заполняет некую форму на веб-странице. По какой-то причине на момент ее submit'а сессии уже не существует. В результате у меня на экране выводится примерно следующее сообщение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
javax.servlet.ServletException: BeanUtils.populate
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:796)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Причем ошибка возникает раньше попадания в метод Action.execute(). Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?
...
Рейтинг: 0 / 0
14.03.2005, 17:21
    #32959399
ходок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
фильтром?
...
Рейтинг: 0 / 0
14.03.2005, 17:33
    #32959418
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
А что в нем ловить? М.б. что-то можно сделать и через HttpSessionListener (ловить факт создания сессии), остается только понять что.
...
Рейтинг: 0 / 0
14.03.2005, 17:39
    #32959437
ходок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
тык саму сессию и ловить:

SomeFilter.java
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
   public   void  doFilter(ServletRequest request, ServletResponse response, FilterChain next) {
...
    HttpServletRequest h = (HttpServletRequest) request;
    HttpSession s = h.getSession(false);
     if  (s ==  null ) {
      //session damaged || not exists
    }
...
  }
...
...
Рейтинг: 0 / 0
14.03.2005, 17:40
    #32959439
ходок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
можно и HttpSessionListener, что более симпатичным решением будет
...
Рейтинг: 0 / 0
14.03.2005, 18:24
    #32959534
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Так интересно знать, а что делать дальше? получается, что в doFilter() надо делать разбор, мол: если в request'е есть форма, а экземпляра именно этой Struts'овской формы нигде нет, поэтому следует идти куда-то, логинится или еще чего...
...
Рейтинг: 0 / 0
14.03.2005, 20:10
    #32959716
ходок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Denis PopovТак интересно знать, а что делать дальше? получается, что в doFilter() надо делать разбор, мол: если в request'е есть форма, а экземпляра именно этой Struts'овской формы нигде нет, поэтому следует идти куда-то, логинится или еще чего...редирект сделать куда надо обычными средствами?
...
Рейтинг: 0 / 0
14.03.2005, 20:22
    #32959729
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Ага. Теперь требуется сформулировать условия, когда редиректить, а когда пропускать. Получается примерно следующее: редиректить надо, если

- session.isNew();
- в request'е форма;
- это не форма логина.

Что-то тут смущает, м.б. есть какой способ через сам Struts.
...
Рейтинг: 0 / 0
15.03.2005, 09:14
    #32960025
дежавю
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Denis PopovАга. Теперь требуется сформулировать условия, когда редиректить, а когда пропускать. Получается примерно следующее: редиректить надо, если

- session.isNew();
- в request'е форма;
- это не форма логина.

Что-то тут смущает, м.б. есть какой способ через сам Struts.
вот насчет штратса ничего не могу сказать - для меня знатоком его
являешься ты :)
а если стандартными средствами, то этими тремя условиями можно
обойтись.
...
Рейтинг: 0 / 0
15.03.2005, 11:17
    #32960298
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
я делаю так так:
юзер логиниться, его session и другие данные добавляется в свой Bean(extends EventListener). Потом в своем RequestProcessor делается центральная проверка для всех Action в методе process, если юзер не зарегестрирован и находится не на login.jsp и не на relogin.jsp, то forward перенаправляет его на relogin.jsp.
...
Рейтинг: 0 / 0
15.03.2005, 12:03
    #32960450
mansch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
вполне вероятно не правильно попурейтеться get ы и set ы
...
Рейтинг: 0 / 0
15.03.2005, 12:30
    #32960529
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
javax.servlet.ServletException: BeanUtils.populate
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java: 495 )
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java: 796 )
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java: 203 )
	org.apache.struts.action.ActionServlet.process(ActionServlet.java: 1192 )
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 430 )
	javax.servlet.http.HttpServlet.service(HttpServlet.java: 709 )
	javax.servlet.http.HttpServlet.service(HttpServlet.java: 802 )

авторПричем ошибка возникает раньше попадания в метод Action.execute(). Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?

форма заполняется перед вызовом Action.execute(), поэтому если session истекла или по другой причине больше не существует, то и формы тоже нет, отсюда и Exception.
...
Рейтинг: 0 / 0
15.03.2005, 12:40
    #32960554
дежавю
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
concat
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
javax.servlet.ServletException: BeanUtils.populate
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java: 495 )
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java: 796 )
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java: 203 )
	org.apache.struts.action.ActionServlet.process(ActionServlet.java: 1192 )
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 430 )
	javax.servlet.http.HttpServlet.service(HttpServlet.java: 709 )
	javax.servlet.http.HttpServlet.service(HttpServlet.java: 802 )

авторПричем ошибка возникает раньше попадания в метод Action.execute(). Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?

форма заполняется перед вызовом Action.execute(), поэтому если session истекла или по другой причине больше не существует, то и формы тоже нет, отсюда и Exception.
слушай. ты как посты читаешь, а? никого не интересует твое понимание
поста и его смысла. всех интересует твой ответ на вопрос, заданный
автором поста:

"Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?"

PS да и термины твои не понятны: "попурейтеться". это че?
...
Рейтинг: 0 / 0
15.03.2005, 12:53
    #32960598
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
дежавю слушай. ты как посты читаешь, а? никого не интересует твое понимание
поста и его смысла. всех интересует твой ответ на вопрос, заданный
автором поста:

"Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?"

PS да и термины твои не понятны: "попурейтеться". это че?

так я уже и ответила как можно.
concatя делаю так так:
юзер логиниться, его session и другие данные добавляется в свой Bean(extends EventListener). Потом в своем RequestProcessor делается центральная проверка для всех Action в методе process, если юзер не зарегестрирован и находится не на login.jsp и не на relogin.jsp, то forward перенаправляет его на relogin.jsp.
насчет попурейты, то это не моё, вы ошиблись автором.
...
Рейтинг: 0 / 0
15.03.2005, 13:07
    #32960641
дежавю
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
concat дежавю слушай. ты как посты читаешь, а? никого не интересует твое понимание
поста и его смысла. всех интересует твой ответ на вопрос, заданный
автором поста:

"Вопрос - можно ли как-нибудь корректно обработать эту ситуацию?"

PS да и термины твои не понятны: "попурейтеться". это че?

так я уже и ответила как можно.
concatя делаю так так:
юзер логиниться, его session и другие данные добавляется в свой Bean(extends EventListener). Потом в своем RequestProcessor делается центральная проверка для всех Action в методе process, если юзер не зарегестрирован и находится не на login.jsp и не на relogin.jsp, то forward перенаправляет его на relogin.jsp.
насчет попурейты, то это не моё, вы ошиблись автором.гы. извини :)
...
Рейтинг: 0 / 0
15.03.2005, 13:29
    #32960711
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
concatя делаю так так:
юзер логиниться, его session и другие данные добавляется в свой Bean(extends EventListener). Потом в своем RequestProcessor делается центральная проверка для всех Action в методе process, если юзер не зарегестрирован и находится не на login.jsp и не на relogin.jsp, то forward перенаправляет его на relogin.jsp.

А где указывается свой RequestProcessor, можно пример?
...
Рейтинг: 0 / 0
15.03.2005, 13:42
    #32960746
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
в struts-config.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<!-- ==================================================================== -->
  <!-- ========== Controller Definitions ================================== -->
  <!-- ==================================================================== -->
  <controller processorClass="bla.bla.bla.myProject.struts.MyProcessor"
    nocache="true"
    contentType="text/html;charset=ISO-8859-1"
    locale="true"/>
и потом,
eсли используется tiles, то public class МyProcessor extends TilesRequestProcessor
если нет, то public class МyProcessor extends RequestProcessor
...
Рейтинг: 0 / 0
15.03.2005, 14:51
    #32961016
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
Спасибо. Насколько я понимаю, в своем RequestProcessor'е можно переопределять методы типа processActionPerform(), в котором имеется доступ в текущим действиям и форме? Тогда, действительно, это удобнее фильтра.

Вдогонку, а каково положение дел у Tiles? Последняя новость в tiles-documentation датируется ноябрем 2002, или эта библиотека воплотилась во что-то другое?
...
Рейтинг: 0 / 0
15.03.2005, 15:24
    #32961130
concat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts - обработка удаления HTTP-сессии
сначала вызывается метод process в RequestProcessor, который ищет подходящую Action в ActionMapping,затем параметрами из request заполняется принадлежащая к Action ActionForm и т.д.
я переписала этот метод таким образом


Код: 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.
 public   class  MyProcessor  extends  TilesRequestProcessor
{
   private   static   final  Logger log = Logger.getLogger (MyProcessor. class );
 
   private   static   final  String LOGIN_ACTION_START   = "loginPage.do";
   private   static   final  String LOGIN_ACTION_PROCESS = "login.do";
   private   static   final  String RELOGIN_PAGE         = "/relogin.jsp";

  // ---------------------------------------------------------------
  // overridden methods of RequestProcessor
  // ---------------------------------------------------------------
 public   void  process (HttpServletRequest request, HttpServletResponse response)  throws  IOException, ServletException
  {
    // check if user is authenticated
     if  (! LoginManager.isAuthenticated (request) &&
          request.getRequestURL ().indexOf (LOGIN_ACTION_PROCESS) == - 1  &&
          request.getRequestURL ().indexOf (LOGIN_ACTION_START) == - 1 ) {
      log.info ("relogin for request page: " + request.getRequestURL ());
      RequestDispatcher dispatcher = request.getRequestDispatcher (RELOGIN_PAGE);
      dispatcher.forward (request, response);
    }
     else  {
      // some code
....

       super .process (request, response);
    }
  }
...
some methods
...
}

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


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