powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts - обработка удаления HTTP-сессии
19 сообщений из 19, страница 1 из 1
Struts - обработка удаления HTTP-сессии
    #32959396
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, пользователь заполняет некую форму на веб-странице. По какой-то причине на момент ее 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
Struts - обработка удаления HTTP-сессии
    #32959399
ходок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фильтром?
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32959418
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что в нем ловить? М.б. что-то можно сделать и через HttpSessionListener (ловить факт создания сессии), остается только понять что.
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32959437
ходок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тык саму сессию и ловить:

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
Struts - обработка удаления HTTP-сессии
    #32959439
ходок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно и HttpSessionListener, что более симпатичным решением будет
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32959534
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так интересно знать, а что делать дальше? получается, что в doFilter() надо делать разбор, мол: если в request'е есть форма, а экземпляра именно этой Struts'овской формы нигде нет, поэтому следует идти куда-то, логинится или еще чего...
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32959716
ходок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis PopovТак интересно знать, а что делать дальше? получается, что в doFilter() надо делать разбор, мол: если в request'е есть форма, а экземпляра именно этой Struts'овской формы нигде нет, поэтому следует идти куда-то, логинится или еще чего...редирект сделать куда надо обычными средствами?
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32959729
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Теперь требуется сформулировать условия, когда редиректить, а когда пропускать. Получается примерно следующее: редиректить надо, если

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

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

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

Что-то тут смущает, м.б. есть какой способ через сам Struts.
вот насчет штратса ничего не могу сказать - для меня знатоком его
являешься ты :)
а если стандартными средствами, то этими тремя условиями можно
обойтись.
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32960298
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я делаю так так:
юзер логиниться, его session и другие данные добавляется в свой Bean(extends EventListener). Потом в своем RequestProcessor делается центральная проверка для всех Action в методе process, если юзер не зарегестрирован и находится не на login.jsp и не на relogin.jsp, то forward перенаправляет его на relogin.jsp.
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32960450
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вполне вероятно не правильно попурейтеться get ы и set ы
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32960529
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.
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32960554
дежавю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Struts - обработка удаления HTTP-сессии
    #32960598
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дежавю слушай. ты как посты читаешь, а? никого не интересует твое понимание
поста и его смысла. всех интересует твой ответ на вопрос, заданный
автором поста:

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

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

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

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

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

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

А где указывается свой RequestProcessor, можно пример?
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32960746
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 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
Struts - обработка удаления HTTP-сессии
    #32961016
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Насколько я понимаю, в своем RequestProcessor'е можно переопределять методы типа processActionPerform(), в котором имеется доступ в текущим действиям и форме? Тогда, действительно, это удобнее фильтра.

Вдогонку, а каково положение дел у Tiles? Последняя новость в tiles-documentation датируется ноябрем 2002, или эта библиотека воплотилась во что-то другое?
...
Рейтинг: 0 / 0
Struts - обработка удаления HTTP-сессии
    #32961130
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сначала вызывается метод 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
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts - обработка удаления HTTP-сессии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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