我需要在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>
这是我的文件夹结构
答案 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);