728x90
리스너 클래스란 서블릿과 같이 POJO(Plain Old Java Object)가 아닌 클래스로 서블릿을 상속 받아 만들어진
특수한 형태의 서블릿이다. 어떠한 행동을 모니터링(감지)할지 선택할 수 있으며 해당 동작을 감지하면,
본인을 자동 호출할 수 있다. 즉, 인터페이스 행위가 감지되면, 내가 구현한 코드를 자동으로 호출할 수 있다.
ex) 서버프로그램 실행하면 구현해둔 코드를 호출
예를 들기 위해 다음과 같은 클래스 파일 생성
이름과 번호를 변수로 가지고 있으며 기본생성자와 이름과 번호를 인자로 받는 생성자가 존재
package test;
public class Member {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Member() {
name="김티모";
phone="010-1234-1234";
}
public Member(String name,String phone) {
this.name=name;
this.phone=phone;
}
}
위의 클래스 파일을 사용하는 리스너 파일
리스너 파일 생성시 여러가지 조건 설정 가능하며 해당 파일에서는 서버,서블릿 컨테이너의 시작을
감지(모니터링)하면 실행되는 코드를 구현
서버의 시작이 감지되면 위의 클래스파일의 객체를 생성하여 배열에 담고 정보들을 setAttribute
package test;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class InitialMember
*
*/
@WebListener
public class InitialMember implements ServletContextListener {
/**
* Default constructor.
*/
public InitialMember() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// 톰캣의 종료를 감지(모니터링)
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
// 톰캣(서버,서블릿 컨테이너)의 시작을 감지(모니터링)
ArrayList<Member> datas=new ArrayList<Member>();
for(int i=1;i<10;i++) {
Member data=new Member("홍길동"+i,"010-1234-567"+i);
datas.add(data);
}
datas.add(new Member("임꺽정",null));
datas.add(new Member("아무무",null));
// context == application scope
ServletContext context=sce.getServletContext();
context.setAttribute("datas", datas);
context.setAttribute("data", new Member());
}
}
위의 리스너 파일을 사용하는 jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1><회원 리스트></h1>
<table border="1">
<tr>
<th>이름</th>
<th>전화번호</th>
</tr>
<c:forEach var="v" items="${datas}">
<tr>
<td>${v.name}</td>
<td><c:out value="${v.phone}" escapeXml="false"><font color="red">phone 정보없음</font></c:out> </td>
</tr>
</c:forEach>
</table>
</body>
</html>
실행결과

728x90
'web' 카테고리의 다른 글
| 리스너 클래스(2) (0) | 2022.08.20 |
|---|---|
| 초기화 매개변수 (0) | 2022.08.18 |
| JSP - JSTL (0) | 2022.08.16 |
| 태그핸들러클래스 기반의 커스텀태그 (0) | 2022.08.14 |
| 태그 파일 기반의 커스텀태그 (0) | 2022.08.13 |