gpt4 book ai didi

Java-如何将 session 或请求对象从 servlet 传递到 java 类?

转载 作者:行者123 更新时间:2023-12-02 07:41:23 24 4
gpt4 key购买 nike

有人可以帮助我吗?

如何在 Java 类的某些方法或构造函数中将 session 或请求对象从 servlet 传递到 java 类。

SERVLET:

HttpSession session = request.getSession(true);

我想将这个 session 对象传递给java类,有人告诉我如何检索和使用。

Java 类

公共(public)类ProductsCart {

private Map<Integer, Integer> productsInCart=new HashMap<Integer,Integer>();

public Map<Integer, Integer> storeProductsInCart(int productId, int count) {

……

}

如何在此类中使用 session 对象?

提前致谢。安居

最佳答案

在到达此代码(ProductsCart)之前,您的流程是如何从 servlet 开始的?可能知道这可以帮助提供更好的建议。

共享上下文的一个简单方法是这样的 - 如果您的整个请求在单个线程中处理(您没有异步调用或不在中间生成新线程),您可以使用本地线程。您需要在 servlet 类和 ProductsCart 类都可见的公共(public)位置声明本地线程。

public class SessionContext {

private static final ThreadLocal<HttpSession> activeSession =
new ThreadLocal<HttpSession>();

public HttpSession getSession () {
return activeSession.get();
}

public void setSession (HttpSession session) {
activeSession.set(session);
}
}

现在您可以从 servlet 类中设置它:

SessionContext.setSession(session);

并且您可以从 ProductsCart 访问它。

HttpSession session = SessionContext.getSession()

每个线程都会有一个线程局部变量的副本,如上所述,只有当您从同一线程执行整个流程时,这才有效。如果您正在生成新线程,您可以尝试 InheritableThreadLocal。新线程将继承父线程的值。但是,如果您使用线程池或异步调用,则这将不起作用。在这种情况下,最好将其传递给类(class)。

此外,当您从 servlet 返回时,请确保将其设置为 null,以便另一个请求不会在不知不觉中使用它。

关于Java-如何将 session 或请求对象从 servlet 传递到 java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com