【问题标题】:How to make the page load an error page after the tomcat session timeout?Tomcat会话超时后如何使页面加载错误页面?
【发布时间】:2014-07-30 03:20:02
【问题描述】:

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

这是我的文件夹结构

【问题讨论】:

  • 根应用程序在webapps/ROOT 下而不是在 webapps 下。你不应该把你的 WEB-INF 放在 webapps 下。
  • 使用 response.sendRedirect("/error/error.jsp");并发布您的地址栏完整 URL
  • @Tusar:这是网址。 localhost:8080/google-drive-lti/service。我正在使用 response.sendRedirect("/error/error.jsp");但仍然没有运气
  • @developerwjk:webapps目录下有WEB-INF有什么问题?
  • @developerwjk:根应用程序在 webapps/ROOT 下,而不是在 webapps 下?你是什​​么意思?我很困惑。

标签: jsp session tomcat servlets servlet-filters


【解决方案1】:
localhost:8080/error/error.jsp

在这里您可以看到 Context 名称不在 url 中。

试试(去掉'/')

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

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

【讨论】:

  • 我也厌倦了这个 request.getSession().getServletContext().getRequestDispatcher("/view/error.jsp").forward(request, response);还是不行
  • 只需创建一个简单的 servlet 并从中转发/重定向。或发送您的源代码(仅限所需文件)。 trytusa@gmail.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2011-11-18
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多