JSP+Struts:处理 AJAX 调用中的会话超时

Posted

技术标签:

【中文标题】JSP+Struts:处理 AJAX 调用中的会话超时【英文标题】:JSP+Struts: Handle session timeout in AJAX calls 【发布时间】:2013-01-20 08:18:24 【问题描述】:

我正在通过我的 JS 方法进行 ajax 调用,以通过以下方式调用动作类的方法:

$.getJSON("treeDemo_!getRootNode?appId=" + applicationId, function () 
    ).success(function (e) 
    ).error(function (jqXHR, textStatus, errorThrown) 
        alert(textStatus);
    ).complete(function () 
    );

我的 web.xml 中的会话配置如下所示

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

现在当会话在 1 分钟后过期时,ajax 调用返回错误(不调用 action 方法)。错误说

textStatus = parsererror
errorThrown = SyntaxError: JSON.parse: unexpected character

但这看起来像是一般错误。我想捕获会话超时异常并将用户重定向到 login.jsp 页面以防发生此异常。

我什至尝试通过 this 来处理它。但这对我不起作用。

你能建议我应该如何解决它吗?

【问题讨论】:

【参考方案1】:

没有“会话超时异常”。

您的 Ajax 调用期望返回 JSON,如果会话超时,您的应用中没有任何内容会返回 JSON。使用链接中的过滤器或拦截器,检查会话超时,如果是正常请求则正常处理,但如果是 Ajax 请求则返回 HTTP 错误代码。

在您的 javascript 回调中处理此错误代码。

【讨论】:

谢谢戴夫。但是就像我提到的那样,我按照这些步骤并以与链接中提到的完全相同的方式创建了一个过滤器。但是当会话超时时,控件不会达到理想状态下的doFilter()(我猜)。由于我正在进行 AJAX 调用,我认为这可能是过滤器无法正常工作的原因。有什么帮助吗? @DarkKnightFan 除非你错误地定义了你的过滤器,否则它不能“到达过滤器”,比如把它放在 S2 过滤器之后。

以上是关于JSP+Struts:处理 AJAX 调用中的会话超时的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 struts 中的 ajax 更新 jsp 页面上的内容时出现问题(触发 onChange 事件时)

从Struts JSP中的会话中获取Map值

处理 ajax 调用中的会话超时

如何从 Ajax 或 JavaScript 调用 Struts1 Action?

SpringMVC中jsp怎么调用controller中的某个方法

如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组