栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

request.getSession(false)导致java.lang.IllegalStateException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

request.getSession(false)导致java.lang.IllegalStateException

这不是Nullpointer异常。
这是一个非法状态异常。

当会话无效/过期并且您尝试访问它时,会发生这种情况。

会话如下无效。

session.invalidate();

调用invalidate后,您将无法使用该会话。

会话在超时时过期。它们过期后,如果尝试使用它,它将抛出相同的异常。

这些是您可以手动设置超时的方法。

在web.xml中设置超时。以分钟为单位设置。

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

或者,您也可以在Java中进行设置。

public void setMaxInactiveInterval(int interval)session.setMaxInactiveInterval(30*60); // This we set in seconds.

在这里,我们指定客户端请求之间servlet容器使该会话无效之前的时间(以秒为单位)。时间为负数表示会话永不超时。

确保您正在执行的操作所花费的时间不超过超时时间。否则,您将不得不重置该值。

编辑:
不可能以干净的方式从中恢复。该会话将变为无效/不可用,您将需要创建一个新会话并重新填充数据。通常,人们被重定向到备用错误页面,而不是显示堆栈跟踪。“您的会话已过期。请重新登录。”

使用request.isRequestedSessionIdValid()识别会话ID是否仍然有效。

HttpSession session =httpReg.getSession(false);if( !request.isRequestedSessionIdValid() ){        //comes here when session is invalid.        // redirect to a clean error page "Your session has expired. Please login again."}

另一个选择是使用try catch使用句柄IllegalExceptionState

HttpSession session =httpReg.getSession(false);try{     if(session != null)     {        Date date = new Date(session.getLastAccessedTime());     }}catch( IllegalStateException ex ){      //comes here when session is invalid.      // redirect to a clean error page "Your session has expired. Please login again."}

旁注:如果您确实有一个过程需要很长时间才能完成,并且会话正在超时(例如:解析非常大的数据记录)。您应该考虑将它们从Web应用程序中删除,并使用简单的Java将其作为进程运行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号