[리스너 클래스]
→ 클래스로 끝난다 = .java
→ POJO가 아닌 클래스 ( 서블릿처럼 )
→ 특수한 형태의 서블릿 ( 서블릿을 상속받은 형태 )
→ 어떤 행동을 모니터링(감지) 할 지 선택할 수 있음
해당 동작을 감지하면, 본인을 자동호출 할 수 있게됨
onclick 콜백함수, addEventListner 와 비슷한 면이 있음
: 인터페이스 동작이 감지되면, 내가 구현한 코드가 자동호출됨
☞ 맨위부터 체크 = 톰캣의 시작이 감지되면 코드가 실행
→ .jar 파일 을 WEB-INF / lib 폴더에 넣어줘야함
↓↓↓↓
리스너클래스 생성방법
서버가 실행/종료 될 때 Listner 클래스가 하는 행위를 지정할 것이니 Lifecycle 체크 후 Finish
리스너 클래스 코드
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) {
// context == application scope
// 톰캣(서버,서블릿 컨테이너)의 시작을 감지(모니터링)
// 시작을 감지하면 아래의 내용을 수행
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));
ServletContext context=sce.getServletContext(); // application scope의 데이터를 가져와서
context.setAttribute("datas", datas); // 세팅해줌
context.setAttribute("data", new Member());
}
}
MemberVO 코드
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;
}
}
.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>리스너 클래스 예제</title>
</head>
<body>
<h1><회원 리스트></h1> <!-- 꺽쇠괄호를 쓰고 싶어서 -->
<!-- 제어문자를 사용 -->
<table border="1">
<tr>
<th>이름</th>
<th>전화번호</th>
</tr>
<c:forEach var="v" items="${datas}"> <!-- forEach가 내장 -->
<!-- 왼쪽에 이름 오른쪽에 요소 -->
<tr>
<td>${v.name}</td>
<td><c:out value="${v.phone}" escapeXml="false"><font color="red">phone 정보없음</font></c:out></td>
<!-- 기본값이 true, 태그 바디 안에 내용을 전부 문자열로 인식하기 때문에 -->
</tr> <!-- font color를 걸기 위해 false로 바꿈 -->
</c:forEach>
</table>
수행결과
JAVA 코드를 사용하지 않고, useBean 또한 사용하지 않아도 정보를 받아올 수 있으며,
내장객체인 forEach 를 사용하여 출력할 수 있음
'개발자노트 > 웹' 카테고리의 다른 글
HTML - JSP - [JSTL] 기본개념 (0) | 2022.08.16 |
---|---|
[리스너 클래스] + 커스텀태그 set / set target (0) | 2022.08.16 |
HTML - JSP - 핸들러클래스 기반의 커스텀태그 , .tld 파일 생성법 , tld파일 만드는법 (0) | 2022.08.12 |
HTML - JSP - 커스텀태그 사용 (0) | 2022.08.12 |
HTML - JSP - 커스텀 태그 종류와 기본설명 (0) | 2022.08.12 |