서블릿-적중 카운터

웹 페이지의 히트 카운터

웹 사이트의 특정 페이지에서 발생한 총 조회수를 알고 싶어하는 경우가 많습니다. 서블릿의 수명주기는 실행되는 컨테이너에 의해 제어되기 때문에 서블릿을 사용하여 이러한 적중을 계산하는 것은 매우 간단합니다.

다음은 서블릿 라이프 사이클을 기반으로하는 간단한 페이지 히트 카운터를 구현하기 위해 취해야 할 단계입니다.

  • init () 메서드에서 전역 변수를 초기화합니다.

  • doGet () 또는 doPost () 메서드가 호출 될 때마다 전역 변수를 늘립니다.

  • 필요한 경우 데이터베이스 테이블을 사용하여 destroy () 메서드에 전역 변수 값을 저장할 수 있습니다. 이 값은 다음에 서블릿이 초기화 될 때 init () 메서드 내에서 읽을 수 있습니다. 이 단계는 선택 사항입니다.

  • 세션 내에서 고유 한 페이지 조회 만 계산하려면 isNew () 메서드를 사용하여 해당 세션에서 동일한 페이지가 이미 조회되었는지 확인할 수 있습니다. 이 단계는 선택 사항입니다.

  • 글로벌 카운터의 값을 표시하여 웹 사이트의 총 적중 수를 표시 할 수 있습니다. 이 단계도 선택 사항입니다.

여기에서는 웹 컨테이너가 다시 시작되지 않는다고 가정합니다. 다시 시작되거나 서블릿이 파괴되면 적중 카운터가 재설정됩니다.

이 예제는 간단한 페이지 히트 카운터를 구현하는 방법을 보여줍니다.

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:

여러 번 전체 웹 사이트의 총 히트 수를 알고 싶을 것입니다. 이것은 Servlet에서도 매우 간단하며 필터를 사용하여이를 달성 할 수 있습니다.

다음은 필터 수명주기를 기반으로하는 간단한 웹 사이트 조회수 카운터를 구현하기 위해 취해야 할 단계입니다.

  • 필터의 init () 메서드에서 전역 변수를 초기화합니다.

  • doFilter 메서드가 호출 될 때마다 전역 변수를 늘립니다.

  • 필요한 경우 데이터베이스 테이블을 사용하여 필터의 destroy () 메소드에 전역 변수 값을 저장할 수 있습니다. 이 값은 다음에 필터가 초기화 될 때 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
..................