我是servlet的新手,今天上了第一堂课。
现在,我正在尝试创建一个计算用户访问次数的servlet。
总是在增加计数器的方式上出错:
HttpSession session = req.getSession(true);
Integer visitCount = new Integer(0);
String visitCountKey = new String("visitCount");
synchronized (this) {
if (!session.isNew()) {
visitCount = (Integer) session.getAttribute(visitCountKey);
visitCount = new Integer(visitCount.intValue() + 1); //error
}
session.setAttribute(visitCountKey, visitCount);
}
我正在创建一个新的整数,因为我在stackoverflow上看到整数是不可变的。它仍然无法正常工作并在该行上给我一个错误。
有人可以帮助我吗?
亲切的问候,
答案 0 :(得分:4)
您应该添加null
检查visitCount
HttpSession session = req.getSession(true);
String visitCountKey = new String("visitCount");
synchronized (this) {
Integer visitCount = (Integer) session.getAttribute(visitCountKey);
if(visitCount == null) {
visitCount = 0;
}
visitCount = new Integer(visitCount.intValue() + 1);
session.setAttribute(visitCountKey, visitCount);
}
答案 1 :(得分:1)
你可能第一次回来了。该错误是否为空引用异常?
您需要检查null并将visitCount设置为0。
答案 2 :(得分:0)
visitCount为null,因为您正在使用isNew()来检查该值是否已存储。
手动检查visitCount是否为null。
来自文档:
HttpSession的实现表示服务器的会话视图。在客户端加入会话之前,服务器会将会话视为新会话。在客户端加入会话之前,isNew方法返回true。值true表示以下三种情况之一:
- 客户尚未了解会话
- 会议尚未开始
- 客户选择不加入会话。如果客户端仅支持cookie并选择拒绝服务器发送的任何cookie,则会发生这种情况。如果服务器支持URL重写,则通常不会发生这种情况。
答案 3 :(得分:0)
如果你真的决定这样做,你应该将整数visit
变量作为静态类变量。
public static int VISIT;
public ... doGet(...){ VISIT ++; }