我上传了一些带有用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(" Refresh"," 5; URL = http://lXXXXX/login.htm");在重定向下面,但没有运气。 任何人都可以帮我解决这个问题。
有一个解决方法,而不是发送302我发送901我正在检查js并指示登录工作正常,但我打算使用重定向。
答案 0 :(得分:1)
那么,请求是使用JS而不是同步使用Web浏览器异步触发的?换句话说,您尝试重定向 ajax 请求?
如果您要发送重定向作为对ajax请求的响应,那么XMLHttpRequest
默认情况下只会遵循该重定向。即它会将ajax请求重新发送到该URL。这显然不是你想要的。您需要同步重定向,而不是异步重定向。
规范方法是以某种方式指示ajax引擎,它需要对给定的URL执行window.location
调用。如果您使用JSON或XML作为数据格式,那么您只需添加一个特殊指令,然后您的ajax引擎就可以检查。
E.g。如果是JSON:
response.getWriter().printf("{redirect:\"%s\"}", url);
var response = fireAjaxRequestAndGetResponseAsJsonSomehow();
if (response.redirect) {
window.location = response.redirect;
return;
}
// Usual process continues here.