본문 바로가기

Tech/BoostCourse - WEB

[부스트코스] JSP 라이프싸이클

jsp는 jsp가 실행되는 것이 아니라 서블릿으로 변경이 되는 것이다.

톰캣이 실행될 때 jsp를 서블릿으로 바꾸는 것이다.

 

example.jsp가 실행될 때 벌어지는 일

- 이클립스 워크스페이스 아래의 .metadata 폴더에 example_jsp.java 파일이 생성된다.

- 해당 파일의 _jspService() 메소드 안을 살펴보면 jsp파일의 내용이 변환되서 들어가 있는 것을 확인할 수 있다.

- example_jsp.java는 서블릿 소스로 자동으로 컴파일 되면서 실행되서 그 결과가 브라우저에 보여진다.

 

JSP의 실행순서

1. 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다.

2. 브라우저가 요청한 JSP가 최초로 요청했을 경우만

  1) JSP로 작성된 코드가 서블릿으로 코드를 변환한다. (java 파일 생성)

  2) 서블릿 코드 컴파일해서 실행가능한 bytecodes로 변환한다. (class 파일 생성)

  3) 서블릿 클래스를 로딩하고 인스턴스를 생성한다.

3. 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.

 

 

jsp로 요청이 들어왔을 때 서버는 jsp에 해당하는 서블릿이 존재하는지 체크한다.

요청이 최초인지 아닌지 확인해 존재한다면 서블릿 엔진이 요청을 받아 서블릿 라이프싸이클 대로 실행할 것이고,

존재하지 않으면 jsp 엔진이 이를 받아 알맞은 서블릿으로 만들고, 컴파일하는 등 서블릿 객체를 생성하는 일들을 수행함.

 

 

한편, 위에서 jsp파일 내에서 <% %>로 작성했던 자바코드는 변환된 자바 파일에서 _jspService() 메소드 안으로 들어간다고 설명했다.

비즈니스 로직이 많아질수록 _jspService()의 내용은 그에 따라 많아지게 될 것이다.

생각만해도 메소드를 분리하고 싶은 욕구가 가득해지는 상황이다.

다행히도 jsp에서 <%! %>형태의 선언식을 사용함으로써 이를 해결할 수 있다. _jspService() 바깥에 메소드 혹은 필드를 선언하고자 할때 사용하면 된다.

 

 

lifecycle.jsp 실습 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hello
<%
	System.out.println("_jspService()");
%>

<%!
public void jspInit() {
	System.out.println("jspInit()!");
}

public void jspDestroy() {
	System.out.println("jspDestroy()");
}
%>

</body>
</html>

 

[부스트코스 관련 강의 링크]

JSP 라이프싸이클 - https://www.edwith.org/boostcourse-web/lecture/16703/

 

[LECTURE] 2) JSP 라이프싸이클 : edwith

들어가기 전에 WAS는 웹 브라우저로부터 JSP에 대한 요청을 받게 되면, JSP코드를 서블릿 소스코드로 변환한 후 컴파일 하여 실행되게 됩니다. 서블릿으로 컴파일되어 실행될 때 ... - 부스트코스

www.edwith.org

반응형