리스너 클래스는 어떠한 행동을 모니터링하여 자동호출 한다고 했는데,
기본 생성자로 이미 만들어논 객체의 정보를 수정하려면 어떻게 해야할까?
Member의 핸드폰번호를 set target을 이용하여 수정하는 방법
Member.java 코드
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;
}
}
코드를 보면 기본생성자로 김티오, 010-1234-1234로 생성이 되는 것을 볼 수 있다.
그리고 리스너 코드를 보면
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());
}
}
ServletContext를 이용하여 application scope의 데이터를 가져와서
context.setAttribute로 "data" 라는 이름의 new Member() ( 기본생성자인 김티오, 010-1234,1234 ) 로 생성했다.
그리고 .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>리스너클래스 예제2</title>
</head>
<body>
<c:set var="msg" value="HELLO!" /> <!-- set을 이용해 EL식으로 변수 사용 가능 -->
<%-- <c:remove var="msg"/> --%> <!-- empty로 되어있고, remove를 이용해 이름이 msg인 변수를 지움 -->
${msg}
<hr>
<c:set target="${data}" property="phone" value="010-1122-3344 "></c:set>
<!-- data에 있는 phone이라는 속성을 value로 바꿔줘 -->
${data.name} | ${data.phone}
</body>
</html>
<c:set target="${data}" property="phone" value=010-1122-3344"> </c:set>
을 사용하여, data라는 이름에 대한 속성인 "phone" 의 값을 value="바꿀 내용"으로 set 해줄 수 있는 것을 볼 수 있다.
수행결과
'개발자노트 > 웹' 카테고리의 다른 글
HTML - JSP - 커스텀태그 try-catch , 조건문 if (0) | 2022.08.16 |
---|---|
HTML - JSP - [JSTL] 기본개념 (0) | 2022.08.16 |
[ 리스너 클래스 ] (0) | 2022.08.16 |
HTML - JSP - 핸들러클래스 기반의 커스텀태그 , .tld 파일 생성법 , tld파일 만드는법 (0) | 2022.08.12 |
HTML - JSP - 커스텀태그 사용 (0) | 2022.08.12 |