2016-02-25 95 views
0

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


    } 
} 

回答

1

WEB-INF下的所有內容都是無法從外部訪問的。把它放在你喜歡的任何地方,除非你想從瀏覽器訪問它。

由於JSP是視圖,因此JSP通常置於WEB-INF下,並且請求應始終發送給準備模型並調度到視圖的控制器。

+0

對不起,我一開始並不清楚。我們的結構是src/webcontent/WEB-INF/...,所以我相信應該找到它。我編輯了原文。我有一個解決方案,出於某種原因,而這一個沒有,見下面我的答案。 –

+1

Web內容在您的源項目中構成Web應用程序的根目錄。您的解決方案可以工作,因爲它將當前請求分發(轉發)到JSP。重定向與前向完全不同:它要求瀏覽器向JSP發送新請求。由於它無法從外部訪問,因此失敗。 –

+0

那麼爲什麼所有關於此主題的示例都給出sendRedirect(「/ page.jsp」),其中每個人都將其JSP放置在通常不可訪問的WEB-INF位置?我已經看到了數以千計的sendRedirect示例,根本不會這麼做。 –

0

這終於爲我工作:

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。