2014-01-22 5 views
0

Я пытаюсь использовать пример HttpSessionBindingListener, и события не срабатывают. Что я делаю неправильно здесь.Методы HttpSessionBindingListner, которые не называются

Вот код для класса Attribute, который я пытаюсь установить, и код для класса сервлета.

Сервлет работает, но не отображает вывод, который я ожидаю.

public class SimpleAttribute implements HttpSessionBindingListener { 

     PrintWriter writer; 

     public SimpleAttribute(PrintWriter writer) { 
      this.writer = writer; 
     } 

     public void valueBound(HttpSessionBindingEvent event) { 
      writer.write("Value bound called"); 
      writer.write("<br/>"); 
     } 

     public void valueUnbound(HttpSessionBindingEvent event) { 
      writer.write("value Unbound called"); 
      writer.write("<br/>"); 


} 
} 




public class SessionBindingServlet extends HttpServlet { 

    private static final String SIMPLEATTR = "simpleattribute"; 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws IOException { 

     ServletContext servletContext = getServletContext();    
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     try { 
      servletContext.removeAttribute(SIMPLEATTR); 
      out.write("removed previous attribute successfully"); 
      out.write("<br/>"); 
     } catch (Exception e) { 

     } 

     servletContext.setAttribute(SIMPLEATTR, new SimpleAttribute(out)); 
     out.write("Added simple attribute successfully"); 
     out.write("<br/>"); 
    } 
} 
+0

Что вы ожидаете и что видите? –

+1

использовать HttpSessionAttributeListener вместо HttpSessionBindingListener – fmodos

+0

Вы зарегистрировали прослушиватель в 'web.xml'? –

ответ

2

Вы на самом деле не связан объект с HttpSession, вы обязаны его к ServletContext.

Вы должны быть извлекая HttpSession с

HttpSession session = request.getSession(true); 

и добавив атрибут

session.setAttribute(SIMPLEATTR, new SimpleAttribute(out)); 

Это будет активироваться HttpSessionBindingEvent который будет оповещать ваш HttpSessionBindingListener реализующий объект класса.

0

Есть много проблем в вашем коде:

  • HttpSessionBindingListener уведомляется, если объект, который реализует интерфейс связан/несвязанные к сессии, а не другие объекты. Если вам необходимо получить информацию об атрибутах set/get on session, вы должны реализовать HttpSessionAttributeListener.
  • Зарегистрировали ли вы ваш слушатель в web.xml?
  • И наконец, HttpSessionAttributeListener получает уведомление об изменениях атрибутов сеанса, не изменяя атрибут сервлета-контекста, если вы хотите, чтобы вы реализовали ServletContextAttributeListener.
Смежные вопросы