JSP의 기본 기능을 이해하는 열쇠는 JSP가 준수하는 라이프사이클을 이해하는 것입니다.
JSP 라이프사이클은 생성부터 소멸까지의 전체 프로세스로, 서블릿 라이프사이클과 유사하지만 JSP 라이프사이클에는 JSP 파일을 서블릿으로 컴파일하는 작업도 포함된다는 점이 다릅니다.
JSP 라이프사이클이 거치는 단계는 다음과 같습니다.
컴파일 단계:
서블릿 컨테이너는 서블릿 소스 파일을 컴파일하고 서블릿 클래스를 생성합니다.
초기화 단계:
JSP에 해당하는 서블릿 클래스를 로드하고, 인스턴스를 생성하고, 초기화 메소드를 호출합니다.
실행 단계:
JSP에 해당하는 서블릿 인스턴스의 서비스 메소드를 호출합니다.
파괴 단계:
JSP에 해당하는 서블릿 인스턴스의 파기 메소드를 호출한 후 서블릿 인스턴스를 파기한다.
분명히 JSP 라이프사이클의 네 가지 주요 단계는 아래와 같이 서블릿 라이프사이클과 매우 유사합니다.
브라우저가 JSP 페이지를 요청하면 JSP 엔진은 먼저 파일을 컴파일해야 하는지 여부를 확인합니다. 이 파일이 컴파일되지 않았거나 마지막 컴파일 이후 변경된 경우 JSP 파일을 컴파일하십시오.
컴파일 프로세스는 세 단계로 구성됩니다.
JSP 파일을 구문 분석합니다.
JSP 파일을 서블릿으로 변환합니다.
서블릿을 컴파일합니다.
컨테이너는 JSP 파일을 로드한 후 요청에 서비스를 제공하기 전에 jspInit() 메서드를 호출합니다. 사용자 정의 JSP 초기화 작업을 수행해야 하는 경우 다음과 같이 jspInit() 메서드를 재정의하면 됩니다.
public void jspInit(){ // 초기화 코드}
일반적으로 프로그램은 한 번만 초기화되며 서블릿의 경우에도 마찬가지입니다. 일반적으로 데이터베이스 연결을 초기화하고, 파일을 열고, jspInit() 메소드에서 쿼리 테이블을 생성할 수 있습니다.
이 단계에서는 JSP 라이프사이클이 파기될 때까지 요청과 관련된 모든 상호 작용을 설명합니다.
JSP 웹 페이지 초기화가 완료되면 JSP 엔진은 _jspService() 메소드를 호출합니다.
_jspService() 메소드에는 다음과 같이 매개변수로 HttpServletRequest 객체와 HttpServletResponse 객체가 필요합니다.
void _jspService(HttpServletRequest request,HttpServletResponse response){ // 서버측 처리 코드}
_jspService() 메소드는 각 요청마다 한 번씩 호출되어 해당 응답을 생성하는 역할을 담당하며, GET, POST, DELETE 등 7가지 HTTP 메소드 모두에 대한 응답을 생성하는 역할도 담당합니다.
JSP 라이프사이클의 파괴 단계에서는 JSP 웹 페이지가 컨테이너에서 제거될 때 어떤 일이 발생하는지 설명합니다.
JSP의 jspDestroy() 메소드는 서블릿의 파괴 메소드와 동일합니다. 데이터베이스 연결 해제, 폴더 닫기 등 정리 작업을 수행해야 하는 경우 jspDestroy() 메서드를 재정의하세요.
jspDestroy() 메소드의 형식은 다음과 같습니다.
public void jspDestroy(){ // 코드 정리}
JSP 라이프사이클 코드의 예는 다음과 같습니다.
<%@ 페이지 언어="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>life.jsp</title></head ><body><%! private int serviceVar=0; private int destroyVar=0;%> <%! public void jspInit(){ initVar++; System.out.println("jspInit(): JSP가 "+initVar+"번 초기화되었습니다."); } public void jspDestroy(){ destroyVar++; System.out.println("jspDestroy(): JSP가 파괴되었습니다."+destroyVar+ "시간"); }%><% serviceVar++; System.out.println("_jspService(): JSP는 총 "+serviceVar+" 요청에 응답했습니다."); String content1="초기화 수: "+initVar; String content2="고객 요청에 대한 응답 수: "+serviceVar; String content3="파기 수: " +destroyVar;%> <h1>w3cschool 튜토리얼 JSP 테스트 예</h1><p><%=content1 %></p><p><%=content2 %></p><p><%=content3 %></p></body></html>