Servletler - Hits Counter

Web Sayfası için Hit Counter

Çoğu zaman, web sitenizin belirli bir sayfasındaki toplam tıklama sayısını bilmek ilginizi çeker. Bu isabetleri bir sunucu uygulaması kullanarak saymak çok kolaydır çünkü bir sunucu uygulamasının yaşam döngüsü içinde çalıştığı konteyner tarafından kontrol edilir.

Aşağıda, Servlet Yaşam Döngüsüne dayalı basit bir sayfa isabet sayacı uygulamak için atılması gereken adımlar verilmiştir -

  • İnit () yönteminde global bir değişkeni başlatın.

  • DoGet () veya doPost () yöntemi her çağrıldığında global değişkeni artırın.

  • Gerekirse, destroy () yönteminde global değişkenin değerini saklamak için bir veritabanı tablosu kullanabilirsiniz. Bu değer, sunucu uygulaması bir dahaki sefere başlatılacağı zaman init () yöntemi içinde okunabilir. Bu adım isteğe bağlıdır.

  • Bir oturumda yalnızca benzersiz sayfa ziyaretlerini saymak istiyorsanız, o oturumda aynı sayfanın zaten vurulmuş olup olmadığını kontrol etmek için isNew () yöntemini kullanabilirsiniz. Bu adım isteğe bağlıdır.

  • Web sitenizdeki toplam tıklama sayısını göstermek için global sayaç değerini görüntüleyebilirsiniz. Bu adım da isteğe bağlıdır.

Burada web kapsayıcısının yeniden başlatılmayacağını varsayıyorum. Yeniden başlatılırsa veya sunucu uygulaması yok edilirse, isabet sayacı sıfırlanacaktır.

Misal

Bu örnek, basit bir sayfa isabet sayacının nasıl uygulanacağını gösterir -

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter extends HttpServlet {

   private int hitCount; 

   public void init() { 
      // Reset hit counter.
      hitCount = 0;
   } 

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      // This method executes whenever the servlet is hit 
      // increment hitCount 
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "Total Number of Hits";
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + hitCount + "</h2>\n" +
            "</body>
         </html>"
      );
   }
   
   public void destroy() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Şimdi yukarıdaki servlet'i derleyelim ve web.xml'de aşağıdaki girdileri oluşturalım.

<servlet>
   <servlet-name>PageHitCounter</servlet-name>
   <servlet-class>PageHitCounter</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>PageHitCounter</servlet-name>
   <url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / PageHitCounter URL'sini kullanarak çağırın. Bu, bu sayfa her yenilendiğinde sayacı bir artıracak ve aşağıdaki sonucu gösterecektir -

Total Number of Hits

6

Hit Counter for a Website:

Çoğu zaman web sitenizin tamamındaki toplam tıklama sayısını bilmek ilginizi çeker. Bu Servlet'te de çok basit ve bunu filtreler kullanarak başarabiliriz.

Aşağıda, Filtre Ömrü Döngüsüne dayanan basit bir web sitesi isabet sayacı uygulamak için atılması gereken adımlar verilmiştir -

  • Bir filtrenin init () yönteminde genel bir değişkeni başlatın.

  • DoFilter yöntemi her çağrıldığında global değişkeni artırın.

  • Gerekirse, destroy () filtre yönteminde global değişkenin değerini saklamak için bir veritabanı tablosu kullanabilirsiniz. Bu değer, filtre bir sonraki sefer başlatıldığında init () yöntemi içinde okunabilir. Bu adım isteğe bağlıdır.

Burada web kapsayıcısının yeniden başlatılmayacağını varsayıyorum. Yeniden başlatılırsa veya sunucu uygulaması yok edilirse, isabet sayacı sıfırlanacaktır.

Misal

Bu örnek, basit bir web sitesi isabet sayacının nasıl uygulanacağını gösterir -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class SiteHitCounter implements Filter {

   private int hitCount; 

   public void  init(FilterConfig config) throws ServletException {
      // Reset hit counter.
      hitCount = 0;
   }

   public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws java.io.IOException, ServletException {

      // increase counter by one
      hitCount++;

      // Print the counter.
      System.out.println("Site visits count :"+ hitCount );

      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }
   
   public void destroy() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Şimdi yukarıdaki sunucu uygulamasını derleyip web.xml'de aşağıdaki girdileri oluşturalım.

....
<filter>
   <filter-name>SiteHitCounter</filter-name>
   <filter-class>SiteHitCounter</filter-class>
</filter>

<filter-mapping>
   <filter-name>SiteHitCounter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
....

Şimdi URL http: // localhost: 8080 / gibi herhangi bir URL'yi çağırın. Bu, herhangi bir sayfa her isabet aldığında sayacı bir artırır ve günlükte aşağıdaki mesajı görüntüler:

Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................