我正在学习Spring 3并试图了解何时创建HTTPSession以及生命周期是什么。我的所有控制器都是单例(默认情况下),我已经配置了HttpSessionListener
。我发现永远不会调用sessionCreated
。
但是当我将LoginController
作为Session
范围控制器时,会调用sessionCreated
。我想知道弹簧控制器如何管理HttpSession
。另外,另一个问题是让来自borowser的第一个请求来LoinController
并创建HttpSession
- 然后从该浏览器到不同控制器(单身)的后续请求将使用相同的HTTPSession或它是无国籍的吗?有人可以帮忙。
答案 0 :(得分:3)
控制器是单例和无状态的。调度程序servlet调用所需的控制器方法并将会话传递给它。调度程序servlet通过调用request.getSession()
获取会话。因为它是普通的servlet,所以容器“给”它任何servlet在每个请求上获得的请求和响应。
也就是说,servlet也是单例(每个上下文都有一个实例)。并且多个线程(=请求)正在调用其方法。
最后一点 - 很少需要会话范围的bean。根据我的经验,您可以拥有一个没有任何会话范围的bean的整个应用程序。
答案 1 :(得分:0)
会话关联了许多HTTP请求,因此一旦为用户创建了该请求,servlet引擎就会使用cookie或URL重写来维护它。