728x90
리스너는 특수한 형태의 서블릿으로 특정 동작을 모니터링(감지)하여 설정한 기능을 자동 호출한다.
어떠한 동작을 감지할지는 사용자가 선택할 수 있다.
웹 프로그램은 서버가 시작되면 web.xml을 참조하고 @(어노테이션, 애너테이션)을 스캔하며
@WebListener(리스너 클래스)가 발견되면 어떤 동작에 대해 해당 리스너 클래스를
자동 호출해야하는지 별도로 기억한다.
많이 사용되는 설정으로는 Lifecycle과 Changes to attributes 등이 있으며 각각 서버, 세션, 리퀘스트의
단위로 적용되여 Lifecycle은 각각의 단위에 대한 생성과 소멸을 감지하며 Changes to attributes는
속성의 변경에 대해 감지한다.
예시를 위해 작성한 Member 클래스
package test;
public class Member {
private String name;
private int score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Member(String name,int score) {
this.name=name;
this.score=score;
}
}
서버 시작을 감지하면 위의 클래스를 사용하여 member객체를 만들어
ServletContext 객체에 set 하도록 만들어진 리스너
package test;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class TestListener
*
*/
@WebListener
public class TestListener implements ServletContextListener {
/**
* Default constructor.
*/
public TestListener() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
Member member = new Member("홍길동",100);
sc.setAttribute("member", member);
System.out.println("TestListener: contextInitialized(): 톰캣 시작이 감지됨"); // 톰캣 시작 로그
}
}
실행을 위한 .jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${member.name} 학생: ${member.score}점
</body>
</html>
실행결과

728x90
'web' 카테고리의 다른 글
| JSP 태그 활용 (0) | 2022.08.22 |
|---|---|
| 필터(Filter) (0) | 2022.08.21 |
| 초기화 매개변수 (0) | 2022.08.18 |
| 리스너 클래스 (0) | 2022.08.16 |
| JSP - JSTL (0) | 2022.08.16 |