response.sendRedirect( )无效-原因及解决

在整理项目时遇到response.sendRedirect()无效的问题。当未登录尝试重定向到登录页面时,浏览器没有响应。解决方法是在js中创建judge.js文件,实现返回顶层窗口的功能,并在后端拦截器中进行相应修改,从而成功实现页面跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天整理项目,记录一下遇到的问题。
代码:

if (request.getSession().getAttribute("login") == null || !((boolean) (request.getSession().getAttribute("login")))) {
            response.sendRedirect("http://ip:8080/HTML_TTMS/html/Login.html");//ip为服务器ip地址,在此用ip代指
            return false;
}

按照平时表单提交的练习习惯,这没有什么问题,如果未登录,重定向到登录页面;拦截器的preHandle()返回false,不再继续请求的处理,直接返回,然后浏览器会重新请求重定向的url。然而浏览器那边却什么反应也没有,直到看到这篇博客,原来Ajax只是利用脚本访问对应url获取数据,不能做除了获取返回数据以外的其它动作。所以浏览器端是不会发起重定向的。
参考博客
解决:
在js下面新建一个judge.js文件,然后放如下代码:

! function () {
    $.ajaxSetup( {
        //设置ajax请求结束后的执行动作
        complete : function(XMLHttpRequest, textStatus) {
            // 通过XMLHttpRequest取响应头中信息,判断是否是重定向
            var redirect = XMLHttpRequest.getResponseHeader("REDIRECT");
            if (redirect == "REDIRECT") {
                alert("未登录,请先登录");//提示
               window.top.location.href= XMLHttpRequest.getResponseHeader("PATH");//取出路径,重定向
            }
        }
    });
}();

window.top
功能:返回顶层窗口,即浏览器窗口。
如果窗口本身就是顶层窗口,top属性返回的是对自身的引用。
然后在每一个html中引入js,引入的时候放在其他js的下面,否则可能不起作用。

<script type="text/javascript" src="../js/judge.js"></script>

后端拦截器相应代码改成:

if (request.getSession().getAttribute("login") == null || !((boolean) (request.getSession().getAttribute("login")))) {
            response.setHeader("REDIRECT","REDIRECT");//告诉ajax要重定向
            response.setHeader("PATH","http://ip:8080/HTML_TTMS/html/Login.html");//ip为服务器ip地址,在此用ip代指
            return false;
}

这样,就可以成功跳转了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值