JSP 란?
JSP는 Java Server Page의 약어로서 HTML 태그에 자바로 프로그래밍하여 브라우저에 보여주는 페이지입니다.
JSP 문서는 HTML 태그 사이에 <% %>( JSP가 제공해주는 스크립트릿 태그)를 추가하여 그 안에 자바 코드를 집어 넣으면 서블릿 컨테이너는 이 부분을 JSP로 인식하여 이를 해석한 후 HTML형태로 변환된 내용이 브라우저를 통해서 나타납니다.
(( JSP파일은 톰캣 서버가 번역하여 그 결과를 HTML 태그로 변환한 후 웹브라우저에 내려보낸다. ))
두 수의 합을 출력하는 JSP
예제)
<!--긁지않은 개발자-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>긁지않은 개발자</title>
</head>
<body>
<%
int num1 = 20;
int num2 = 10; // <body> 안에 <% 내용 %>
int h = num1 + num2;
out.ptinln(num1 + " + " + num2 + " = " + h);
%>
</body>
</html>
위 예제 에서는
<%@ page %> 태그가 사용되었는데 이 태그는 해당 페이지 내에 사용되는 전반적인 환경을 결정해주는 태그입니다.
이 페이지에서 language="java"는 사용하는 언어가 자바이며 contentType="text/html;는 이페이지가 html 문서이며 charset=UTF-8 pageEncoding="UTF-8"는 한글 인코딩을 UTF-8로 처리하겠다는 의미입니다.
<% %> 태그를 스크립트릿(scriptlet)이라고 하고 <%= %> 태그는 표현식(expression)이라고 합니다.
JSP 페이지에 기술한 내용은 HTML로 간주되기 때문에 자바 코드를 기술하기 위해서는 <% %> 태그 내부에 기술해야 하며 변수에 저장된 값이나 함수의 결과값을 출력하기 위해서는 <%= %> 태그를 사용합니다.
(페이지 소스보기 하면 <%%> 스크립트릿은 없어지고 HTML 형태로 변환되서 나온다)
서블릿과 JSP 차이
servlet(서블릿) 확장자 .java
서블릿은 서버에서 웹 페이지를 동적으로 생성하거나 데이터를 처리를 수행하기 위해 자바로 작성된 프로그램
java코드 안에 HTML 태그가 삽입되며 자바언어로 되어있다.
1. 자바코드로 구현, 컴파일 배포해야함
2.HTML 태그로 문자열(" ") 스트림으로 처리해야함.
3.코드가 수정되면 다시 컴파일하고 배포
JSP (Java Server Page) 확장자 .jsp
HTML 내부의 자바코드를 삽입하는 형식
서블릿 기반의 서버 스크립트 기술이다.
1. 키워드가 태그화되어 서블릿에 비해 배우기 쉬움
2. 자바 코드를 <%%> 태그안에 처리해줘야함
3.HTML 처럼 태그를 사용하여 자바코드도 사용이 가능
서블릿을 이용하면 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면이 있다. 때문에 서블릿을 작성하지 않고도 간편하게 웹프로그래밍을 구현하게 만든 기술이 JSP다.
JSP가 서블릿 컨테이너에서 동작하는 순서를 정리해보면 아래와 같습니다.
① 브라우저에서 JSP 페이지(“myCount.jsp”)를 웹 서버에게 요청합니다.
② 웹 서버는 JSP에 대한 요청을 웹 컨테이너에게 넘깁니다. 그러면 웹 컨테이너는 해당 JSP를 찾아서 서블릿 파일(myCount_jsp.java)을 생성합니다.
③ 서블릿 파일은 컴파일되어 서블릿 클래스 파일(myCount_jsp.class)을 생성합니다.
④ 컴파일된 서블릿 클래스 파일을 웹 서버로 보냅니다.
⑤ 사용자는 서블릿의 출력 결과인 HTML 형태로 응답 결과를 보게 됩니다.
JSP가 서블릿에 비해 처리속도가 느리지 않는 이유
클라이언트가 요청한 것은 JSP 파일(myCount.jsp)이지만 응답하는 것은 JSP 파일이 아니라 .class 확장자를 가지고 있는 서블릿 파일(myCount_jsp.class)입니다.
JSP는 서블릿으로 변환되는 과정이 추가되기 때문에 서블릿보다 응답시간이 느릴 것이라고 생각할 수 있지만, 서블릿와 JSP는 응답하는데 걸리는 시간 차이가 그리 크지 않습니다.
① 사용자가 브라우저 주소 창에 http://localhost:8181/jsp-study/myCount.jsp를 입력하여 요청을 합니다. 웹 서버는 JSP 페이지(myCount.jsp) 형태의 요청에 대해서 웹 컨테이너로 하여금 처리하도록 파일을 넘깁니다.
② JSP 페이지(myCount.jsp)가 처음으로 요청된 것이면 JSP 파일을 변환하여 서블릿 자바 파일(myCount_jsp.java)을 생성합니다.
③ 서블릿 파일은 실행 가능한 상태인 클래스 파일(myCount_jsp.class)로 컴파일 됩니다.
④ 클래스 파일(myCount.jsp.class)이 메모리에 적재되어 실행됩니다.
⑤ 실행 결과가 웹 서버에 넘겨지면 웹 서버는 HTML 형태로 사용자에게 응답하게 됩니다. 사용자는 브라우저에 넘겨진 페이지를 출력하여 결과를 볼 수 있게 됩니다.
두 번째 이후로 동일한 JSP 페이지(myCount.jsp)가 요청되면 ②, ③, ④ 과정은 거치지 않고 메모리에 로드된 클래스 파일이 응답 처리됩니다. 그렇기 때문에 서블릿와 JSP는 응답하는데 걸리는 시간 차이가 그리 크지 않습니다.
JSP가 변환된 서블릿 클래스는 3개의 패키지가 자동으로 import 되어 있음을 확인할 수 있습니다.
웹 페이지의 요청은 get 방식과 post 방식이 있고 서블릿은 요청에 따라 doGet() 혹은 doPost() 메소드가 각각 호출됩니다.
요청에 대한 처리는 이 두 메소드(doGet 혹은 doPost) 외에 service()로 할 수 있습니다.
service()는 get 방식과 post 방식 구분 없이 모든 요청에 대한 처리를 하는 메소드입니다.
웹 컨테이너가 JSP를 변환하여 만든 서블릿 클래스에는 요청에 대한 처리를 doGet 혹은 doPost가 아닌 _jspService()가 맡아서 처리하도록 정의해 놓습니다.
웹 컨테이너가 JSP를 서블릿으로 변환하는 과정 중, 서비스 메소드 선언 다음에 내장 객체를 선언하고 값을 할당하는 부분이 있습니다. 이 때문에 서블릿에서 사용했던 out과 같은 내장 객체를 JSP에서 사용할 수 있는 것입니다.
'JSP > JSP 정리' 카테고리의 다른 글
[JSP] JSP 내장객체 (0) | 2023.06.01 |
---|---|
[JSP] JSP 기본태그(수정 159) (0) | 2023.06.01 |
[JSP] JSP로 시작하기 (0) | 2023.05.31 |
[JSP] DAO란? DTO란? VO란? (0) | 2023.05.30 |
[JSP] JSP(Java Server Page) 란? (0) | 2023.05.29 |