서블릿이 먼저 등장했었지만 디자이너가 자바를 이해 못한 채 HTML 코드를 서블릿에서 작성한다는 것은 불가능하기 때문에 JSP가 등장했다.
※ 서블릿과 JSP의 차이
- 서블릿 : 자바 기반으로 웹 애플리케이션을 작성하기 위한 도구, HTML 코드가 자바 코드 안에 들어가는 구조이다.
- JSP : HTML 문서에 자바 코드가 들어가는 구조
JSP는 서블릿보다 간편하게 웹 애플리케이션을 개발하기 위해서 등장한 것이기 때문에 서블릿 컨테이너는 JSP를 있는 그대로 받아들이지 못하고 이를 서블릿으로 변환한 후에 동작시킨다.
• JSP파일의 변환(myCount.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 count = 0;
out.print("count : ");
out.println(++count);
%>
</body>
</html>
서블릿 컨테이너는 JSP를 직접 해석하지 못하고 JSP를 서블릿으로 변환한 후에 서블릿만 해석한다.
파일을 확인해본다.
JSP 문서의 이름(myCount.jsp)와 유사한 이름의 서블릿 파일(myCount_jsp.java)과 서블릿 클래스 파일(myCount_jsp.class)을 확인할 수 있다. 이들 파일들은 우리가 만든 JSP 파일을 기본으로 하여 서블릿 컨테이너가 서블릿 파일로 변환해 놓은것이다.
※ JSP가 서블릿 컨테이너에서 동작하는 순서
우리가 웹 브라우저의 주소란에 "http://localhost:8181/web_2/myCount.jsp"를 입력하여 myCount.jsp 파일을 요청하면 이를 웹 서버는 myCount_jsp.class를 달라는 것으로 의역한다.
- ① 브라우저에서 JSP 페이지("myCount.jsp")를 웹 서버에게 요청한다.
- ② 웹 서버는 JSP에 대한 요청을 서블릿 컨테이너에게 넘긴다. 그러면 서블릿 컨테이너는 해당 JSP를 찾아서 서블릿 파일(myCount_jsp.java)을 생성한다.
- ③ 서블릿 파일은 컴파일되어 서블릿 클래스 파일(myCount_jsp.class)을 생성한다.
- ④ 서블릿 수행 결과가 웹 서버에 전송된다.
- ⑤ 사용자는 서블릿의 출력 결과인 HTML 현태로 응답 결과를 보게 된다.
※ JSP가 서블릿에 비해 처리 속도가 느리지 않는 이유
클라이언트가 요청한 것은 JSP 파일이지만 응답하는 것은 JSP 파일이 아니라 .class 확장자를 가지고 있는 서블릿 파일이다.
JSP는 서블릿으로 변환되는 과정이 추가되기 때문에 서블릿보다 응답시간이 느릴 것이라고 생각할 수 있지만, 서블릿과 JSP는 응답하는 데 걸리는 시간 차이가 그리 크지 않다. 왜냐하면 JSP가 서블릿으로 변환되는 과정은 JSP 페이지가 최초로 요청되었을 때 단 한 번뿐이고 이미 요청되었던 페이지가 다시 요청되면 이미 변환이 된 서블릿 파일로 서비스가 처리되기 때문이다.
※ 웹 컨테이너가 JSP 페이지를 처리하는 순서
- ① 사용자가 브라우저 주소 창에 http://localhost:8181/web_2/myCount.jsp를 입력하여 요청을 한다. 웹 서버는 JSP 페이지(myCount.jsp) 형태의 요청에 대해서 웹 컨테이너로 하여금 처리하도록 파일을 넘긴다.
- ② JSP 페이지(myCount.jsp)가 처음으로 요청된 것이면 JSP 파일을 변환하여 서블릿 자바 파일(myCount_jsp.java)을 생성한다.
- ③ 서블릿 파일은 실행 가능한 상태인 클래스 파일(myCount_jsp.class)로 컴파일 된다.
- ④ 클래스 파일이 메모리에 적재되어 실행된다.
- ⑤ 실행 결과가 웹 서버에 넘겨지면 웹 서버는 HTML 형태로 사용자에게 응답하게 된다. 사용자는 브라우저에 넘겨진 페이지를 출력하여 결과를 볼 수 있게 된다.
두 번째 이후로 동일한 JSP 페이지가 요청되면 메모리에 로드된 클래스 파일이 응답 처리된다. 그렇기 때문에 서블릿과 JSP는 응답하는 데 걸리는 시간 차이가 그리 크지 않다.
'JSP' 카테고리의 다른 글
[JSP&Servlet] JSP 내장 객체 (0) | 2020.10.08 |
---|---|
[JSP&Servlet] JSP 기본태그 (0) | 2020.10.07 |
[JSP&Servlet] JSP와 HTML의 동작 차이 (0) | 2020.10.07 |
[JSP&Servlet] 서블릿의 다양한 입력 양식 데이터 통신 (0) | 2020.10.01 |
[JSP&Servlet] 서블릿의 응답, 요청 한글 처리 (0) | 2020.10.01 |