JSP 라이프사이클


JSP의 기본 기능을 이해하는 열쇠는 JSP가 고수하는 라이프사이클을 이해하는 것입니다.

JSP 라이프사이클은 서블릿 라이프사이클과 유사하게 생성부터 소멸까지의 전체 프로세스입니다. 차이점은 JSP 라이프사이클에는 JSP 파일을 서블릿으로 컴파일하는 것도 포함된다는 점입니다.

다음은 JSP 라이프사이클의 단계입니다.

  • 컴파일 단계:

    서블릿 컨테이너 컴파일 서블릿 소스 파일, 서블릿 클래스 생성

  • 초기화 단계:

    JSP에 해당하는 서블릿 클래스를 로드하고 해당 인스턴스를 생성한 후 초기화를 호출합니다. method

  • 실행단계:

    JSP에 해당하는 서블릿 인스턴스의 서비스 메소드 호출

  • 파기 단계:

    JSP에 해당하는 서블릿 인스턴스의 파기 메소드를 호출한 후 서블릿 인스턴스를 파기합니다.

분명히 JSP 라이프사이클 네 가지 주요 단계는 아래와 같이 서블릿 라이프사이클과 매우 유사합니다.

jsp_life_cycle.jpg


JSP 컴파일

브라우저가 요청할 때 JSP 페이지에서 JSP 엔진은 먼저 이 파일을 컴파일해야 하는지 여부를 확인합니다. 이 파일이 컴파일되지 않았거나 마지막 컴파일 이후 변경된 경우 JSP 파일을 컴파일하십시오.

컴파일 프로세스에는 세 단계가 포함됩니다.

  • JSP 파일을 구문 분석합니다.

  • JSP 파일을 서블릿으로 변환합니다.

  • 서블릿을 컴파일합니다.


JSP 초기화

컨테이너는 JSP 파일을 로드한 후 요청에 서비스를 제공하기 전에 jspInit() 메서드를 호출합니다. 사용자 정의 JSP 초기화 작업을 수행해야 하는 경우 다음과 같이 jspInit() 메서드를 재정의하면 됩니다.

public void jspInit(){
  // 初始化代码
}

일반적으로 프로그램은 한 번만 초기화되며 서블릿의 경우에도 마찬가지입니다. 일반적으로 데이터베이스 연결을 초기화하고, 파일을 열고, jspInit() 메소드에서 쿼리 테이블을 생성할 수 있습니다.


JSP 실행

이 단계에서는 JSP 라이프사이클이 파기될 때까지 JSP 라이프사이클의 모든 요청 관련 상호작용을 설명합니다.

JSP 웹페이지 초기화가 완료되면 JSP 엔진은 _jspService() 메소드를 호출합니다.

_jspService() 메소드에는 다음과 같이 HttpServletRequest 객체와 HttpServletResponse 객체가 매개변수로 필요합니다.

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服务端处理代码
}

_jspService() 메소드는 각 요청마다 한 번씩 호출되며 해당하는 또한 GET, POST, DELETE 등과 같은 7가지 HTTP 메서드 모두에 대한 응답을 생성하는 역할도 담당합니다.


JSP 정리

JSP 라이프사이클의 파기 단계에서는 JSP 웹 페이지가 컨테이너에서 제거될 때 어떤 일이 일어나는지 설명합니다.

JSP의 jspDestroy() 메소드는 서블릿의 소멸 메소드와 동일합니다. 데이터베이스 연결 해제, 폴더 닫기 등 정리 작업을 수행해야 하는 경우 jspDestroy() 메서드를 재정의하세요.

jspDestroy() 메소드의 형식은 다음과 같습니다.

public void jspDestroy()
{
   // 清理代码
}

인스턴스

JSP 라이프사이클 코드 예제는 다음과 같습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>life.jsp</title>
</head>
<body>

<%! 
  private int initVar=0;
  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>php中文网 JSP 测试实例</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>

</body>
</html>

브라우저 페이지를 열면 출력 결과는 다음과 같습니다.

E80496E2-35DF-439F-8A43-6376D92DFA45.jpg