有人可以帮助我吗?
如何在 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/