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

标签 java

有人可以帮助我吗?

如何在 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/

相关文章:

java - 设计方法(领域驱动或服务驱动)

c# - 如何根据URL检查文件创建日期?

java - 在我的自定义 Listview Android ==> 空指针异常..?

java - Freemarker:如何在表达式中指定值 "null"?

java - ORA-01830 : date format picture ends before converting entire input string - JAVA/Oracle

java - TestNG:@BeforeClass 方法失败时会跳过所有后续测试类吗?

java - AsyncTask 传递自定义对象

java - 错误 ORA-01858。 Java 用不同的语言抛出错误消息

java - getExternalStorageDirectory 和 getExternalStoragePublicDirectory 之间的区别?

java - 用于 Java EE Web 应用程序的可扩展 UI 框架