【问题标题】:HttpSessionListener in Google Guice web applicationGoogle Guice Web 应用程序中的 HttpSessionListener
【发布时间】:2012-09-25 23:13:45
【问题描述】:

当 Guice Servlet 会话到期时,我需要执行一个操作,该操作将访问 ServletContext 中的项目。 (为什么?要通过打开的 websocket 连接来销毁会话并关闭它们;这些连接保存在 ServletContext 中。)

要在基本的 Servlet Web 应用程序中实现这一点,可以实现 HttpSessionListener 并挂钩到 sessionDestroyed 方法。

对于使用 Google Guice 进行依赖注入的 Web 应用程序,如何实现这一点?

回想能够访问ServletContext的要求;我已经遇到过this forum conversation,但没有发现它有多大帮助。

【问题讨论】:

    标签: java servlets dependency-injection guice servlet-listeners


    【解决方案1】:

    没有添加会话侦听器的“Guice 方式”。可悲的是。但是从会话监听器访问 servlet 上下文没有问题。

    注册会话监听器:

    public class MyServletConfig extends GuiceServletContextListener {
        private Injector    injector;
    
        @Override
        public void contextInitialized(final ServletContextEvent servletContextEvent) {
            injector = Guice.createInjector(new MyAppModule());
    
            registerSessionListeners(servletContextEvent.getServletContext(), injector);
    
            super.contextInitialized(servletContextEvent);
        }
    
        private void registerSessionListeners(final ServletContext servletContext, final Injector injector) {
            servletContext.addListener(injector.getInstance(WebsocketCloser.class));
        }
    
        @Override
        protected Injector getInjector() {
            return injector;
        }
    
    }
    

    访问 servlet 上下文是会话监听器:

    public class WebsocketCloser implements HttpSessionListener {
        @Override
        public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
            // no-op
        }
    
        @Override
        public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
            // do cleanup: httpSessionEvent.getSession().getServletContext();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 2011-07-29
      • 2014-04-05
      • 2012-03-07
      • 2012-02-11
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多