我的JSP位置是src/webcontent/WEB-INF/jsp/sessionTimeout.jsp。SendRedirect后未找到JSP
在我从一个过滤器执行如下的sendRedirect后没有找到它。我已经尝试了这些组合:
((HttpServletResponse)response).sendRedirect("/WEB-INF/jsp/sessionTimeout.jsp");
((HttpServletResponse)response).sendRedirect("sessionTimeout.jsp");
((HttpServletResponse)response).sendRedirect("jsp/sessionTimeout.jsp");
((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath() + "/jsp/sessionTimeout.jsp");
404错误。代码:
public class SpringMVCControllerFilter implements Filter
{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
if (session.isValid() && !session.isNew())
{
chain.doFilter(request, response);
}
else
{ ((HttpServletResponse)response).sendRedirect("jsp/sessionTimeout.jsp");
}
}
}
对不起,我一开始并不清楚。我们的结构是src/webcontent/WEB-INF/...,所以我相信应该找到它。我编辑了原文。我有一个解决方案,出于某种原因,而这一个没有,见下面我的答案。 –
Web内容在您的源项目中构成Web应用程序的根目录。您的解决方案可以工作,因为它将当前请求分发(转发)到JSP。重定向与前向完全不同:它要求浏览器向JSP发送新请求。由于它无法从外部访问,因此失败。 –
那么为什么所有关于此主题的示例都给出sendRedirect(“/ page.jsp”),其中每个人都将其JSP放置在通常不可访问的WEB-INF位置?我已经看到了数以千计的sendRedirect示例,根本不会这么做。 –