我想知道我们是否可以将会话属性和参数从 JSP 传递到 GWT 入口点。
就像我将 Struts2 与 GWT 集成一样。
现在,我的问题是,我们可以将会话属性从 JSP 传递到 GWT 入口点吗?提前致谢。
我不明白你为什么要传递会话对象,毕竟你想在里面使用它GWT Servlet
而不是在里面,GWT UI
对吗?
您可以通过以下方式获取 GWT Servlet 中的会话对象:
HttpServletRequest request = this.getThreadLocalRequest();
HTTPSession session = request.getSession();
之后,您可以使用以下方法来获取和设置会话属性:
session.setAttribute("XXX", object);
session.getAttribute("XXX")
编辑:
我认为没有直接的解决方案,解决方法如下:
在来自onModuleLoad
GWT 的调用服务器端代码的入口点中,它将有权访问session
对象。
HttpServletRequest request = this.getThreadLocalRequest();
HTTPSession session = request.getSession();
从 session 对象中获取你想要的属性和参数,并以 bean 的形式返回给客户端。
答案是 JSP + GWT Dictionary 类。
使用 JSP(而不是 html 文件)作为宿主文件,在 GWT 加载模块后随时调用 Dictionary 类。
<script>
var info = {js object structure}; // Use Dictionary class to retrieve info.
</script>
但是将会话信息传递到入口点可能并不有利。乞求的问题是,当会话到期而 GWT 客户端仍在浏览器上时会发生什么?
我想您可以检查是否会话过时,您可以调用 window.location 来刷新 GWT 客户端。这不是一个好习惯。使用 AJAX 的原因之一是在进行客户端-服务器数据交换时不必说对不起(我的意思是,不必刷新页面)。
您应该通过JSP+Dictionary 方式将各种静态信息从服务器传递到客户端,但不能用于会话。
您的架构应该强制在会话到期时重新进行身份验证,并且会话信息应该作为标头携带(如果您使用 REST 或 RequestBuilder)或作为回调响应数据结构的一部分携带(如果使用 RPC)。
在我的应用程序中,我在 jsp 中使用了隐藏框:
<input type="hidden" id="dir_lat" value="<%= request.getattribute("foo") %>"/>
然后获取 gwt.application 中的值:
String foo = ((InputElement) doc.getElementById("dir_lat")).getValue() ;