[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 )
신기하게도 jsp 파일로 작성했던 파일이 java 파일로 바껴있다! <% %> 스크립틀릿 내부에 썼던 자바 코드가 지시어 없이 java 코드로 동작하고 있는 것을 볼 수 있다. 즉 jsp 파일이 실행 될 때 라이프사이클을 살펴보면,
<%! : 선언식 이라고 한다. 클래스의 메서드 혹은 필드를 선언할 때 사용되며 Service 내부가 아닌 바깥쪽에 코드가 생성된다.
코드를 실행하고 .java 파일을 확인해보면 Service 메서드가 아닌 바깥 쪽에 선언된 것을 확인 할 수 있다.
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,
null, true, 8192, true);
_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 파일이 실행 될 때 라이프사이클을 살펴보면,
- 이클립스 워크스페이스 아래 .metedata폴더에 test.java 파일이 생성된다.
- 해당 파일의 _jspService() 메소드 안을 살펴 보면 jsp 파일의 내용이 변환되서 들어가 있는 것을 알 수 있다.
- test.java는 서블릿 소스로 자동으로 컴파일 되면서 실행되서 그 결과가 브라우저에 출력된다.
[JSP 의 실행순서]
- 부라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다
- 브라우저가 요청한 JSP파일의 서블릿이 존재하는지 확인하고 없다면 위의 작업을 먼저 수행한다.
- 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.
변경된 자바 파일을 살펴보면 사용자가 입력한 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: