서블릿 클릭 카운터


웹 페이지 클릭 카운터

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

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

  • 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() 
  { 
     // 重置点击计数器
     hitCount = 0;
  } 

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");
      // 该方法在 Servlet 被点击时执行 
      // 增加 hitCount 
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "总点击量";
      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() 
  { 
      // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
  } 
}

이제 위의 서블릿을 컴파일하고 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에 액세스하여 이 서블릿을 호출합니다. 이렇게 하면 페이지를 새로 고칠 때마다 카운터 값이 1씩 증가하고 결과는 다음과 같습니다.

총 클릭수

总点击量

6

6< 🎜>

웹사이트 클릭 카운터

전체 웹사이트의 총 조회수를 알고 싶을 때가 많습니다. 서블릿에서는 이 작업도 매우 간단합니다. 필터를 사용하여 이 작업을 수행할 수 있습니다.

필터 수명 주기에 따라 간단한 웹사이트 클릭 카운터를 구현하기 위해 취해야 할 단계는 다음과 같습니다.

  • 필터의 init() 메서드에서 전역을 초기화합니다. 변하기 쉬운.

  • doFilter 메소드가 호출될 때마다 전역 변수가 증가합니다.

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

여기에서는 웹 컨테이너를 다시 시작할 수 없다고 가정합니다. 다시 시작되거나 서블릿이 삭제되면 클릭 카운터가 재설정됩니다.

이 예는 간단한 웹사이트 클릭 카운터를 구현하는 방법을 보여줍니다.

// 导入必需的 java 库
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{
     // 重置点击计数器
     hitCount = 0;
  }

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

      // 把计数器的值增加 1
      hitCount++;

      // 输出计数器
      System.out.println("网站访问统计:"+ hitCount );

      // 把请求传回到过滤器链
      chain.doFilter(request,response);
  }
  public void destroy() 
  { 
      // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
  } 
}

이제 위의 서블릿을 컴파일하고 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>

....

이제 http://localhost:8080/과 같은 웹사이트의 아무 페이지나 방문하세요. 페이지를 클릭할 때마다 카운터가 1씩 증가하고 로그에

网站访问统计: 1
网站访问统计: 2
网站访问统计: 3
网站访问统计: 4
网站访问统计: 5
..................
메시지가 표시됩니다.