计算访问次数的Servlet

时间:2012-04-24 12:23:56

标签: java servlets

我是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上看到整数是不可变的。它仍然无法正常工作并在该行上给我一个错误。

有人可以帮助我吗?

亲切的问候,

4 个答案:

答案 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 ++; }