23. 리스너 종합

2022. 7. 15. 19:15·Java Spring/JSP와 스프링


진행에 앞서 pom.xml과 web.xml을 수정해야한다.

pom.xml은 아래의 의존성을 추가해주자.

<!-- 서블릿 -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

web.xml은 아래처럼 코딩해주자.

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <listener>
    <listener-class>ch11.ListenerTestServlet</listener-class>
  </listener>

</web-app>

 

1️⃣ 리스너 클래스 생성

예제 생성

src/main/java에서 ListenerExam 으로 클래스를 생성해주자.

2️⃣ ServletContext 이벤트 구현

위에서 만든 ListenerExam을 아래와 같이 코딩해주자.

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class ListenerExam implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener {
    //리스너 생성자
    public ListenerExam() {

    }

    //ServletContext 시작
    public void contextInitialized(ServletContextEvent sce) {
        sce.getServletContext().log("ServletContext 시작!!");
    }
    //ServletContext 종료
    public void contextDestroyed(ServletContextEvent sce) {
        sce.getServletContext().log("ServletContext 종료!!");
    }

    //속성 메소드: 추가, 변경, 삭제
    public void attributeAdded(ServletContextAttributeEvent scae) {
        scae.getServletContext().log("ServletContext 속성 추가 : "+scae.getValue());
    }
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        scae.getServletContext().log("ServletContext 속성 변경 : "+scae.getValue());
    }
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        scae.getServletContext().log("ServletContext 속성 삭제 : "+scae.getValue());
    }
}
  • @WebListenr : 현재 클래스가 리스너임을 알리고 컨테이너에 등록함.

리스너 자체는 실행과정이 없고, 톰캣이 실행될때 자동실행된다. 따라서 서버를 실행하고 로그를 보면된다.

ListenerTestServlet

ch11에 ListenerTestServlet 서블릿 클래스를 생성해주자.

init() 메소드에서 ServletContext객체를 가져오는 부분을 추가후

doGet()에서 ServletContext에 속성을 추가하도록 할것이다.

package ch11;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/ListenerTestServlet")
public class ListenerTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    ServletContext sc;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        sc = getServletContext();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        sc.setAttribute("name", "홍길동");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

이제 서버를 실행후 http://localhost:8082/ListenerTestServlet 에 접속해보자.

이렇게 빈화면만 표시되는데 인텔리제이로 돌아가 로그를 확인해보자.

3️⃣ 세션 이벤트 구현

세션과 관련된 이벤트 리스너를 구현할 것이다.

세션은 클라이언트가 서버에 접속할때 생성된다.

접속한 클라이언트 수만큼 생성되고, 일정시간이 지나거나 브라우저를 닫으면 다시생성된다.

 

ListenerExam 클래스에 아래의 코드를 추가해주자.

public void sessionCreated(HttpSessionEvent se) {
    se.getSession().getServletContext().log("Session 생성됨 : "+se.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent se) {
    se.getSession().getServletContext().log("Session 종료됨 : "+se.getSession().getId());
}
public void attributeAdded(HttpSessionBindingEvent se) {
    se.getSession().getServletContext().log("Session 속성 추가 : "+se.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent se) {
    se.getSession().getServletContext().log("Session 속성 삭제 : "+se.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent se) {
    se.getSession().getServletContext().log("Session 속성 변경 : "+se.getValue());
}

이제 ListenserTestServlet의 doGet() 부분에 세션 속성 추가 부분을 수정해주자.

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    sc.setAttribute("name", "홍길동");
    HttpSession s = request.getSession();
    s.setAttribute("ssName", s.getId()+": 세션 속성 저장!!");
}

이제 톰캣서버를 돌려 테스트해보자.

여기서 브라우저를 완전히 종료하거나 다른 브라우저로 접속하면 새로운 세션이 생성되고 속성이저장이 된다.

 

 


[메인으로 돌아가기]

 

 

'Java Spring > JSP와 스프링' 카테고리의 다른 글

25. JAX-RS로 REST API 서버 구현  (0) 2022.07.18
24. 한글 처리 필터 구현  (0) 2022.07.15
22. 필터  (0) 2022.07.15
21. 리스너  (0) 2022.07.15
20. 뷰 구현  (0) 2022.07.15
'Java Spring/JSP와 스프링' 카테고리의 다른 글
  • 25. JAX-RS로 REST API 서버 구현
  • 24. 한글 처리 필터 구현
  • 22. 필터
  • 21. 리스너
백고미
백고미
  • 백고미
    백고미의 정신세계
    백고미
  • 전체
    오늘
    어제
    • 분류 전체보기 (127)
      • [ 공지사항 ] (0)
      • 정보 (15)
        • 워프레임 (6)
        • 게임 (3)
        • 군대 (1)
        • 이민 (1)
      • Java Spring (43)
        • JSP와 스프링 (34)
        • Tip (9)
      • Spring boot (1)
        • Tip (1)
      • 직업 정보 (2)
        • 경찰 공무원 (2)
        • AAFES (0)
        • HD GFD (0)
      • 리뷰 (1)
        • 인터넷 (1)
      • Life (2)
        • 운동 (1)
        • 자격증 (1)
      • 소스모드 (28)
        • CSGO (7)
        • CSS (0)
        • HL2DM (3)
        • L4D2 (1)
        • BMS (0)
        • TIP (16)
        • Extension (1)
        • 문법 (0)
      • C# (4)
        • s&box (4)
      • LUA (8)
        • Garry's Mod (8)
      • Resource (11)
        • Player Model (1)
        • Npc Model (1)
        • Weapon Model (2)
        • PropPhyics (6)
        • PropDynamic (1)
        • Texture (0)
        • Animation Texture (0)
        • Overlay (0)
        • Effect Sound (0)
        • Particle (0)
      • 일기장 (1)
        • TRH (4)
        • 스케줄 (1)
        • Els (0)
        • 프로젝트 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • John John한 블로그
  • 공지사항

  • 인기 글

  • 태그

    공찰공무원 필수과목
    발표 PPT
    경기북부병무청 가는법
    운전면허 종류
    윈도우10 고양이
    경찰 간부후보생
    스쿼트 운동 효과
    병무청가는법
    경찰시험 응시 자격
    경찰 공무원 응시 자격
    윈도우10 닌자캣
    경기북부병무청 회룡역
    경찰공무원 선택과목
    병무청 가는 길
    경기북부 병무청
    경찰 가산점표
    경기북부 병무청 가는길
    경기북부병무청 망월사
    경기북부 병무청 가는 법
    경기북부병무청
    윈도우10 참가자 프로그램
    원동기장치면허
    경기북부 병무청 가는 길
    키벨류
    순경 가산점
    병무청 가는 법
    경찰공무원 가산점표
    경기북부병무지청
    병무청가는길
    윈도우10 1주년
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
백고미
23. 리스너 종합
상단으로

티스토리툴바