【发布时间】:2011-09-07 10:24:55
【问题描述】:
有什么区别
request.getSession()
和
getThreadLocalRequest().getSession()
我维护的应用程序似乎将第一个用于直接 Servlet,第二个用于通过 GWT-RPC 实现的任何东西,它本身扩展了 servlet。
【问题讨论】:
标签: java session servlets thread-local
有什么区别
request.getSession()
和
getThreadLocalRequest().getSession()
我维护的应用程序似乎将第一个用于直接 Servlet,第二个用于通过 GWT-RPC 实现的任何东西,它本身扩展了 servlet。
【问题讨论】:
标签: java session servlets thread-local
它们都返回相同的东西。 GWT 只是将 servlet 发送的请求存储到本地线程中,这样您就不需要在每个方法调用中传递它,并且每次调用仍然有一个单独的 request。
【讨论】:
request 来自哪里?我目前正在使用 JSP 进行编码,并试图弄清楚如何访问它。 (我对此完全陌生。)
request 变量,您应该可以立即执行<%= request. getRequestURL() %> 之类的操作。
request.getSession(true)。但是有没有更好的方法让 Java 方法访问它?
getThreadLocalRequest() 是获取 HttpServletRequest 的便捷方法。
request.getSession() 和 getThreadLocalRequest().getSession() 返回相同的 HttpSession 不同之处在于获取 HttpServletRequest 的方式。
【讨论】:
主要原因是您在 GWT Servlet 中使用了自己的 RPC 方法,这些方法没有将 HTTPRequest 作为参数 - 与标准 Servlet 方法 doGet(...)、...、doXYZ(...) 形成对比。因此,访问HTTPRequest 的唯一方法是提供GWT 的RemoteServiceServlet 的getThreadLocalRequest(),您通常应该扩展它。
【讨论】:
区别在于范围。具体来说,请求变量只能直接从doGet(..)、doPost(..) 等方法范围(在方法内部)获得。一旦您所在的线程退出方法并进入您的 biz 方法doSomething() 等,您的代码将无法再访问请求变量(范围已更改),但getThreadLocal..() 允许您获得访问权限而不管方法如何你在,当然你和doGet()在同一个线程中,等等。
【讨论】: