Tech

Tomcat과 ServletContextListener

glqdlt 2016. 12. 5. 15:52

# 들어가는 말

집에서 하고 있는 개인 플젝에서 서버 시간의 구동시간 ( 시스템이 power on 시점 에서 지금까지) 를 알고 싶었다.

여러가지 방법이 있을거라 생각되지만, 복잡도 많은 방안은 피하고 싶었고 어떻게하면 단순하게 접근가능할까 생각하다

톰캣이 로드 되는 순간에 (정확히는 서블릿이 맵핑될 때) 내 소스를 같이 묻혀서 올릴(Load) 수 있는 방법이 떠올랐다.

이 말은 시스템이 os에 진입하면서 윈도우 서비스가 톰캣을 자동시작으로 프로세스 올릴 타이밍부터의 시점부터의 시간을 구할 수 있단 얘기가 된다.

내가 미리 만들어놓은 TimeSet 함수를 타게 해서, time data를 계산한다면 문제없을거란 생각이 들었다.


1. 컴퓨터 켜짐, OS(윈도우)가 올라온다.

2. 윈도우 서비스에서 톰캣을 자동 시작-

3. 톰캣 내부가 load 될 때, 구현한 서블릿리스너를 같이 묻힌다.

4. 리스너에서 time data을 얻어옴.

5. 이 time data를 가지고 계산해서 구동시간을 알아냄.


#ServletContextListener

Was가 최초 로드 될 때 필요한 초기 작업이나 was가 종료 될 때 특정 작업을 실행시킬 때 사용하는 인터페이스다.

1. ServletcontextListener 인터페이스를 받아서 구현한다.
2. web.xml 파일에 등록 시킨다.

ServletContextListener 인터페이스의 사용은 시작과 종료 2가지를 가져다 구현하면 된다.

*contextInitialized(ServletContextEvent sce) : 웹 어플리케이션이 초기활될 때 호출.

*contextDestroyed(ServletContextEvent sce) : 웹 어플리케이션이 종료될 때 호출.

위의 메소드는 모두 파라미터로 ServletContextEvent 타입의 객체를 전달 받는데, 
ServletContextEvent 클래스는 시작되거나 종료된 웹 어플리케이션 콘텍스트를 구할 수 있는 getServletContext() 메서드를 제공하고 있다.


# 서블릿리스너

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
import org.mynas.domain.SystemMonitoring;
 
public class SystemLoadHandler implements ServletContextListener {
 
    /**
     * Start On Tomcat WAS, Load to this method
     */
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        SystemMonitoring.GetInstance();
        System.out.println("WelCome to MyNasProject!");
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }
    
}
 

Colored by Color Scripter

cs




# Web.xml 에 내가 만든 커스텀 리스너 등록


1
2
3
4
5
6
7
<web-app ...
<listener
<listener-class
org.mynas.system.SystemLoadHandler
</listener-class
</listener
</web-app>
cs






'Tech' 카테고리의 다른 글

윈도우에서도 apt-get을 패키지 관리 "chocolatey"  (0) 2016.12.26
Apt-get 먹통 일 때 ( /var/lib/dpkg/lock )  (0) 2016.12.19
PMD 와 Xpath  (0) 2016.12.02
Javadoc 문법  (0) 2016.11.22
형상관리에 대한 이야기 CVS vs GIT  (0) 2016.11.15