0

アプリケーション オブジェクトを使用して、このページを閲覧した訪問者の数を記録しようとしましたが、ページを更新した後、ブラウザを閉じました。ブラウザを再度開いてこのページを表示すると、更新を開始した数に記録が戻ります。どうしてか分かりません?

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
    <body>
        <%
            Integer count;
            synchronized (application) {
                count = (Integer) application.getAttribute("count");
                if(count == null)
                    count = new Integer(0);
                count = new Integer(count.intValue() + 1);
                application.setAttribute("count", count);
            }
        %>
        This page has been visited <%= count.intValue() %> times!
    </body>
</html>
4

2 に答える 2

0

なぜ同期したのですか?なぜグローバル変数(つまりjava static)を使用しないのですか?

Webサーバー上のスレッドについて心配する必要はありません。それを処理する必要があります。

サーバー上のグローバル変数は、すべてのスレッドで同じになります。

こちらのサンプルhttp://www.tutorialspoint.com/jsp/jsp_hits_counter.htm

使用するように言う:

application.setAttribute(String Key, Object Value);

その後、..でそれを取得します

application.getAttribute(String Key);

例:

<%
    Integer hitsCount = (Integer)application.getAttribute("hitCounter");
    if( hitsCount ==null || hitsCount == 0 ){
       /* First visit */
       out.println("Welcome to my website!");
       hitsCount = 1;
    }else{
       /* return visit */
       out.println("Welcome back to my website!");
       hitsCount += 1;
    }
    application.setAttribute("hitCounter", hitsCount);
%>

<p>Total number of visits: <%= hitsCount%></p>
于 2012-04-26T20:38:47.947 に答える
0

コントローラーで何らかのフレームワークを使用している場合はpublic static Integer count、コントローラー側で、ハンドラーメソッドが呼び出されるたびにカウントを1ずつ増やし、そのページのモデルにカウントを配置することもできます。

于 2012-04-26T21:03:40.107 に答える