본문 바로가기
Programming | Study/JSP | Servlet

[servlet] ServletContextAttributeListener 구현

by jinju 2021. 4. 24.

이번에는 ServletContextListener이어서 인터페이스 ServletContextAttributeListener 구현하기

 

https://pearl23.tistory.com/20

 

[servlet] Listener 연결하기

서블릿 리스너 : 웹 컨테이너가 관리하는 라이프 사이클 사이에 발생하는 이벤트를 감지하여 해당 이벤트가 발생 시 해당 이벤트에 대한 일련의 로직을 처리하는 인터페이스 서블릿 리스너 동

pearl23.tistory.com

여기서 이어서!

 

ServletContextAttributeListener : ServletContext에 속성이 추가, 제거, 수정시 발생

 

 

일단 메인페이지에 기본적으로 작성

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Listener 연결하기</title>
</head>
<body>
    <h1>리스너 동작확인하기</h1>
    <h2><a href="contexttest.do">ContextListener 연결</a></h2>
        
</body>
</html>
cs

 

-리스너 구현하기

인터페이스 ServletContextAttributeListener 구현 받고 오버라이딩하기

단축기 alt + s + v

 

1. attributeAdded(ServletContextAttributeEvent e)

: void 새로운 속성 값이 추가될 때 실행되는 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.listener;
 
import java.util.Date;
 
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
//리스너구현 클래스 작성
public class ContextListenerTest implements ServletContextListener, ServletContextAttributeListener {
 
    
    @Override
    public void attributeAdded(ServletContextAttributeEvent event) {
        //ServletContext객체에 setAttribute로 값을 추가했을 때 실행기능
        System.out.println("context에 값을 추가함");
        System.out.println(event.getName());
        System.out.println(event.getValue());
    }
 
    @Override
    public void attributeRemoved(ServletContextAttributeEvent event) {
        //ServletContext객체에 setAttribute로 값을 삭제했을 때
        System.out.println("context에 값을 삭제함");
        
        
    }
 
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
 
        System.out.println("context에 값을 수정함");
        
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //서버가 종료되면 실행되는 리스너 메소드
        System.out.println("서버가 종료됨");
 
    }
 
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 서버가 시작되면 실행되는 리스너 메소드
        System.out.println("서버가 시작됨");
    }
 
}
cs

메소드에 event매개변수를 받아 setAttribute의 contex값 가져오기

System.out.println(event.getName());

System.out.println(event.getValue());

 

 

controller패키지 생성후 servlet클래스 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.listener.controller;
 
import java.io.IOException;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/
@WebServlet("/contexttest.do")
public class contextListenerTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
 
    public contextListenerTestServlet() {
        super();
    }
 
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //context에 값 추가하기
        ServletContext context = request.getServletContext();
        context.setAttribute("data""데이터입력");    
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
}
 
cs

event 메소드 생성하가기

값 추가 context.setAttribute("data""데이터입력");  

 

 

이 후 서버를 구동해주고 실행 후 확인하면

이렇게 console창에서 context값 추가한 것을 확인할 수 있다

 

2. attributeRemoved(ServletContextAttributeEvent e)

: void 속성 값이 제거될 때 실행되는 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.listener.controller;
 
import java.io.IOException;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
@WebServlet("/contexttest.do")
public class contextListenerTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
 
    public contextListenerTestServlet() {
        super();
    }
 
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //context에 값 추가하기
        ServletContext context = request.getServletContext();
        context.setAttribute("data""데이터입력");
        
        context.removeAttribute("data");
        
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
}
cs

이 메소드 추가 된거뿐 context.removeAttribute("data");

 

console창에서 확인할 수 있다.

 

 

3. attributeReplaced(ServletContextAttributeEvent e)

: void 속성 값이 변경될 때 실행되는 메소드

 

 

 

 

댓글