java - Google Guice Web 应用程序中的 HttpSessionListener

标签 java servlets dependency-injection guice servlet-listeners

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

要在基本 Servlet Web 应用程序中实现这一目标,需要实现 HttpSessionListener并 Hook 到 sessionDestroyed 方法。

对于使用 Google Guice 的 Web 应用程序如何实现这一目标用于依赖注入(inject)?

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

最佳答案

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

注册 session 监听器:

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上下文是 session 监听器:

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

关于java - Google Guice Web 应用程序中的 HttpSessionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735376/

相关文章:

java - 如何从我的 java servlet 访问重定向的 URL?

java - Java 应用程序主页上的服务器名称

flutter - 提供商与 Get_it

javascript - 将一个服务(工厂)注入(inject)另一个服务(工厂),两者都是异步的

java - 我如何在 Intellij 中运行 java 卡小程序?

java - Java 中通用签名的区别

java - 是否可以在不同物理服务器上的 oracle 数据库和 postgresql 数据库之间使用数据库链接

java - 如何使用 java 程序最好地处理数据库中的简单列替换?

java - ServletResponse.setBufferSize 在 Tomcat 7 中不起作用?

java - MentaContainer 上的自动布线不起作用?