【问题标题】:request.getSession() vs getThreadLocalRequest().getSession()request.getSession() 与 getThreadLocalRequest().getSession()
【发布时间】:2011-09-07 10:24:55
【问题描述】:

有什么区别

request.getSession() 

getThreadLocalRequest().getSession()

我维护的应用程序似乎将第一个用于直接 Servlet,第二个用于通过 GWT-RPC 实现的任何东西,它本身扩展了 servlet。

【问题讨论】:

    标签: java session servlets thread-local


    【解决方案1】:

    它们都返回相同的东西。 GWT 只是将 servlet 发送的请求存储到本地线程中,这样您就不需要在每个方法调用中传递它,并且每次调用仍然有一个单独的 request

    【讨论】:

    • request 来自哪里?我目前正在使用 JSP 进行编码,并试图弄清楚如何访问它。 (我对此完全陌生。)
    • JSP 可以自动访问request 变量,您应该可以立即执行<%= request. getRequestURL() %> 之类的操作。
    • 阿卜杜拉·吉巴利,成功了!谢谢!现在,如何从我的 JSP 文件调用的 .java 类文件中访问请求?编辑:我可以传递结果。我需要访问request.getSession(true)。但是有没有更好的方法让 Java 方法访问它?
    • 如果它只是一个普通的 Java 类(不是 servlet),那么获取会话的唯一方法就是传入它。
    • 好的,所以最终它总是存在的,如果它是一个 servlet?它不是由代码创建的,它是由会话本身创建的? (也许措辞不好。)
    【解决方案2】:

    getThreadLocalRequest() 是获取 HttpServletRequest 的便捷方法。

    request.getSession() 和 getThreadLocalRequest().getSession() 返回相同的 HttpSession 不同之处在于获取 HttpServletRequest 的方式。

    【讨论】:

      【解决方案3】:

      主要原因是您在 GWT Servlet 中使用了自己的 RPC 方法,这些方法没有将 HTTPRequest 作为参数 - 与标准 Servlet 方法 doGet(...)、...、doXYZ(...) 形成对比。因此,访问HTTPRequest 的唯一方法是提供GWT 的RemoteServiceServletgetThreadLocalRequest(),您通常应该扩展它。

      【讨论】:

        【解决方案4】:

        区别在于范围。具体来说,请求变量只能直接从doGet(..)doPost(..) 等方法范围(在方法内部)获得。一旦您所在的线程退出方法并进入您的 biz 方法doSomething() 等,您的代码将无法再访问请求变量(范围已更改),但getThreadLocal..() 允许您获得访问权限而不管方法如何你在,当然你和doGet()在同一个线程中,等等。

        【讨论】:

          猜你喜欢
          • 2016-12-12
          • 2015-09-07
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-04
          • 2018-01-23
          • 2015-06-23
          相关资源
          最近更新 更多