java - 在我使用它之前,如何跟踪每个 servlet 请求的 session ?单例不会工作?

标签 java google-app-engine session servlets

对于我收到的每个 servlet 请求,我可能会通过 10 个方法,然后我需要检查 session 中的某些内容并且我需要 HttpSession。

我能获得 HttpSession 的唯一方法是从 HttpServletRequest,对吗?

如何跟踪每个 servlet 请求的 session ?不幸的是,我不能简单地创建一个单例(例如,SessionInformation.instance().getAttribute("name")),因为该 session 将用于所有请求。

有没有办法为每个请求全局存储 session ,而不必将它(或它的信息)传递给所有方法,以防万一我需要它?

更新 1:

Alohci 把我推向了正确的方向。我需要的东西可以:

1) 设法仅通过线程全局存储变量。 “单线程”解决方案?

2) 或者 servlet 获得的每个线程/请求是否有唯一的 ID?如果有,是什么?

最佳答案

How do I keep track of the session for each servlet request?

服务器通过在浏览器上保存 session ID 的 cookie 标记用户来识别用户。在服务器上, session 是您放置在客户端/服务器交互期间需要跟踪的数据的位置(以向应用程序提供状态)。

session.setAttribute("name", SerializableObject)

Note: Because App Engine stores session data in the datastore and memcache, all values stored in the session must implement the java.io.Serializable interface.

然后您可以通过执行从 HttpServletRequest 中获取 session

request.getSession()

参见 javadoc:here

在 servlet 中检索 session 后,您可以使用 session.getAttribute("name") 检索您感兴趣的任何数据以跟踪交互。

Is there a way to store the session globally for each request

当唯一具有访问 session 的 ID 是收到带有该 session ID 的请求的 servlet 时,为什么要全局存储它。并非您的应用程序中的所有内容都需要了解每个请求。

下面是一个带有 session ID cookie 的 请求 示例:

GET /something.htm HTTP/1.1     
Accept: www/source     
Accept: text/html     
Cookie: sessid=123456789

您不能全局存储此信息,它对每个请求都是唯一的。

Without having to pass it

当用数据做有用的事情时,不要将 session 传递给你的方法,传递有用的信息,比如用户名、购物车内容等。

HttpSession session = request.getSession() //inside a servlet
String userName = session.getAttribute("name");
List<ShoppingItems> items= session.getAttribute("cart");

MakeTheUserPay(userName, items) //no session passing here

您的业务逻辑方法甚至不应该知道 session 是什么。它更像是一件人工制品。

关于java - 在我使用它之前,如何跟踪每个 servlet 请求的 session ?单例不会工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869741/

相关文章:

java - JFrame打不开

php - session 过期后自动注销用户

java - 带有 <path>/</path> 和 JSESSIONID 的 cookie

google-app-engine - 如何将结构数据放入go-lang的数据存储中

python - 如何设计内存和计算密集型程序以在 Google App Engine 上运行

node.js - 请求之外的 session 、验证和操作

java - 如何用Slick2D创​​建圆弧?

java - 如何在 AWT 中关闭窗口?

Java表模型设计

python - GeoIP 与谷歌应用引擎和 python