Java Google Guice web应用程序中的HttpSessionListener

Java Google Guice web应用程序中的HttpSessionListener,java,servlets,dependency-injection,guice,servlet-listeners,Java,Servlets,Dependency Injection,Guice,Servlet Listeners,我需要执行一个操作,当Guice Servlet会话过期时,该操作将访问中的项。(为什么?检查要销毁的会话的打开的websocket连接并关闭它们;这些连接保存在ServletContext中) 为了在基本的Servlet web应用程序中实现这一点,需要实现一个and,并将其挂接到sessionDestroyed方法中 对于使用依赖注入的web应用程序,如何实现这一点 回想一下能够访问ServletContext的要求;我已经遇到过,但没有发现它有什么帮助。没有添加会话侦听器的“Guice方法

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

为了在基本的Servlet web应用程序中实现这一点,需要实现一个and,并将其挂接到
sessionDestroyed
方法中

对于使用依赖注入的web应用程序,如何实现这一点


回想一下能够访问
ServletContext
的要求;我已经遇到过,但没有发现它有什么帮助。

没有添加会话侦听器的“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;
    }

}
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();
    }
}
访问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;
    }

}
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();
    }
}