如果所有控制器都是单例,Spring何时创建HTTPSession

发布于 2024-11-05 01:44:32 字数 418 浏览 3 评论 0原文

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

但是,当我将 LoginController 设置为 Session 作用域控制器时,就会调用 sessionCreated 。我想知道 Spring 控制器如何管理 HttpSession 。另外,另一个问题是,假设来自浏览器的第一个请求到达 LoinController 并创建 HttpSession - 然后从该浏览器到不同控制器(这是单例)的后续请求将使用相同的 HTTPSession 还是无状态?有人可以帮忙吗?

I am learning Spring 3 and trying to understand when is HTTPSession created and what is the lifecycle. All my controllers are singleton (which is by default) and I have configured a HttpSessionListener. I observed that sessionCreated is never getting invoked.

But when I make my LoginController as Session scoped controller then the sessionCreated gets invoked. I want to know how is the HttpSession managed by spring controllers. Also, another question is lets say first request from borowser comes to LoinController and creates the HttpSession - then does the subsequent requests from that browser to different controller(which is singleton) would be using the same HTTPSession or woule it be stateless? Can someone please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡の花香 2024-11-12 01:44:32

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

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

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

Controllers are singleton and stateless. The dispatcher servlet invokes the desired controller method and passes the session to it. The session is obtained by the dispatcher servlet by calling request.getSession(). Since it is s normal servlet, the container "gives" it the request and response that any servlet obtains on each request.

That said, a servlet is also singleton (it has one instance per context). And multiple threads (= requests) are invoking its methods.

And a final note - session-scoped beans are rarely needed. In my experience you can have a whole application without any session-scoped beans.

空心空情空意 2024-11-12 01:44:32

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

A session associates a number of HTTP requests, so once it's created for a user the servlet engine maintains it either using cookies or URL rewriting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文