2012-04-24 48 views
2

私はサーブレットを初めて使いました。今日は私の最初のレッスンでした。訪問数をカウントするサーブレット

これで、ユーザーの訪問数をカウントするサーブレットを作成しようとしています。私はカウンターをインクリメントする方法について

常に取得エラー:私は、整数は不変でstackoverflowの上、ここで見てきたので、私は新しい整数を作成してい

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

「この行にエラーが表示されます」 - エラーは何ですか? –

+0

ちょうどあなたが私に尋ねたときに:-)私は解決策を見つけました。 nullpointerexcptionが使用されました。 – user1007522

+0

それは私が思ったことです - 私の答えは助けになるはずです。 –

答えて

1

あなたはおそらく初めてnullを返すでしょう。エラーは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); 
} 
4

にvisitCountを設定する必要があります値は既に格納されていました。

visitCountをnullに手動でチェックします。ドキュメントから

のHttpSessionの実装では、セッションのサーバのビューを表します。サーバーは、クライアントによって結合されるまで、セッションが新規であると見なします。クライアントがセッションに参加するまで、isNewメソッドはtrueを返します。真の値は、これら3例1を示すことができます。クライアントは、まだセッションがまだクライアントがセッションに参加しないことを選択した

  • 開始されていないセッション
  • について知らない

    • 。このケースは、クライアントがクッキーのみをサポートし、サーバーが送信したクッキーを拒否することを選択した場合に発生します。サーバーがURL書き換えをサポートしている場合、このケースは一般的には発生しません。
  • +0

    私はそれが同期化されたブロック内のセッションを更新する方が良いと思います。 – nobeh

    +0

    @nobehが同意した、更新された回答 –

    0

    あなたがいるかどうかを確認するためにisNew()を使用しているので、visitCountは、nullであるためチェックnullを追加する必要はnullをチェックし、0

    0

    あなたは本当にあなたが静的クラス変数として整数visit変数を置く必要があり、これを実行するために決定する必要があります。

    public static int VISIT;

    public ... doGet(...){ VISIT ++; }

    関連する問題