Java 虽然位置具有正确的url,但未发生重定向

Java 虽然位置具有正确的url,但未发生重定向,java,servlets,redirect,Java,Servlets,Redirect,我用java编写的上传功能上传了一些图片。一旦上传正在进行,就会有一个gif来显示进度条。现在,当会话超时时,我将重定向到登录页面 if (StringUtils.isNotBlank(request.getQueryString())) { queryString = request.getServletPath() + "?" + request.getQueryString(); } else { queryString = request.

我用java编写的上传功能上传了一些图片。一旦上传正在进行,就会有一个gif来显示进度条。现在,当会话超时时,我将重定向到登录页面

    if (StringUtils.isNotBlank(request.getQueryString())) {
        queryString = request.getServletPath() + "?" + request.getQueryString();
    } else {
        queryString = request.getServletPath();
    }

    LOGGER.debug("Query String:" + queryString);
    if (!StringUtils.equalsIgnoreCase(StringUtils.substringAfterLast(queryString, ApplicationConstants.DOT),
                    ApplicationConstants.JSON)) {
        request.getSession().setAttribute(ApplicationConstants.QUERY_STRING, queryString);
    }
    try {
        LOGGER.error("In navigateToLandingPage. Redirecting to Failure View:" + this.getFailureView());
        response.sendRedirect(request.getContextPath() + "/" + this.getFailureView());
       // response.setHeader("Refresh", "5; URL=http://XXXX/login.htm");
    } catch (IOException e) {
        throw new BusinessException("Exception in redirecting", "-1", this.getClass().getCanonicalName(), e);
    }
当我在浏览器中分析网络时,我可以看到302状态的响应,并且该位置具有预期的URL,但有些响应没有得到处理,并停留在进度条屏幕上。 如果我手动刷新卡住的页面,我将被引导到我尝试添加的登录页面 response.setHeader(“刷新”,“5;URL=”);下面的重定向,但没有运气。 有谁能帮我做这件事吗


有一种解决方法,我不是发送302,而是发送901,我在js上检查它,并定向到登录,它工作正常,但我打算使用重定向。

那么,请求是使用js异步触发的,而不是使用web浏览器同步触发的?换句话说,您试图重定向一个ajax请求

如果您将重定向作为对ajax请求的响应发送,那么默认情况下,
XMLHttpRequest
将遵循该重定向。也就是说,它将向该URL重新发送ajax请求。这显然不是你想要的。您需要的是同步重定向,而不是异步重定向

规范的方法是以某种方式指示ajax引擎对给定URL执行
window.location
调用。如果您使用JSON或XML作为数据格式,那么只需添加一条特殊指令,ajax引擎就可以检查该指令

例如,在JSON的情况下:

response.getWriter().printf("{redirect:\"%s\"}", url);

您是否在使用ajax?如果是,302由浏览器处理,JS将看不到。解决方法是,如您所述,返回不同的状态代码并在js.@M.Deinum中处理它-谢谢我这样做了,正如我前面提到的那样,我发送了901,是的,您是对的,我现在收到了,因为re direct发送了302,我无法在js上读取它。我现在将关闭此:)
var response = fireAjaxRequestAndGetResponseAsJsonSomehow();

if (response.redirect) {
    window.location = response.redirect;
    return;
}

// Usual process continues here.