सर्वलेट्स - हिट्स काउंटर

एक वेब पेज के लिए काउंटर मारो

कई बार आपको अपनी वेबसाइट के किसी विशेष पृष्ठ पर कुल हिट्स जानने में रुचि होगी। सर्वलेट का उपयोग करके इन हिट्स को गिनना बहुत सरल है क्योंकि एक सर्वलेट का जीवन चक्र उस कंटेनर द्वारा नियंत्रित होता है जिसमें यह चलता है।

निम्नलिखित एक सरल पृष्ठ हिट काउंटर को लागू करने के लिए कदम उठाए जा रहे हैं जो सर्वलेट लाइफ साइकिल पर आधारित है -

  • एक वैश्विक वैरिएबल init () विधि को प्रारंभ करें।

  • हर बार या तो doGet () या doPost () विधि को वैश्विक चर बढ़ाएँ।

  • यदि आवश्यक हो, तो आप नष्ट () विधि में वैश्विक चर के मूल्य को संग्रहीत करने के लिए एक डेटाबेस तालिका का उपयोग कर सकते हैं। इस मान को इनिट () विधि के अंदर पढ़ा जा सकता है जब अगली बार सर्वलेट को आरंभ किया जाएगा। यह कदम वैकल्पिक है।

  • यदि आप केवल अनूठे पेज हिट्स को एक सत्र में गिनना चाहते हैं, तो आप उस सत्र में पहले से ही हिट किए गए पेज की जांच करने के लिए isewew () विधि का उपयोग कर सकते हैं। यह कदम वैकल्पिक है।

  • आप अपनी वेब साइट पर कुल हिट दिखाने के लिए वैश्विक काउंटर का मान प्रदर्शित कर सकते हैं। यह कदम भी वैकल्पिक है।

यहां मैं यह मान रहा हूं कि वेब कंटेनर को फिर से शुरू नहीं किया जाएगा। यदि इसे पुनः आरंभ या नष्ट किया गया सर्वलेट, हिट काउंटर रीसेट हो जाएगा।

उदाहरण

यह उदाहरण दिखाता है कि एक साधारण पृष्ठ हिट काउंटर को कैसे लागू किया जाए -

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.
   } 
}

अब हमें सर्वलेट के ऊपर संकलन करें और web.xml में निम्नलिखित प्रविष्टियाँ बनाएँ

<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>
....

अब URL http: // localhost: 8080 / PageHitCounter का उपयोग करके इस सर्वलेट को कॉल करें। यह हर बार एक-एक करके काउंटर बढ़ाता जाएगा क्योंकि यह पृष्ठ ताज़ा हो जाता है और यह निम्नलिखित परिणाम प्रदर्शित करेगा -

Total Number of Hits

6

Hit Counter for a Website:

कई बार आपको अपनी पूरी वेबसाइट पर हिट की कुल संख्या जानने में दिलचस्पी होगी। यह सर्वलेट में भी बहुत सरल है और हम फ़िल्टर का उपयोग करके इसे प्राप्त कर सकते हैं।

निम्नलिखित एक सरल वेबसाइट हिट काउंटर को लागू करने के लिए कदम उठाए जा रहे हैं जो फ़िल्टर जीवन चक्र पर आधारित है -

  • एक फिल्टर के एक वैश्विक चर init () विधि को प्रारंभ करें।

  • हर बार doFilter विधि को वैश्विक चर बढ़ाएँ।

  • यदि आवश्यक हो, तो आप फ़िल्टर के तरीके को नष्ट करने () में वैश्विक चर के मूल्य को संग्रहीत करने के लिए एक डेटाबेस तालिका का उपयोग कर सकते हैं। यह मान init () विधि के अंदर पढ़ा जा सकता है, जब अगली बार फ़िल्टर प्रारंभ किया जाएगा। यह कदम वैकल्पिक है।

यहां मैं यह मान रहा हूं कि वेब कंटेनर को फिर से शुरू नहीं किया जाएगा। यदि इसे पुनः आरंभ या नष्ट किया गया सर्वलेट, हिट काउंटर रीसेट हो जाएगा।

उदाहरण

यह उदाहरण दिखाता है कि एक साधारण वेबसाइट हिट काउंटर को कैसे लागू किया जाए -

// 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.
   } 
}

अब हम उपरोक्त सर्वलेट को संकलित करते हैं और web.xml में निम्नलिखित प्रविष्टियाँ बनाते हैं

....
<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>
....

अब URL http: // localhost: 8080 / जैसे किसी भी URL को कॉल करें। इससे हर बार किसी भी पेज के हिट होने पर काउंटर में वृद्धि होगी और यह लॉग में निम्न संदेश प्रदर्शित करेगा -

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