0

我有一个页面 - 让我们称之为页面 X - 我在其中进行了一个ajax调用,该调用填充了用jqGrid. localhost:8080/servlet/ajax/Data.json所以在这里我称之为servlet. 现在,如果页面过期并且用户仍然想要访问表(例如搜索数据),我想将请求重定向到Login页面。

ajax调用调用与我的页面(即)不同的 Data.json servlet,因此我不能使用转发(我使用的是 JBoss 4.2,我只能在同一个中转发)。servletcontextLoginlocalhost:8080/servlet/myappservletservletcontext

我尝试使用 重定向sendRedirect,它能够调用Login实际执行但未显示的页面。这就是我迷路的地方。我的Login页面已执行,但我仍然看到页面 X。我试图将返回的 HTML(来自Login页面)写入页面 X 的响应(我也将 设置Content-Typetext/html)。HTML 在响应中返回,但不显示。

我正在使用Apache Turbinewhich 是另一个servlet在请求时检索页面的方法。你有什么想法?我不知道该怎么办。

4

2 回答 2

2

看起来您的 servletservlet/ajax/Data.json正在告诉 AJAX 请求重定向到登录页面。然后该页面将尝试使用登录页面呈现 jqGrid 表,这可能无法正常工作。

您需要在进行 AJAX 调用的位置添加代码,servlet/ajax/Data.json以检查浏览器本身是否需要重定向。如果 servlet 返回 302 重定向作为响应,或者 servlet 返回一个简单的“SESSION EXPIRED”错误,那么浏览器端对 servlet 进行 AJAX 调用的 javascript 知道会话已过期并重定向浏览器进入登录页面。

于 2012-07-23T18:08:32.660 回答
1

Ajax 调用是异步调用,ajax 调用上的 sendRedirect 调用永远不会有效(ajax 响应总是向发起者发送响应)。

您可能需要使用 XMLHttpRequest 状态码找出页面过期时间,然后使用 java 脚本 window.location 将浏览器 url 重置为登录 url。

于 2012-07-23T18:08:46.843 回答