2012-04-24 74 views
2

我是新的,今天有我的第一課。的Servlet計數到的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); 
} 

我創建一個新的整數,因爲我在這裏看到的是計算器整數是不可改變的。它仍然沒有工作,並給我一個錯誤的線。

有人可以幫助我嗎?

親切的問候,

+0

「在該行上給我一個錯誤」 - 什麼是錯誤? – 2012-04-24 12:26:15

+0

就在你問我的時候:-)我找到了解決辦法。是nullpointerexcption。 – user1007522 2012-04-24 12:27:47

+0

這就是我的想法 - 那麼我的答案應該有所幫助。 – 2012-04-24 12:28:10

回答

1

你可能取回一個空的第一次。該錯誤是否爲空引用異常?

你需要檢查null並設置visitCount 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); 
} 
+0

我認爲更新synchronized塊內的會話會更好。 – nobeh 2012-04-24 12:45:23

+0

@nobeh同意,更新答案 – 2012-04-24 12:47:00

0

visitCount是空的,因爲你使用的是否新款()來檢查價值已被存儲。

檢查visitCount爲空手動。

從文檔:

的HttpSession的實現代表在會議服務器的觀點。服務器認爲會話是新的,直到客戶端加入。在客戶端加入會話之前,isNew方法返回true。 true值可以表明這三種情況之一:

  • 的客戶端還不知道會議還未開始
  • 客戶選擇不加入會話的會話
  • 。如果客戶端僅支持cookie並選擇拒絕服務器發送的任何cookie,則會發生這種情況。如果服務器支持URL重寫,這種情況通常不會發生。
0

如果你真的決定這樣做,就應該把整visit變量爲靜態類變量。

公共靜態INT VISIT;

公共...的doGet(...){ VISIT ++; }