会话超时时重定向到<error-page> </error-page>

时间:2013-08-07 16:56:31

标签: java servlets session-timeout

我有一个在WebLogic服务器上运行的标准J2EE Web应用程序。我想通过web.xml中的元数据设置来处理会话超时。我尝试使用以下设置

<error-page>
    <error-code>408</error-code>
    <location>/jsp/testErrorPage.jsp</location>
  </error-page>

然而它没有用。

2 个答案:

答案 0 :(得分:1)

以下是408请求超时的说明,

  

Web服务器(运行Web站点)认为

之间的时间间隔太长      
      
  1. 在客户端(例如您的Web浏览器或我们的CheckUpDown机器人)与服务器之间建立IP连接(套接字)
  2.   
  3. 收到该套接字上的任何数据,因此服务器已断开连接。
  4.   

例如,假设您正在尝试登录。但是,由于某些原因,没有收到任何数据。 然后是408请求超时。

但在你的情况下,你正在尝试处理会话超时。这意味着,客户端尚未与服务器建立连接 在一段特定的时间内(例如,30分钟)。意味着,你在没有做任何活动的情况下闲置30分钟。 这就是会话超时的含义。

要处理会话超时,您必须在web.xml中包含以下代码

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

以上代码表示如果您闲置30分钟,您的会话将被销毁。

此外,您必须编写一个实现HttpSessionListener的自定义侦听器,并将其配置为web.xml中的listeners 当您的会话超时时,将执行此代码。您可以尝试使用HttpSessionListener#sessionDestroyed方法重定向到错误页面。

如果此解决方案不是您想要的,而是您正在寻找实际解决408错误的根本原因,那么fixing 408 errors页面可能会有所帮助。

答案 1 :(得分:0)

会话超时是服务器端事件,并且没有直接的方式来通知浏览器服务器端会话超时。意思是,浏览无法在没有任何请求的情况下获得响应。这就是HTTP的工作原理。

通常实现的方法之一如下:

  1. 在浏览器上有一些基于javascript的功能,通过Ajax Call定期检查服务器端会话。
  2. 如果会话仍然有效,请不执行任何操作。
  3. 如果会话超时,则将用户重定向到所需的页面。