如果所有控制器都是单例,则在创建HTTPSession时弹出

时间:2011-05-03 21:24:39

标签: spring spring-mvc controller

我正在学习Spring 3并试图了解何时创建HTTPSession以及生命周期是什么。我的所有控制器都是单例(默认情况下),我已经配置了HttpSessionListener。我发现永远不会调用sessionCreated

但是当我将LoginController作为Session范围控制器时,会调用sessionCreated。我想知道弹簧控制器如何管理HttpSession。另外,另一个问题是让来自borowser的第一个请求来LoinController并创建HttpSession - 然后从该浏览器到不同控制器(单身)的后续请求将使用相同的HTTPSession或它是无国籍的吗?有人可以帮忙。

2 个答案:

答案 0 :(得分:3)

控制器是单例和无状态的。调度程序servlet调用所需的控制器方法并将会话传递给它。调度程序servlet通过调用request.getSession()获取会话。因为它是普通的servlet,所以容器“给”它任何servlet在每个请求上获得的请求和响应。

也就是说,servlet也是单例(每个上下文都有一个实例)。并且多个线程(=请求)正在调用其方法。

最后一点 - 很少需要会话范围的bean。根据我的经验,您可以拥有一个没有任何会话范围的bean的整个应用程序。

答案 1 :(得分:0)

会话关联了许多HTTP请求,因此一旦为用户创建了该请求,servlet引擎就会使用cookie或URL重写来维护它。