You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类型变量时同样会触发拆箱失败,所以改类型也解决不了问题。
修复方案

两种修复方式二选一即可:

  1. 补充新会话分支的属性存储逻辑,在if (session.isNew())代码块中新增一行存储访问次数的代码:
if (session.isNew()) {
    title = "Welcome to my website";
    session.setAttribute(userIDKey, userID);
    // 新增行:把初始访问次数存入session
    session.setAttribute(visitCountKey, visitCount);
}
  1. 从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:27:05