[JSP] 웹 프로그래밍

[JSP] JSP 페이지의 처리 과정과 생명 주기, 동/정적 웹 페이지 특징

ITsubin 2022. 3. 4. 17:47

[ 정적 웹페이지 ]

- 컴퓨터에 저장된 텍스트 파일을 그대로 보는 것입니다.

- HTML(HyperText Markup Language)가 이에 해당합니다.

 

[ 동적 웹페이지 ]

- 저장된 내용을 다른 변수로 가공 처리하여 보는 것입니다.

- PHP(Personal Home Page), ASP(Active Server Page), JSP(JavaServer Pages)가 이에 해당합니다.

 

[ JSP 페이지의 처리 과정 ]

1. 클라이언트의 웹 브라우저가 웹 서버에 JSP를 요청하면 웹 서버는 요청된 파일에서 jsp 확장자를 발견하여 JSP 페이지임을 확인하고 웹 서버에 있는 JSP 컨테이너에 전달합니다.

 

2. JSP 컨테이너는 JSP 페이지를 서블릿 프로그램으로 변환합니다. ( .jsp => .java )

 

3. JSP 컨테이너가 서블릿 프로그램을 컴파일하여 웹 서버에 전달합니다. ( .java => .class )

 

[ JSP 생명 주기 ]

 

1. 번역 (번역 단계를 거치면 확장자가 .jsp에서 .java로 변경됩니다.)

  - JSP 컨테이너가 JSP 소스 파일을 자바 코드(서블릿)로 변환합니다. 번역 단계에서 JSP 컨테이너는 JSP 파일을 읽고 구문을 분석합니다. JSP 컨테이너는 JSP 페이지와 페이지에 사용된 태그 라이브러리를 참조하는 사용자 정의 태그와 표준 디렉티브, 액션 태그의 구문 정확성을 검증합니다.

 

2. 컴파일 (컴파일 단계를 거치면 확장자가 .java에서 .class로 변경됩니다.)

  - JSP 컨테이너가 번역 단계에서 생성된 자바 코드인 서블릿을 컴파일하여 클래스 파일을 생성합니다. 컴파일 단계에서는 자바 코드의 모든 구문을 검사합니다. 즉, JSP 페이지 내의 선언문, 처리문, 표현문 등의 스크립트 태그를 사용하여 삽입된 자바 코드의 구문 오류를 검사합니다.

 

3. 로딩 및 초기화 [ 메소드 : jspInit() ]

  - JSP 컨테이너가 앞의 두 단계에서 생성된 *.class를 로딩하고 클래스의 인스턴스를 작성합니다. 이 때, 인수가 없는 생성자를 사용합니다. 이후 JSP 컨테이너는 서블릿의 init() 메소드, 즉 jspInit()를 호출하여 인스턴스가 된 객체를 초기화합니다. 일반적으로 초기화는 한 번만 수행되고 데이터베이스 연결, 파일 열기, 룩업 테이블 생성 등을 초기화합니다.

 

4. 실행 [ 메소드 : _jspService() ]

  - 각 클라이언트의 요청에 대해 JSP 컨테이너가 요청 및 응답 객체를 전달하는 _jspService() 메소드를 실행합니다. 웹 브라우저가 JSP 페이지를 요청하여 페이지가 로딩 및 초기화될 때마다 JSP 컨테이너는 JSP에서 _jspService() 메소드를 호출하여 응답 객체를 전달합니다. 이 단계는 JSP 생명 주기가 끝날 때까지 모든 클라이언트의 요청에 대해 상호 작용을 합니다.

 

5. 소멸 [ 메소드 : jspDestory() ]

  - JSP 생명 주기를 완료합니다. JSP 컨테이너는 실행되고 있는 JSP를 jspDestory() 메소드를 사용하여 제거합니다. jspDestory() 메소드는 서블릿의 destory() 메소드에 해당합니다. 이 메소드는 데이터베이스 연결 해제 또는 열려 있는 파일 닫기 등을 수행해야 할 때 jspDestory() 메소드를 오버라이딩합니다. JSP 컨테이너가 해당 서블릿 인스턴스를 제거할 때 어떤 활동을 정리하기 위해 jspDestory() 메소드를 호출합니다.