我想要的是从我的应用程序的任何一点访问当前的HttpServlerRequest + HttpServletResponse + HttpSession +一些其他重要的信息,如用户数据和用户的首选项。目前我正在创建一个特殊对象 MyServletContext ,然后将其作为第一个参数传递给我所有对象的所有方法。我想摆脱这个参数,但我不确定最好的方法是什么。
我的一个想法是创建一个全局缓存,我将当前线程存储的 MyServletContext 存储起来。每当我需要存储在 MyServletContext 中的任何信息时,我都会调用这个缓存,它会找到正确的对象。我知道我需要使这个缓存线程安全,我知道如何做到这一点。 问题是:有没有更好的方法呢?
答案 0 :(得分:3)
我曾经为此目的使用ThreadLocal。创建HttpFilter,将HttpRequest放入ThreadLocal并在代码中的任何位置使用它。
答案 1 :(得分:3)
使用ThreadLocal
是达到此目的的典型方法,但它确实不是一个好选择。
在任何地方传递整个背景也是不可取的。
最好的做法是仅将参数传递给所需的数据。因此,您不会使服务层依赖于Web层。而且它更容易测试。