会话如何在@SessionScoped
CDI bean中定义?
该注释是否仅在会话以HttpSession
的形式良好定义的Servlet容器中调用时有效?
如果不是,那么具有@Inject @SessionScoped MyBean myBean
的EJB如何知道会话真正是什么?我的意思是,这个EJB的方法可以由独立的客户端、RESTful WS或其他视图调用。在这种情况下应该发生什么?如果注释没有意义,它应该为每个请求注入新的MyBean
实例,还是应该在所有请求中保留相同的实例?
取自@SessionScoped规范
会话范围是活动的:
在web应用程序中任何servlet的service()方法中,在任何servlet过滤器的doFilter()方法中,当容器调用任何httpessionlistener、AsyncListener或ServletRequestListener .
所以简而言之,是的。它被绑定到HttpSession。还:
会话上下文在发生的所有servlet请求之间共享在同一个HTTP会话中。时销毁会话上下文HTTPSession超时,在所有httpessionlisteners都完成之后调用,并且在invalidate()所在的任何请求的最后在所有过滤器和ServletRequestListeners都被调用之后调用。