Servlet重定向不显示请求的页面

问题描述:

我有一个页面 - 让它叫做页面X - 我在那里做一个ajax调用,填充我的表格,用jqGrid构建。所以这里我叫localhost:8080/servlet/ajax/Data.json这是一个servlet。 现在,如果页面过期并且用户仍然想访问表格(例如搜索数据),我想将请求重定向到Login页面。Servlet重定向不显示请求的页面

ajax电话呼叫Data.json servlet不在同一servletcontext作为我Login页面(这是localhost:8080/servlet/myapp),所以我不能使用servlet着(我使用JBoss 4.2和我只能在相同的正向servletcontext)。

我试着重定向sendRedirect,它可以调用Login实际执行但未显示的页面。这就是我迷失的地方。我的Login页面已执行,我仍然看到页面X. 我试图将返回的HTML(从Login页面)写入页面X的响应中(我也将Content-Type设置为text/html)。 HTML会在响应中返回,但不会显示。

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

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

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

它看起来像你的servlet在servlet/ajax/Data.json告诉AJAX请求重定向到登录页面。然后页面将尝试使用登录页面呈现jqGrid表格,这可能不起作用。

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