如何处理会话超时异常(使用 MVP 地点和活动)?
Posted
技术标签:
【中文标题】如何处理会话超时异常(使用 MVP 地点和活动)?【英文标题】:How to handle a session timeout exception (with MVP Places and Activities)? 【发布时间】:2011-08-01 19:40:58 【问题描述】:您如何处理 GWT 应用程序中的超时请求? 这是我的 web.xml 文件的片段:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
我的 GWT 项目基于 MVP 活动和地点。 每当用户等待超过 3000 万时,我想显示一个弹出窗口并将用户重定向到登录页面。这就是我所做的 所有 RPC 服务:
public void onFailure(Throwable caught)
...
if (caught instanceof InvocationException)
Window.alert("Time out de session. Veuillez vous reconnecter. 2");
Window.open(GWT.getHostPageBaseURL() + "identification.html", "_self", null);
return;
...
它可以工作,但有几件事很烦人: 1)捕获的异常应该是RequestTimeoutException。但它没有被捕获,这就是我使用 InvocationException 的原因。 怎么没抓到? 2)如何以更通用的方式处理此异常?必须在所有 RPC 服务中捕获该异常有点愚蠢...... 我读到了一些 AsyncCallbackAdapter 类...... 3)现在我只处理 RPC 服务,但当然超时异常无处不在:链接、按钮、页面刷新...... 我正在使用 MVP 地点和活动。 当用户试图去某个地方时,有没有办法捕获该异常?
感谢您的帮助
【问题讨论】:
【参考方案1】:RequestTimeoutException
在服务器无响应时抛出。
您应该创建自己的已检查异常,例如 SessionTimeoutException
并在您的客户端代码中处理它。 GWT 知道如何处理(序列化)已检查的异常并将它们传递给您的客户端代码:http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#exceptions
要以应用程序范围的方式处理此问题,您可以通过为远程服务创建自己的生成器来挂钩 RPC 机制:How to redirect to login page after session expire in GWT RPC call
最简单的方法(不更改所有现有代码)是设置Timer
以定期检查(每隔几分钟)服务器会话。当会话超时时显示模式DialogBox
(防止用户在其他小部件上输入)通知用户他/她需要再次登录。
【讨论】:
以上是关于如何处理会话超时异常(使用 MVP 地点和活动)?的主要内容,如果未能解决你的问题,请参考以下文章