有人可以帮助我吗?
如何在某些方法或java类的构造函数中将会话或请求对象从servlet传递给java类。
SERVLET:
HttpSession session = request.getSession(true);
我想将此会话对象传递给java类,有些人告诉我如何检索和使用。
Java类
公共类ProductsCart {
private Map<Integer, Integer> productsInCart=new HashMap<Integer,Integer>();
public Map<Integer, Integer> storeProductsInCart(int productId, int count) {
...
}
如何在此课程中使用会话对象?
提前致谢。 安州
答案 0 :(得分:-1)
你的servlet如何直到你到达这个代码(ProductsCart)?可能知道这有助于提供更好的建议。
共享上下文的一种简单方法是 - 如果你的整个请求是在一个线程中处理的(你没有异步调用或者没有产生新的线程),你可以使用本地线程。您需要在一个公共位置声明本地线程,其中ur servlet类和ProductsCart类都具有可见性。
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。新线程将从父线程继承值。但是如果你正在使用线程池或异步调用,这将无效。在这种情况下,最好将其传递给班级。
此外,当你从servlet返回时,请确保将其设置为null,以便其他请求不会在不知不觉中使用它。