在tomcat会话超时后如何使页面加载错误页面?

时间:2014-06-09 14:45:04

标签: jsp session tomcat servlets servlet-filters

我需要在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

1 个答案:

答案 0 :(得分:0)

localhost:8080/error/error.jsp

您可以在此处看到网址中不存在上下文名称。

尝试(删除&#39; /&#39;)

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

OR

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