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

时间:2012-07-23 18:02:26

标签: java servlets redirect

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

ajax调用调用与我的servlet页面(servletcontext)不在同一Login的Data.json localhost:8080/servlet/myapp,因此我不能使用servlet前进(我正在使用JBoss 4.2,我只能在同一个servletcontext中转发。)

我尝试使用sendRedirect重定向,该Login能够调用实际执行但未显示的Login页面。这就是我迷路的地方。我的Login页面已执行,我仍然看到第X页。 我试图将返回的HTML(从Content-Type页面)写入第X页的响应(我还将text/html设置为Apache Turbine)。 HTML将在响应中返回,但不会显示。

我正在使用servlet,这是另一个{{1}},可在请求时检索页面。 你有什么想法?我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Ajax调用是异步调用,对ajax调用的sendRedirect调用永远不会有效(ajax响应总是向启动器发送响应)。

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