Java Google Guice web应用程序中的HttpSessionListener
我需要执行一个操作,当Guice Servlet会话过期时,该操作将访问中的项。(为什么?检查要销毁的会话的打开的websocket连接并关闭它们;这些连接保存在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方法
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();
}
}