Servlet访问统计代码初始化visitCount后仍触发NullPointerException求助
异常原因
你遇到的空指针问题核心原因如下:
- 当session为非新会话时,你直接用
session.getAttribute(visitCountKey)的返回值覆盖了已经初始化的visitCount变量,但如果session中从未存入过visitCount属性,getAttribute会返回null,此时visitCount被赋值为null,执行+1操作时会触发Integer自动拆箱,直接抛出空指针。 - 你在新会话的if分支中仅存入了
userIDKey对应的用户ID,没有将初始的visitCount存入session,导致用户第二次访问进入else分支时,完全拿不到之前的访问次数值,只能得到null。 - 即使你把变量类型改成int,把null赋值给int类型变量时同样会触发拆箱失败,所以改类型也解决不了问题。
修复方案
两种修复方式二选一即可:
- 补充新会话分支的属性存储逻辑,在
if (session.isNew())代码块中新增一行存储访问次数的代码:
if (session.isNew()) { title = "Welcome to my website"; session.setAttribute(userIDKey, userID); // 新增行:把初始访问次数存入session session.setAttribute(visitCountKey, visitCount); }
- 从session取值时增加空校验,避免直接赋值为null:
else { Integer countFromSession = (Integer) session.getAttribute(visitCountKey); // 空的话说明是第一次统计,直接设为1,否则在原有基础上加1 visitCount = countFromSession == null ? 1 : countFromSession + 1; userID = (String) session.getAttribute(userIDKey); }
内容的提问来源于stack exchange,提问作者cosmin
相关产品推荐
相关产品推荐

