다연이네

[days09] ServletContextListener 본문

JSP

[days09] ServletContextListener

 다연  2021. 1. 6. 20:13
반응형

 웹 컨테이너(톰캣)는 시작/종료될 때 발생하는 이벤트에서 초기화/종료 코딩을 할 필요가 있다.
 이때 ServletContextListener를 구현한 클래스를 사용한다. 
  서블릿, 필터 생성, 소멸 -> init(){} destroy(){}
   
   (가정) 톰캣이 시작할 때 DBCP을 초기화하는 일을 해야한다

   com.util.DBCPInitListener -> web.xml 등록

 

   com.util.DBCPInitListener

package com.util;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/*@WebListener 자동으로 리스너로 등록하는 어노테이션 == web.xml의 listener랑 같음*/
public class DBCPInitListener implements ServletContextListener {

	//웹 컨테이너(톰캣)가 종료할 때
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println(">DBCPInitListener.contextDestroyed()...");
		
	}

	//웹 컨테이너가 시작할 때
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println(">DBCPInitListener.contextInitialized()...");
		//DBCP 
		//DB 연결 정보를 얻어온다...(가정)
		//sce.getServletContext() == JSP application 기본 객체와 동일
		String poolConfig = sce.getServletContext().getInitParameter("poolConfig"); // 파라미터 value 읽어옴
		Properties prop = new Properties();
		Reader reader = new StringReader(poolConfig);
		try {
			prop.load(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		System.out.println(prop.getProperty("className")); //web.xml에 있는 애들
		System.out.println(prop.getProperty("url"));
		System.out.println(prop.getProperty("user"));
		System.out.println(prop.getProperty("password"));
		/*
		oracle.jdbc.driver.OracleDriver
		jdbc:oracle:thin:@localhost:1521:xe
		scott
		tiger
		*/
	}

}

web.xml

<listener>
	<listener-class>com.util.DBCPInitListener</listener-class>
</listener>

 <!-- 웹 사이트 전체에서 application 기본 객체가 이 파라미터 사용 -->
<context-param>
  <param-name>poolConfig</param-name>
  <param-value>
        className=oracle.jdbc.driver.OracleDriver
      url=jdbc:oracle:thin:@localhost:1521:xe
      user=scott
      password=tiger
  </param-value>
</context-param>

 

반응형
Comments