JSP 페이지 초기화와 종료 메서드
Servlet의 초기화와 종료시 호출되는 메서드인 init() 메서드와 destroy() 메서드 처럼 JSP에도 JSP 페이지가 최초 생성시 호출되는 jspInit() 메서드와 종료(제거)시 호출되는 jspDestroy() 메서드가 존재합니다.

JSP는 웹 컨테이너에 의해 최초 호출 시점에서 서블릿으로 변환 되는데, 이때 서블릿의 init() 메서드를 통해서 JSP 페이지의 jspInit() 메서드를 호출하므로 결국은 JSP 페이지가 변환된 서블릿이 초기화 되는 시점에 jspInit() 메서드를 호출하는 것입니다. 종료될 때도 마찬가지입니다.

이는 Servlet/JSP 구현체마다 조금씩 다를 수는 있지만 톰캣의 경우에 우리가 작성한 JSP페이지는 서블릿으로 변환될 때 HttpJspBase를 상속받게 되는데, HttpJspBase 는 Servlet인 HttpServlet 를 상속받은 클래스입니다. 따라서 이 내용을 바탕으로 호출 구조를 도식화 해보면 대략적으로 다음과 같은 구조가 됩니다. (대략적인 구조이므로 자세히 알고싶은 경우 공식 문서나 org.apache.jasper.runtime.HttpJspBase 참고)





초기화 메서드와 종료 메서드가 있는 이유
초기화 메서드와 종료 메서드는 우리가 따로 오버라이딩 하지 않는 경우 선언만 되어 있고 아무런 행동도 하지 않는 비어있는 메서드로 존재하게 됩니다. 이렇게 비어있는 메서드임에도 불구하고 제공하고 있는 이유는 초기화와 종료시에 처리해야 할 행동이 있으면 정의할 수 있도록 선택권을 주는 것입니다.

예를 들어 JSP 페이지 전역에서 사용할 입출력 자원등을 최초에 한 번 jspInit() 메서드에서 생성하고 jspDestroy() 메서드를 통해 반드시 최종적으로 자원을 반납하도록 정의 할 수 있습니다. 입출력 자원은 서버 및 서버가 운영되는 운영체제의 자원 관리와도 직결되므로 최초에 한 번만 초기화하고 종료될 때 반드시 close() 해주는 식으로 작성해두면 자원관리를 수월하게 할 수 있습니다.
<%!
     public void jspInit(){
           ~~ fileOut = new FileOutputStream()...                                        
     }
 
 
     public void jspDestroy(){  
           ~~
           fileOut.close()...
           ~~
     }
%>
cs

 




 

JSP 작성시 jspInit(), jspDestroy() 작성 방법
그렇다면 우리가 JSP 페이지를 작성할 때 초기화 메서드와 종료 메서드를 작성하고 싶다면 어떻게 해야할까요? 단순하게 JSP 선언문에 파라미터가 없고 throws 절이 없는 메서드로 선언 후 원하는 행동을 작성해주기만 하면 됩니다.

/jspTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>                             
 
 
<%!
     public void jspInit(){ 
           System.out.println("jspInit() 호출!!"); 
     }
     public void jspDestroy(){ 
           System.out.println("jspDestroy() 호출!!"); 
     }
%>
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
</head> 
<body> 
     <h1>jsp 초기화와 종료</h1> 
</body> 
</html> 
cs

 

 


작성한 /jspTest.jsp를 실행합니다.



페이지를 실행하면 톰캣 콘솔 로그에 다음과 같이 jspInit()이 실행된 것을 확인할 수 있습니다. 이는 최초에 호출시 JSP 페이지가 서블릿으로 변환된 이후 초기화 되는 과정에서 호출된 것이기 때문에 이후 /jspTest.jsp를 다시 실행하거나 새로고침해도 다시 실행되지 않습니다. 또한 톰캣을 종료하게 되면 종료하는 과정에서 "jspDestroy() 호출!!" 이 출력되는 것을 볼 수 있습니다.



톰캣이 종료될 때 톰캣 콘솔까지 종료되면서 jspDestroy() 메서드 실행결과를 보기가 힘든데, jspDestroy()가 실행되는 것을 꼭 확인하고 싶다면 파일 입출력을 통해 jspDestroy() 실행시 종료 로그를 파일로 기록해보거나, 이클립스로 실행해보는 방법이 있습니다.


다음글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,