如何处理会话超时异常(使用 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 地点和活动)?的主要内容,如果未能解决你的问题,请参考以下文章

过滤器如何处理会话

使用 Mockito 的 GWT MVP 测试用例,包含活动和地点以及 GIN

java 异常不处理会怎么样

Python多重处理会在不退出文件的情况下失去活动性

同一函数中的异常处理会使编译时间减慢 2 倍以上,为啥?

为啥多处理会减慢嵌套的 for 循环?