2015-02-09 24 views
0

我想构建一个html页面,当我输入它时,它会将我重定向到另一个页面,具体取决于会话中的属性。javascript - 处理来自http响应的重定向

如果在会话中有一个名为“username”的属性,它不会重定向我,否则它会。

为了做到这一点,我写了一个javascript函数,它调用一个java servlet来检查属性是否存在。

<script type="text/javascript"> 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
      var data = req.responseText; 
     } 
     document.write(req.readyState); 
    } 
    req.open('POST','sessionCheck',true); 
    req.send(null); 
</script> 

在servlet的代码是:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    HttpSession hs = request.getSession(); 
    String username = (String) hs.getAttribute("username"); 
    if (username == null) 
      response.sendRedirect("/login.html"); 

} 

我知道resonse确实发送重定向,但该网页不重定向。

*注意:我正在使用Eclipse Java EE for Web Developers。

谢谢!

+0

您必须检查回应,然后决定是否重定向。重定向将使用JavaScript而不是服务器Servelet – Hunsu 2015-02-09 14:04:33

回答

1

Javascript AJAX请求遵循重定向。很可能您的JavaScript代码最终要求您希望将浏览器重定向到的页面。

尝试返回页面重定向到您的响应,然后让浏览器导航到该页面。

你可以看到XMLHttpRequest standard指出重定向将遵循:

HEADERS_RECEIVED(数值2)

所有重定向(如果有的话)进行了跟踪,并最终响应的所有HTTP头已收到。该对象的几个响应成员现在可用。

+0

谢谢,但我最终做了其他事情:我使用response.senderror(401),并声明“login.html”页面作为此错误的处理程序。 – Yuval 2015-02-09 15:53:25

+0

使用状态码来指示问题是理想的解决方案。 – 2015-02-09 15:57:52