6. JSP의 동작 구조
정적인 페이지에 대한 요청, 즉 HTML, 여러 이미지, 텍스트 파일들에 대한 요청은 웹 서버에서 해결한다.
그리고 동적인 페이지에 대한 요청 즉 JSP 페이지에 대한 요청은 웹 서버에서 JSP 컨테이너로 다시 전달된다. 이렇게 해서 JSP 페이지가 웹 컨테이너에 의해 실행된다.
호출을 통한 JSP 페이지의 내부적인 처리방식에 대해 알아보자.
URL에서 ***.jsp에 대한 요청을 웹 서버에게 하면 웹 서버는 JSP에 대한 요청을 다시 JSP 컨테이너로 넘기게 돈다. 이런 요청을 받은 JSP 컨테이너는 해당 JSP 페이지를 찾아 '서블릿'이라고 부르는 자바 파일로 변환시킨 다음 자바 파일을 컴파일한다. 그런 다음 컴파일된 자바 파일의 실행 결과가 사용자의 브라우저로 전송된다.
단계별로 설명해보자면,
① 사용자의 브라우저에서 http://servername..../***.jsp 형태로 요청한다.
② 웹 서버는 ***.jsp의 형태로 온 요청에 대해 JSP 컨테이너로 처리하게끔 요청 정보를 넘긴다.
③ 해당 JSP 파일이 처음 요청된 것이라면 JSP 파일을 파싱한다. 이전에 요청된 것이면 ⑥의 단계로 간다.
JSP파일은 실행을 위해서 결국엔 클래스 파일로 변환되는데 이런 과정은 JSP 파일이 처음으로 호출되었을 때만 거치게 된다. 만일 이전에 어떤 JSP 파일이 호출이 되었다면 두 번째 이후로 들어온 해당 JSP 파일의 요청에 대해서 ④, ⑤ 단계의 생성 및 변환 과정은 거치지 않게 된다.
④ JSP 파일로부터 서블릿이라는 새로운 자바 파일이 생성된다. JSP 파일을 기본으로 해서 서블릿이라는 자바 파일이 새롭게 생성된다.
⑤ 서블릿 파일은 실행 가능한 상태인 클래스 파일로 컴파일된다.
⑥ 클래스 파일이 메모리에 적재되어 실행된다.
⑦ 클래스 파일의 실행결과는 다시 웹 서버에게 넘겨져 웹 서버는 HTML 형태로 사용자에게 응답 내용을 전송한다. 이는 처음에 사용자가 JSP 파일을 요청한 것에 대한 응답으로 HTML 형태의 내용을 전송하게 되는 것이다.
⑧ 웹 서버로부터 받은 응답인 HTML로 구성된 페이지를 브라우저에서 실행시켜 웹 페이지가 보이게 된다. 사용자의 브라우저는 HTML 태그로 구성된 페이지를 실행시켜주는 프로그램이다.
<TIP1> 웹 어플리케이션(WEB Application)
웹 어플리케이션은 특별한 구조를 가진다.
① 웹 어플리케이션의 루트 폴더 : HTML, JSP, 이미지 등이 위치할 폴더이다. 이 루트 폴더에 있는 자원(HTML, JSP, 이미지 등)이 웹 컨테이너(JSP, 컨테이너 등)에 의해 서비스된다.
② WEB-INF 폴더: WEB-INF 폴더 안에는 classes 폴더, lib 폴더가 위치한다. 먼저 classes 폴더 안에는 컴파일된 자바 파일(class 파일)들이 위치하게 되어 컨테이너에 의해 사용된다.
lib 폴더 안에는 여러 class파일들이 묶어진 jar 파일이 위치하게 되어 역시 웹 컨테이너에 의해 사용이 된다.
myapp라는 이름을 가진 웹 어플리케이션은 myapp 폴더 내의 파일들을 실행하고, 필요한 클래스 파일은 classes 폴더 내에 있는 클래스 파일을 사용한다. 필요한 경우 lib 폴더에 있는 jar 파일을 사용하게 된다.
웹 어플리케이션은 ①, ②의 요소를 반드시 필요로 한다. myapp이라는 웹 어플리케이션을 사용하기 위해 myapp이라고 이름 지어진 웹 어플리케이션 루트 폴더와 WEB-INF 폴더가 필요하다는 의미이다.
<TIP2> 파싱
서블릿이라는 파일을 JSP 컨테이너가 만들어 내기 위해 JSP가 어떤 작업을 하는 파일인지 알아야 한다. 그러기 위해 JSP 파일을 정확하게, 오타나 논리적인 오류가 없는지에 대해 읽는 것이라고 할 수 있다.
'IT || 개발공부' 카테고리의 다른 글
[Java] Java 기초 문법 (문법/구조/개념/변수) (0) | 2023.02.04 |
---|---|
[JSP] JSP의 생명주기(JSP의 처리단계) (0) | 2023.02.02 |
[웹 프로그래밍] 배치기술자 Web.xml (개념) (0) | 2023.02.01 |
[Servlet] Servlet 이해하기(2) (서블릿과 자바의 관계) (0) | 2023.01.31 |
[Servlet] Servlet 이해하기(1) (0) | 2023.01.31 |
댓글