[JSP] JSP 라이프 싸이클

2019. 2. 25. 02:25JAVA Back-End

이전의...내용


WAS (Web Application Server)는 웹브라우저에게서 JSP에 대한 요청을 받으면 

JSP코드를 --> Servlet코드로 변환 후 컴파일하여 실행됩니다.


JSP LifeCycle

 다른 정적파일(html/css/img)를 다이나믹 웹 프로젝트의 WebContent에 넣어주는 것처럼 jsp파일도 WebContent에 생성해서 작성합니다. sumTen.jsp를 하나 생성해보겠습니다.

sumTen.jsp 


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
    int total = 0;
    for(int i=0; i<10; i++){
        total += i;
    }
%>
1~10까지의 합: <%=total %>
</body>
</html>


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

  • 이클립스 workspace 아래의 .metadata폴더에 (workspace/java/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/FirstWeb/org/apache/jsp) 필자의 경로를 따라 jsp로 들어가면 sumTen.java 파일이 생성되는 걸 확인할 수 있습니다
  • 해당 자바파일에 _jspService() 메소드 안을 살펴 보면 jsp파일의 내용이 변환되서 들어가 있는 것을 확인할 수 있습니다.

public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {

// ...중략... Exception처리 부분은 제외된 코드입니다.

out.write(" <!--JSP를 실행하는 WAS에게 보내는 지시문-->>\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\r\n");
    int total = 0;
    for(int i=0; i<10; i++){
        total += i;
    }
out.write("\r\n");
out.write("\r\n");
out.write("1~10까지의 합: ");
out.print(total ); // <%=total%>이 서블릿으로 변환되면서 print된다.
out.write("\r\n");
out.write("<!-- 서블릿으로 바뀌면 out.print(total)이 된다 -->\r\n");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
}


  • sumTen.java는 Servlet소스로 자동으로 컴파일 되면서 실행되어 그 결과가 브라우저에 보여집니다.

JSP 실행순서

1. 브라우저가 웹서버에 JSP에 대한 요청 정보 전달
2. 브라우저가 요청한 JSP가 최초 요청했을 경우만 밑의 과정을 거친다
1) JSP 코드 --> Servlet코드로 변환 (java 파일 생성)
2) Servlet코드를 컴파일해 실행가능한 바이트코드로 변환 (class 파일 생성)
3) Servlet 클래스를 메모리에 로딩해고 인스턴스를 생성합니다.
3. Servlet이 실행되 요청을 처리하고 응답 정보를 생성합니다.

JSP 라이프 사이클

    • 브라우저로 최초 요청했을 때 
      • _jspInit() -> _jspService()
    • 브라우저로 두 번째 요청했을 때
      • _jspService()
    • .jsp 파일을 수정 후 요청했을 때 
      • _jspDestroy() -> _jspInit() -> _jspService()
Life Cycle of JSp
[출처] https://www.studytonight.com/jsp/lifecycle-of-jsp.php

1. JSP코드를 Servlet코드로 컴파일
2. Servlet코드를 Bytecode로 컴파일
3. Servlet 클래스를 로딩
4. Servlet 인스턴스를 생성
5. _jspInit() 메소드 호출하여 초기화
6. _jspService() 메소드를 호출하여 Request 처리
7. _jspDestroy() 메소드 호출을 통해 Destory

응답(reponse)에 대한 것은 _jspService밖에 없습니다. 매번 호출되는 것은 Service입니다. 
즉, <% %> 내의 코드는 Service로 등록되어 _jspService() 메소드 내에서 처리됩니다. (계속 호출되면 반복되는 서비스) 
그렇다면, JSP에서는 _jspService() 내에서 밖에 못쓰냐! 그렇지 않습니다. <%! %> 선언식을 통해서_jspService()메소드 밖에서 만들 수 있습니다.







'JAVA Back-End' 카테고리의 다른 글

[JSP] JSP 내장객체  (0) 2019.02.25
[JSP] JSP문법  (0) 2019.02.25
[JSP] JSP?  (0) 2019.02.22
[JSP/Servlet] Request / Response 객체  (0) 2019.01.30
[JSP/Servlet] Servlet 생명주기  (0) 2019.01.28