JSP의 정의와 라이프싸이클
학습 목표
- Ajax기술은 왜 나왔고, 어떻게 사용하는지 이해한다.
- jsp가 무엇인지 이해한다.
- jsp의 간단한 사용법을 알아본다.
- jsp의 라이프 사이클을 이해한다.
- jsp를 이용해서 init, destroy 메소드를 이용할 수 있다.
핵심 개념
- XMLHTTPRequest
- Ajax
- jsp(java server page)
- jsp라이프싸이클
Ajax통신의 이해
- Ajax(XMLHTTPRequest통신) - 웹에서 데이터를 갱신할 때, 브라우저의 새로고침 없이 서버로부터 데이터를 받는 것이 좋겠다는 생각에서 출발한 기술이다.
- JSON - JavaScript Obeject Notation의 약자로 데이터포멧으로 이용된다. 사실상의 데이터 표준 포멧이다. {key:value, key:value, ... }의 형태로 되어있다.
JSP의 등장배경
Microsoft에서 ASP(Active Server Page)라는 웹을 쉽게 개발할 수 있는 스크립트 엔진을 발표하였다. Servlet만으로 하는 개발은 ASP에 비하여 상대적으로 개발 방식이 불편하였고 이에 대항하기 위해 1999년 썬마이크로시스템즈에서 서블릿의 기술을 사용한 JSP를 발표하게 되었다.
JSP란
Java Server Page의 약자로 HTML안에서 java code를 이용할 수 있는 기술이다. JSP 파일은 Dynamic web project의 webContent 디렉토리 안에 만든다. 모든 JSP는 Servlet으로 바뀌어 동작하게 되며 기본적인 포멧은 다음과 같다.
- <% java code %> => 자바 코드를 작성할 때 사용한다.
- <%= content %> => content를 화면에 표시해준다.
JSP를 사용하여 1~10까지 합을 구하는 코드를 간단하게 살펴보자.
이클립스에서 JSP 파일을 만들어 작성한 코드이다. 코드 맨 위의 <% %>안에 JSP에 대한 설정이 들어가있다. 위의 코드에서 보듯 HTML의 중간에 <% %>포멧을 이용하여 java code를 실행시킬 수 있으며, <%=total%>을 통해 total값을 화면에 표시하고 있음을 알 수 있다.
JSP 라이프싸이클
WAS는 브라우저로부터 JSP에 대한 요청을 받게 되면, JSP코드를 서블릿 코드로 변환한 후 컴파일하여 실행되게 한다. 따라서, 서블릿으로 컴파일되어 실행될 때 상황에 따라 어떤 메소드들이 실행되는지 잘 알아야, JSP를 알맞게 작성할 수 있다.
JSP에서 사용자가 만든 코드는 기본적으로 Servlet으로 바뀌며, service(_jspService)메소드 안에 들어가게 된다. 위에서 작성한 JSP 파일이 서블릿으로 변경된 파일을 살펴보겠다.
기본적으로 body에서 작성한 내용이 service메소드 안에 작성된 모습을 볼 수 있다. JSP에서 Servlet으로 바뀌는 기본 과정은 다음과 같다.
JSP ----> Servlet
일반 text ----> out.write(text);
<%java%> ----> java code
<%=content%> ----> out.print(content);
JSP의 실행순서
- 브라우저가 웹 서버에 JSP에 대한 요청 정보를 전달한다.
- 브라우저가 요청한 JSP가 최초로 요청했을 경우만 JSP로 작성된 코드가 서블릿 코드로 변환된다.(java file생성)
- 서블릿 코드를 컴파일해서 실행 가능한 bytecode로 변환한다. (class파일 생성)
- 서블릿 클래스를 로딩하고 인스턴스를 생성한다.
- 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.
JSP 라이프 싸이클 실습
이클립스에서 lifecycle.jsp를 작성한 후,
- 브라우저로 최초 요청
- 브라우저로 두번째 요청
- lifecycle.jsp를 수정 후 요청했을 때
어떤 결과가 나오는지 확인한다. JSP는 Servlet으로 변환되어 동작하게 되므로, Servlet과 같은 라이프싸이클을 갖게 된다. 즉,
init(jspInit) -> service(_jspService) -> destroy(jspDestroy)
의 순서로 라이프싸이클이 동작하게 된다.
<%! %>의 형식을 이용하면, service 메소드 바깥에 변수, 메소드 등의 코드를 만들 수 있으므로 이를 이용하여 메소드를 오버라이딩하고 여러가지 실험을 진행해보면 좀 더 직관적으로 와닿을 것이다. 다음은 기본적인 예시이다.