在Java中获取当前会话对象

Man*_*oor 10 java session servlets

我可以从不存在请求对象的函数中访问会话对象吗?

我知道在Java中我们访问这样的会话:

HttpSession session = request.getSession(true);
Run Code Online (Sandbox Code Playgroud)

但是如果我们想要在请求对象不存在时访问会话呢?

可能吗?是否有另一种获取会话对象的方法?

编辑

我有一个servlet

public class ABC extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
             ..........
             ...........
        myFun1(x,y,z);  
    }

      private void myFun1(int x, int y,long z)
      {
            .........
            myFun2(a,b);    
       }

      private void myFun2(int a,String b)
      {
            .........

            //      Need Session here
       }

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

这取决于"当请求对象不存在时"的含义.你可以有一个线程局部变量,它在servlet的早期设置"当前对这个线程的请求"或者你正在运行的任何东西(你还没有说清楚).然后你可以从任何地方得到"这个线程中的当前请求",并以这种方式获得会话.(或者沿着相同的行,您可以在线程局部变量中设置当前会话而不是当前请求.)

但它并不是非常漂亮,如果你想在不同的线程上做某事,你就会遇到问题.将请求或会话作为依赖项传递通常更清晰.


che*_*vim 6

一般来说不过,如果你想从一个地方访问HTTP会话在请求对象不可用,那么你可能在你的应用程序设计的问题,你需要重新思考的担忧,压条等.