2

私はサーブレットが初めてで、今日最初のレッスンを受けました。

現在、ユーザーの訪問をカウントするサーブレットを作成しようとしています。

カウンターをインクリメントする方法で常にエラーが発生します。

    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);
}

ここで整数が不変であることをスタックオーバーフローで見たので、新しい整数を作成しています。それでも機能せず、その行にエラーが表示されます。

誰かが私を助けることができますか?

敬具、

4

4 に答える 4

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);
}
于 2012-04-24T12:28:12.287 に答える
1

おそらく、初めてnullを取り戻すことになります。エラーはnull参照例外ですか?

nullをチェックし、visitCountを0に設定する必要があります。

于 2012-04-24T12:27:44.420 に答える
0

isNew()を使用して値がすでに保存されているかどうかを確認しているため、visitCountはnullです。

手動でvisitCountのnullを確認してください。

ドキュメントから:

HttpSessionの実装は、サーバーのセッションのビューを表します。サーバーは、クライアントが参加するまで、セッションを新しいものと見なします。クライアントがセッションに参加するまで、isNewメソッドはtrueを返します。trueの値は、次の3つのケースのいずれかを示します。

  • クライアントはまだセッションについて知りません
  • セッションはまだ始まっていません
  • クライアントはセッションに参加しないことを選択します。このケースは、クライアントがCookieのみをサポートし、サーバーから送信されたCookieを拒否することを選択した場合に発生します。サーバーがURL書き換えをサポートしている場合、このケースは一般的には発生しません。
于 2012-04-24T12:31:29.413 に答える
0

本当にこれを行うことにした場合は、整数visit変数を静的クラス変数として配置する必要があります。

public static int VISIT;

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

于 2012-04-24T12:32:05.030 に答える