2014-06-09 50 views
-1

我需要在tomcat會話超時後爲用戶提供錯誤頁面。所以處理這個是創建一個過濾器,並添加了一些邏輯來檢測這個,然後我說去錯誤頁面。如何使頁面在tomcat會話超時後加載錯誤頁面?

public void doFilter(ServletRequest arg0, ServletResponse arg1, 
     FilterChain chain) throws IOException, ServletException { 
    M_log.debug("startFilter"); 
    HttpServletRequest request=(HttpServletRequest)arg0; 
    HttpServletResponse response=(HttpServletResponse)arg1; 
    String title = request.getParameter("context_title"); 
    TcSessionData tcSession = (TcSessionData) request.getSession.getAttribute("TcSessionData"); 
    if((title!=null && tcSession==null) || (title==null && tcSession!=null)){ 
     chain.doFilter(request, response); 
    }else if(title==null && tcSession==null) { 
     //response.sendRedirect("/error/error.jsp"); 
     request.getRequestDispatcher("/error/error.jsp").forward(request, response); 
    } 


} 

後會話超時,我看到它是怎麼回事,「如果」邏輯權利,它不轉發/重定向到我的error.jsp文件。它給出了一個404錯誤。我嘗試了頁面的重定向和轉發,但都沒有成功。我厭倦了error.jsp頁面的絕對路徑和相對路徑,但我仍然看到404錯誤,說它無法找到error.jsp頁面。我也試過把error.jsp各個位置放在webapps目錄下還是沒有運氣

我的應用程序只有一個叫做root.jsp的頁面。當會話超時時,應用程序將始終爲root.jsp,並在超時後寫入到error.jsp。

這裏是我的web.xml

<filter> 
     <filter-name>CheckSessionExpirationFilter</filter-name> 
     <filter-class>lti.google.CheckSessionExpirationFilter</filter-class> 
</filter> 
<filter-mapping> 
     <filter-name>CheckSessionExpirationFilter</filter-name> 
     <servlet-name>GoogleDriveLti</servlet-name> 
</filter-mapping> 

<servlet> 
    <servlet-name>GoogleDriveLti</servlet-name> 
    <servlet-class>lti.google.GoogleLtiServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>GoogleDriveLti</servlet-name> 
    <url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

<session-config> 
    <session-timeout>1</session-timeout> <!-- in minutes --> 
    </session-config> 

這裏是我的文件夾結構

enter image description here

+0

根應用程序進入下'web應用/不ROOT' webapps下右。您不應該在webapps下擁有WEB-INF權限。 – developerwjk

+0

使用response.sendRedirect(「/ error/error.jsp」);併發布您的地址欄完整的URL – Tusar

+0

@Tusar:這是URL。 HTTP://本地主機:8080 /谷歌驅動LTI /服務。我正在使用response.sendRedirect(「/ error/error.jsp」);但仍然沒有運氣 – pushya

回答

0
localhost:8080/error/error.jsp 

在這裏你可以看到上下文名稱中不存在的URL。

嘗試(除去 '/')

getServletContext().getRequestDispatcher("/error/error.jsp").forward(request, response); 

OR

getServletContext().getRequestDispatcher("error/error.jsp").forward(request, response); 
+0

我也厭倦了這個request.getSession()。getServletContext ).getRequestDispatcher(「/ view/error.jsp」)。forward(request,response);仍然不起作用 – pushya

+0

只需創建一個簡單的servlet並從中轉發/重定向。或發送您的源代碼(僅限必需的文件)。 [email protected] – Tusar