콘트롤 서블릿클래스와 DAO 클래스에서 매번 database 연동 Connection 객체나 DAO 객체를 생성하면 많은 가비지(garbage)가 생성되서 반응시간이 길어지는 단점이 있습니다.
그래서 DAO 처럼 여러 서블릿에서 사용하는 객체는 서로 공유하게 하는것이 좋습니다.
그래서 웹 어플리케이션이 시작될때 이러한 객체들을 미리 준비하고 공유할 수 있게 하는것을 설명하겠습니다.
1
서블릿 컨테이너는 웹 애플리케이션에서 사건(웹 애플리케이션 시작or 종료)이 발생하면
웹 애플리케이션에 등록된 이벤트 리스너에서 아래와 같은 관련된 메소드를 호출합니다.
웹 애플리케이션이
시작되면 contextInitialized() 함수가 실행되고
종료되면 contextDestroyed() 함수가 실행됩니다.
이런 호출되는 함수의 규칙을 정의한게 ServletContextListener 인터페이스 입니다.
그래서 아래와 같이
3번
ContextLoaderListener 클래스를 만들고 ServletContextListener 인터페이스를 구현합니다.
그럼 애플리케이션이 시작(사건발생)될때 처리해주고 싶은 부분을
ContextLoaderListener 클래스에서 contextInitialized() 함수가 실행될거고
그 함수 안에서 원하는 처리를 해주면 애플리케이션이 실행될때마다 원하는 처리가 실행되겠죠
원하는 처리는Dao 객체와 같은 서블릿들이 공유하는 객체를 준비해 할겁니다.
리스너를 컨테이너에 배치 해야 하는데 방법은
아래 이미지처럼
<listener>
<listener-class>페키지명.클래스명</listener-class>
<listener>
처럼 선언해 주거나
ContextLoaderListener 클래스에서 애노테이션 @WebListener 를 사용해도 됩니다.
우선 ContextLoaderListener 클래스를 만들고 servletContextListener 인터페이스를 구현합니다.
------------------------------------------
@Override
public void contextInitialized(ServletContextEvent event) {
try {
ServletContext sc = event.getServletContext();
Class.forName(sc.getInitParameter("driver"));
conn = DriverManager.getConnection(
sc.getInitParameter("url"),
sc.getInitParameter("username"),
sc.getInitParameter("password"));
MemberDao memberDao = new MemberDao();
memberDao.setConnection(conn);
sc.setAttribute("memberDao", memberDao);
} catch(Throwable e) {
e.printStackTrace();
}
}
MemberDao memberDao = (MemberDao)sc.getAttribute("memberDao");
를 사용하여 리스너에서 Connection 객체를 Dao(MemberDao)에 담은 Dao 객체를
꺼내 쓸 수 있습니다.
'프로그래밍 > JSP' 카테고리의 다른 글
DAO 만들기 (0) | 2015.05.21 |
---|---|
GET방식 POST방식 인코딩 처리하기 (2) | 2015.04.05 |
request.getContextPath() ,request.getRequestURI() 등 url 주소 가져오는 함수 (1) | 2015.03.29 |