[Web] 17. JSP Life Cycle

JSP Life Cycle

JSP는 JSP 자체가아니라 서블릿으로 바뀌어서 동작한다. 코드를 실행하면 TomCat이 서블릿으로 바꿔주는 역할을 한다. 이클립스 workbench 디렉토리를 따라가보면 java 서블릿 파일로 톰캣이 바꿔놓은 파일을 찾을 수 있다.
(경로 :
 .metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\firstweb\org\apache\jsp )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                  nulltrue8192true);
      _jspx_page_context = pageContext;
     ......
      _jspx_out = out;
      out.write("\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 = 1;
    for(int i=1;i<=10;i++){
        total=total + i;
    }
      out.write("\r\n");
      out.write("\r\n");
      out.write("1부터 10까지의 합 : ");
      out.print(total );
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
cs

신기하게도 jsp 파일로 작성했던 파일이 java 파일로 바껴있다! <% %> 스크립틀릿 내부에 썼던 자바 코드가 지시어 없이 java 코드로 동작하고 있는 것을 볼 수 있다. 즉 jsp 파일이 실행 될 때 라이프사이클을 살펴보면,

  1. 이클립스 워크스페이스 아래 .metedata폴더에 test.java 파일이 생성된다.
  2. 해당 파일의 _jspService() 메소드 안을 살펴 보면 jsp 파일의 내용이 변환되서 들어가 있는 것을 알 수 있다.
  3. test.java는 서블릿 소스로 자동으로 컴파일 되면서 실행되서 그 결과가 브라우저에 출력된다. 
[JSP 의 실행순서]
  1. 부라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다
  2. 브라우저가 요청한 JSP파일의 서블릿이 존재하는지 확인하고 없다면 위의 작업을 먼저 수행한다.
  3. 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.

변경된 자바 파일을 살펴보면 사용자가 입력한 jsp코드는 Service () 메서드 내부만 수정되고 있는 것을 알 수 있는데 이는 응답이 포함되는 부분은 Service()뿐이기 때문에 당연한 일이다. 하지만 Service 뿐 아니라 다른 메소드도 접근이 가능하다.


<%! : 선언식 이라고 한다. 클래스의 메서드 혹은 필드를 선언할 때 사용되며 Service 내부가 아닌 바깥쪽에 코드가 생성된다.

1
2
3
4
5
6
7
8
9
10
11
<%!
    public void jspInit(){
    System.out.print("jspInit()dddd");
    } 
%>
<%!
    public void jspDestroy(){
    System.out.print("jspDestroy()");
    } 
%>
cs

코드를 실행하고 .java 파일을 확인해보면 Service 메서드가 아닌 바깥 쪽에 선언된 것을 확인 할 수 있다.







No comments:

Powered by Blogger.