리스너를 사용하여 웹 페이지 액세스 기록

JavaBeginner
지금 연습하기

소개

이 프로젝트에서는 리스너를 사용하여 웹 페이지 접근 추적 기능을 구현하는 방법을 배우게 됩니다. 이 프로젝트의 목표는 현재 홈 페이지에 접속 중인 사용자 수를 표시할 수 있는 웹 애플리케이션을 만드는 것입니다.

👀 미리보기

웹 페이지 방문자 수

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 홈 페이지에 대한 히트 수를 추적하기 위해 MyListener.java 클래스를 구현하는 방법.
  • 현재 방문자 수를 표시하기 위해 index.jsp 파일을 구현하는 방법.
  • web.xml 파일에서 MyListener를 구성하는 방법.
  • Tomcat 서버를 시작하고 애플리케이션을 테스트하는 방법.

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • HttpSessionListener 인터페이스를 사용하여 사용자 세션을 추적합니다.
  • ServletContext에서 방문자 수를 저장하고 검색합니다.
  • JSP 파일에서 방문자 수를 표시합니다.
  • web.xml 파일에서 리스너를 구성합니다.
  • Tomcat 을 사용하여 웹 애플리케이션을 시작하고 테스트합니다.

MyListener.java 클래스 구현

이 단계에서는 홈 페이지에 대한 히트 수를 추적하기 위해 MyListener.java 클래스를 구현하는 방법을 배우게 됩니다.

  1. ListenerProject/src/main/java/org/labex/listener 디렉토리에 있는 MyListener.java 파일을 엽니다.

  2. HttpSessionListener 인터페이스를 구현하는 MyListener 클래스를 구현합니다. 이 인터페이스는 sessionCreated()sessionDestroyed()의 두 가지 메서드를 제공합니다.

  3. sessionCreated() 메서드에서 다음을 수행합니다:

    • HttpSessionEvent 객체에서 ServletContext를 가져옵니다.
    • ServletContext에서 "count" 속성을 검색합니다. 속성이 null 이면 1 로 초기화합니다. 그렇지 않으면 카운트를 1 증가시킵니다.
    • 업데이트된 "count" 속성을 다시 ServletContext에 설정합니다.
  4. sessionDestroyed() 메서드에서 다음을 수행합니다:

    • HttpSessionEvent 객체에서 ServletContext를 가져옵니다.
    • ServletContext에서 "count" 속성을 검색합니다. 카운트가 0 보다 크면 카운트를 1 감소시킵니다.
    • 업데이트된 "count" 속성을 다시 ServletContext에 설정합니다.

MyListener.java 클래스는 다음과 같아야 합니다:

package org.labex.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer count = (Integer) context.getAttribute("count");

        if (count == null) {
            count = 1;
        } else {
            count++;
        }

        context.setAttribute("count", count);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer count = (Integer) context.getAttribute("count");

        if (count != null && count > 0) {
            count--;
        }

        context.setAttribute("count", count);
    }
}
✨ 솔루션 확인 및 연습

index.jsp 파일 구현

이 단계에서는 홈 페이지에 대한 히트 수를 표시하기 위해 index.jsp 파일을 구현하는 방법을 배우게 됩니다.

  1. ListenerProject/src/main/webapp 디렉토리에 있는 index.jsp 파일을 엽니다.

  2. JSP 파일에서 필요한 클래스를 가져옵니다:

    • javax.servlet.ServletContext
    • javax.servlet.http.HttpServletRequest
  3. HttpServletRequest 객체를 매개변수로 사용하는 getVisitorsCount()라는 메서드를 구현합니다. 이 메서드에서 다음을 수행합니다:

    • HttpServletRequest 객체에서 ServletContext를 가져옵니다.
    • ServletContext에서 "count" 속성을 검색합니다. 속성이 null 이면 0 을 반환합니다. 그렇지 않으면 카운트 값을 반환합니다.
  4. JSP 파일에서 getVisitorsCount() 메서드를 호출하고 결과를 HTML 에 포함시켜 현재 방문자 수를 표시합니다.

index.jsp 파일은 다음과 같아야 합니다:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ page import="javax.servlet.ServletContext" %> <%@
page import="javax.servlet.http.HttpServletRequest" %>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Index Page</title>
  </head>
  <body>
    <%! public int getVisitorsCount(HttpServletRequest request) { ServletContext
    context = request.getServletContext(); Integer count = (Integer)
    context.getAttribute("count"); return (count != null) ? count : 0; } %>

    <h1>Welcome to My Website</h1>
    <p>Current Visitors: <%= getVisitorsCount(request) %></p>
  </body>
</html>
✨ 솔루션 확인 및 연습

web.xml 에서 Listener 설정

이 단계에서는 web.xml 파일에서 MyListener를 구성하는 방법을 배우게 됩니다.

  1. ListenerProject/src/main/webapp/WEB-INF 디렉토리에 있는 web.xml 파일을 엽니다.

  2. web.xml 파일에 다음 구성을 추가합니다:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- Define your listener -->
    <listener>
        <listener-class>org.labex.listener.MyListener</listener-class>
    </listener>

</web-app>

이 구성은 MyListener 클래스를 웹 애플리케이션의 리스너로 등록합니다.

✨ 솔루션 확인 및 연습

Tomcat 서버 시작 및 애플리케이션 테스트

  1. 터미널을 열고 다음 명령을 사용하여 ListenerProject 디렉토리로 이동합니다:

    cd ~/project/ListenerProject/
  2. 다음 명령을 사용하여 Tomcat 서버를 시작합니다:

    mvn clean tomcat7:run
  3. 웹 브라우저를 열고 http://localhost:8080으로 이동합니다. 현재 방문자 수가 표시된 "Welcome to My Website" 페이지가 표시되어야 합니다.

  4. 페이지를 몇 번 새로 고치면 방문자 수가 증가하는 것을 볼 수 있습니다.

  5. 브라우저를 닫고 몇 분 정도 기다립니다. 다시 페이지를 새로 고치면 방문자 수가 감소하는 것을 볼 수 있습니다.

축하합니다! 리스너를 사용하여 웹 페이지 액세스 추적 기능을 성공적으로 구현했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.