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

时间:2016-08-12 03:57:54

标签: java

有人可以帮助我吗?

如何在某些方法或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) {

...

}

如何在此课程中使用会话对象?

提前致谢。 安州

1 个答案:

答案 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,以便其他请求不会在不知不觉中使用它。