JSP

[JSP] 22. JSP 라이프 사이클

Song hyun 2024. 7. 3. 10:52
728x90
반응형

[JSP] 22. JSP 라이프 사이클

 

1. JSP 라이프 사이클이란?

=> JSP 페이지가 요청을 처리하는 일련의 과정을 의미한다.

(1) JSP 페이지 번역
-.jsp 파일 -> _jsp.java

(2) JSP 페이지 컴파일
-_jsp.java -> _jsp.class

(3) 클래스 로딩
-컴파일된 클래스 파일을 JVM으로 로드한다.

(4) 인스턴스화
-서블릿 클래스의 객체를 생성한다.

(5) 초기화
-서블릿 객체를 초기화한다. (init() 메서드 작동)

(6) 요청 처리
-클라이언트의 요청을 처리하고, 응답을 생성한다.

(7) 소멸
-서블릿 객체가 소멸될 때 자원을 해제한다. (destroy() 메서드 작동)
WAS (웹 애플리케이션 서버)
│├── 웹 컨테이너 (Web Container)
│ │ │ ├── 서블릿 컨테이너 (Servlet Container)
│ │ ├── 서블릿 클래스 로딩
│ │ ├── 서블릿 인스턴스 생성
│ │ ├── 서블릿 초기화 (init)
│ │ ├── 요청 처리 (service, doGet, doPost)
│ │ └── 서블릿 소멸 (destroy)
│ │ │ └── JSP 컨테이너 (JSP Container)
|  |
│ ├── JSP 페이지 번역 (Translation)
│ ├── JSP 페이지 컴파일 (Compilation)
│ ├── 클래스 로딩 (Class Loading)
│ ├── 인스턴스화 (Instantiation)
│ ├── 초기화 (jspInit)
│ ├── 요청 처리 (jspService)
│ └── 소멸 (jspDestroy)
│ │ └── ...

 

 

 

2. 시나리오 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		// http://localhost:8080/jsp/example.jsp
		// 초기화 단계(jspInit 역할)
		if(application.getAttribute("initialized")==null){
			application.setAttribute("initialized", true);
			application.setAttribute("initializedTime", new Date());
			out.println("JSP가 초기화 되었습니다. <br>");
		}
		out.println("요청이 완료 되었습니다. <br>");
		out.println("현재 시간 : "+new Date()+" <br>");
	%>>

</body>
</html>

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		// http://localhost:8080/jsp/example.jsp
		// 초기화 단계(jspInit 역할)
		if(application.getAttribute("initialized")==null){
			application.setAttribute("initialized", true);
			application.setAttribute("initializedTime", new Date());
			out.println("JSP가 초기화 되었습니다. <br>");
		}
		out.println("요청이 완료 되었습니다. <br>");
		out.println("현재 시간 : "+new Date()+" <br>");
		
		// 세션이라는 전역 메모리지에 데이터를 저장하고 확인해 보자.
		String message=(String)session.getAttribute("message");
		if(message != null){
			out.println("세션 메세지 : "+message);
		} else {
			out.println("저장된 세션 메세지가 없습니다.");
		}
		
		// 세션이라는 메모리에 key,value를 할당하자.
		session.setAttribute("message","안녕! 세션에 저장한 메세지야");
		
	%>>

</body>
</html>

 

initialized가 not null이기 때문에 삭제 문구가 출력된다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%
		// http://localhost:8080/jsp/example.jsp
		// 초기화 단계(jspInit 역할)
		if(application.getAttribute("initialized")==null){
			application.setAttribute("initialized", true);
			application.setAttribute("initializedTime", new Date());
			out.println("JSP가 초기화 되었습니다. <br>");
		}
		out.println("요청이 완료 되었습니다. <br>");
		out.println("현재 시간 : "+new Date()+" <br>");
		
		// 세션이라는 전역 메모리지에 데이터를 저장하고 확인해 보자.
		String message=(String)session.getAttribute("message");
		if(message != null){
			out.println("세션 메세지 : "+message);
		} else {
			out.println("저장된 세션 메세지가 없습니다.");
		}
		
		// 세션이라는 메모리에 key,value를 할당하자.
		session.setAttribute("message","안녕! 세션에 저장한 메세지야");
		
	%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
 	<h1>JSP 라이프 사이클 확인</h1>
 	<p>이 페이지의 학습 목적은 JSP 동작 방식에 대한 이해와 라이프 사이클입니다.</p>
 
</body>
</html>

<%
	// 소멸 단계 확인 (jspDestroy)
	if(application.getAttribute("initialized")!=null){
		application.removeAttribute("initialized");
		application.removeAttribute("initializedTime");
		out.println("jsp 객체(서블릿)가 소멸되었습니다 ㅠㅠ <br>");
	}
%>
728x90
반응형