SendRedirect之后找不到JSP

时间:2016-02-25 19:20:15

标签: jsp tomcat

我的JSP的位置是 src / webcontent / WEB-INF / jsp / sessionTimeout.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");
        }


    }
}

2 个答案:

答案 0 :(得分:1)

WEB-INF下的所有内容都是故意无法从外部访问的。如果您想从浏览器访问它,请将它放在您喜欢的任何地方。

JSP通常放在WEB-INF下,因为JSP是视图,请求应始终转到准备模型并调度到视图的控制器。

答案 1 :(得分:1)

这最终对我有用:

request.getRequestDispatcher("/WEB-INF/jsp/sessionTimeout.jsp").forward(request, response);

虽然原始帖子没有,但下面的组合都没有工作(sendRedirect没有):

((HttpServletResponse)response).sendRedirect("/WEB-INF/jsp/sessionTimeout.jsp");
((HttpServletResponse)response).sendRedirect("sessionTimeout.jsp");
((HttpServletResponse)response).sendRedirect("jsp/sessionTimeout.jsp");

我将使用RequestDispatcher,但仍然不确定为什么sendRedirect总是无法重定向到JSP。