2014-06-09 48 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