JSP란
- JSP(Java Server Pages)는 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술
- 자바(Java) 언어를 사용하여 서버 측에서 웹 페이지를 생성해 웹 브라우저로 전송
장점
- 짧은 코드로 동적인 웹 페이지를 생성
- 기본적인 예외는 자동으로 처리
- 많은 확장 라이브러리를 사용할 수 있음
- 스레드 기반으로 실행되어 시스템 자원을 절약해줌
활용 사례
- 대한민국 정부 표준 프레임워크의 근간
- 정부나 공기업 주도의 사업 등 대규모 기업용 시스템 구축에 주로 사용
▣ 정적 웹 페이지
- 클라이언트의 요청에 상관없이 항상 동일한 내용을 출력
![](https://velog.velcdn.com/images/minhye1020/post/373ebe5b-70c0-4c79-af0b-5e5046f1a1c3/image.png)
▣ 동적 웹 페이지
- 서버가 클라이언트의 요청을 해석하여 가장 적절한 웹 페이지를 생성해 웹 브라우저에 출력
![](https://velog.velcdn.com/images/minhye1020/post/a446ac1b-0673-40e5-8b73-0034754a80e9/image.png)
▣ 애플릿
- 웹을 동적으로 만들기 위한 고대의 자바 기술
- 웹에서 실행할 수 있는 자바 애플리케이션을 통째로 웹 브라우저로 전송한 후 실행하는 방식
- 속도, 보안, 유연성의 한계로 현재는 더 이상 지원되지 않음
▣ 서블릿
- 클라이언트의 요청을 받으면 서버에서 처리한 후, 응답으로 결괏값만 보내주는 구조
- 자바(.java) 파일을 컴파일 한 클래스(.class) 파일의 형태를 가짐
- 대표적인 서블릿 컨테이너로 아파치 톰켓(Apache Tomcat)이 있음
![](https://velog.velcdn.com/images/minhye1020/post/1c364a00-5d4d-4971-b9b4-bea9df68b0c3/image.png)
▣ JSP - 자바 웹 기술의 최종 진화
- 자바코드를 HTML로 변환하는 과정에서 너무 많은 코드가 필요했던 서블릿의 단점을 보완
- 기본을 HTML로 작성한 후 필요한 부분만 Java를 사용하는 형태
- JSP 파일을 서블릿으로 변환한 후 실행하는 방식
- JSP는 클라이언트에게 보여지는 FrontEnd를 담당, 서블릿은 제어를 위한 BackEnd를 담당
![](https://velog.velcdn.com/images/minhye1020/post/2db052f1-1e42-48ef-a87b-e2871fa493f0/image.png)
▣ 오늘날의 웹 사이트
- 동적 웹 페이지와 정적 웹 페이지가 혼합된 형태로 구성됨
![](https://velog.velcdn.com/images/minhye1020/post/0f5a9305-e1b8-4a58-8446-6015b201dd1d/image.png)
JSP 파일 기본 구조
![](https://velog.velcdn.com/images/minhye1020/post/abe5e03c-d8b1-45fc-bd3d-e91e9f2ad7f1/image.png)
지시어(Directive)
- 해당 JSP 페이지의 처리 방법을 JSP 엔진에 ‘지시’해주는 역할
스크립트 요소(Scripting Elements)
- 선언부 : 멤버변수나 메서드 선언
- 표현식 : 변수 출력, 메서드 호출
- 스크립틀릿 : Java코드 작성!
지시어(Directive)란..??
JSP 페이지를 자바(서블릿) 코드로 변환할때 필요한 정보를 JSP 엔진에 알려줌
스크립트 언어나 인코딩 방식 등을 설정
![](https://velog.velcdn.com/images/minhye1020/post/e2f4f9b7-843b-43c4-80ee-8ba8671c8500/image.png)
지시어의 종류
- page 지시어 : JSP 페이지에 대한 정보를 설정
- include 지시어 : 외부 파일을 현재 JSP 페이지에 포함시킴
- taglib 지시어 : 표현 언어에서 사용할 자바 클래스나 JSTL을 선언
page 지시어
- 문서의 타입, 에러 페이지, MIME 타입과 같은 JSP 페이지에 대한 정보를 설정
문서의 타입, 에러 페이지, MIME 타입과 같은 JSP 페이지에 대한 정보를 설정
![](https://velog.velcdn.com/images/minhye1020/post/fc7f4613-2283-4d69-9d0e-bf9fc49a55f3/image.png)
language, contentType, pageEncoding 속성
- JSP 페이지 생성시 기본적으로 삽입되는 지시어
- language : 스크립팅 언어를 java로 지정
- contentType : 문서의 MIME타입과 캐릭터셋 지정
- pageEncoding : 소스 코드의 인코딩 방식 지정
- import 속성
- java.lang 패키지에 속하지 않은 클래스를 JSP 문서에서 사용하기 위해 선언
- 이클립스에서는 자동완성(Content assist) 기능으로 임포트 하면 됨
✔️ 예제 1-1] 01DirectiveScript/Import.jsp
![](https://velog.velcdn.com/images/minhye1020/post/d81acda9-8451-4fb5-a5e1-549e4956f222/image.png)
errorPage, isErrorPage 속성
- JSP에서 에러 발생 시 “HTTP Status 500”과 같은 에러페이지를 출력
- 웹서버의 버전, 소스코드의 일부가 노출되므로 보안 측면에서 좋지 않음
✔️ 예제 1-2] 01DirectiveScript/Error500.jsp
![](https://velog.velcdn.com/images/minhye1020/post/671a3582-89c8-4206-8183-f7dcf034ee9f/image.png)
![](https://velog.velcdn.com/images/minhye1020/post/5b737ece-4a87-4f10-8417-0ba5708c4080/image.png)
errorPage, isErrorPage 속성 - 방법1 : try/catch 사용
- 에러 발생이 예상되는 코드를 try ~ catch로 묶어줌
✔️ 예제 1-3] 01DirectiveScript/ErrorTryCatch.jsp
![](https://velog.velcdn.com/images/minhye1020/post/84660fc8-bb41-4f4e-a25f-914f822e6b8e/image.png)
![](https://velog.velcdn.com/images/minhye1020/post/c9c5712b-6172-4aec-93af-944a25d4bd1a/image.png)
errorPage, isErrorPage 속성 - 방법2 : errorPage, isErrorPage 사용
- 에러 발생이 예상되는 페이지에 errorPage 속성 추가
- 에러를 처리할 페이지에 isErrorPage 속성을 추가
✔️예제 1-4] 01DirectiveScript/ErrorPage.jsp
![](https://velog.velcdn.com/images/minhye1020/post/9fbe05fd-41e1-420e-a240-4b9efd5a830f/image.png)
✔️예제 1-5] 01DirectiveScript/IsErrorPage.jsp
![](https://velog.velcdn.com/images/minhye1020/post/de780382-ddd3-4635-8c08-03310f4579b4/image.png)
errorPage, isErrorPage 속성 - 방법2 : errorPage, isErrorPage 사용
- ErrorPage.jsp 실행 시 그림과 같이 IsErrorPage.jsp 내용이 출력됨
![](https://velog.velcdn.com/images/minhye1020/post/3c480de1-78af-4953-85b5-f95e1872e9f3/image.png)
- 실제 서비스에서는 오류메세지 대신 사용자에게 친근한 UI로 출력함
![](https://velog.velcdn.com/images/minhye1020/post/cad9df5a-a870-4f80-a1db-cc35e22c8fa3/image.png)
![](https://velog.velcdn.com/images/minhye1020/post/5bcc71b9-e097-491c-bd5b-1757f99f2d57/image.png)
trimDirectiveWhitespaces 속성
- page 지시어가 웹 서버에 서 처리된 후 공백으로 남게 되는 것을 제거함
- 공백(Space)도 엄연한 문자이므로, 외부기기와 연동시 문제를 일으키는 경우가 있음
✔️ 예제 1-6] 01DirectiveScript/TrimWhitespace.jsp
![](https://velog.velcdn.com/images/minhye1020/post/96952c3e-a56a-40ee-bb1a-ac3f97e22c27/image.png)
![](https://velog.velcdn.com/images/minhye1020/post/035f99a3-35e9-437c-81fc-d9dad1e8f21c/image.png)
buffer, autoFlush 속성
- JSP는 응답결과를 즉시 출력하지 않고 버퍼(Buffer)에 먼저 저장한 후 일정량이 되었을때 출력
- 작은 단위로 여러번 전송하는것 보다, 큰 단위로 묶어서 한번에 보내는 것이 훨씬 효율적
- 버퍼라는 임시 저장소를 두어 데이터들이 충분히 쌓일 때까지 기다렸다가 출력
![](https://velog.velcdn.com/images/minhye1020/post/b057116d-e4c4-45cf-a537-551ffe8e0478/image.png)
- JSP는 버퍼를 사용함으로써 포워드(forward: 페이지 전달)와 에러 페이지 처리를 할 수 있음
include 지시어
- 웹 사이트에서 상단 메뉴나 하단의 정보가 여러페이지에 반복 사용되는 경우에 필요함
- JSP페이지에 또 다른 JSP페이지를 삽입할 때 사용
![](https://velog.velcdn.com/images/minhye1020/post/4396a809-7195-48df-85c1-79bfe160c7df/image.png)
예제 1-8] 01DirectiveScript/IncludeFile.jsp
![](https://velog.velcdn.com/images/minhye1020/post/70a79f0f-3011-47e1-b900-9a1d0b884bd6/image.png)
예제 1-9] 01DirectiveScript/IncludeMain.jsp
![](https://velog.velcdn.com/images/minhye1020/post/23a035f8-9954-401b-a17b-329764613775/image.png)
스크립트 요소란..??
- JSP에서 자바 코드를 직접 작성할 수 있게 해줌
- 용도에 따라 선언부, 스크립틀릿, 표현식 3가지가 있음
▶ 선언부(Declaration)
- 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메서드를 선언
- 서블릿으로 변환 시 _jspService( ) 메서드 ‘외부’에 선언
![](https://velog.velcdn.com/images/minhye1020/post/3c237a7e-dabd-451d-a9ca-851a22f6b3b0/image.png)
▶ 스크립틀릿(Scriptlet)
- 실행할 자바 코드를 작성하는 영역
- 서블릿으로 변환 시 _jspService( ) 메서드 ‘내부’에 선언
![](https://velog.velcdn.com/images/minhye1020/post/73f7c58b-4b84-44a9-97d4-f3ed282dab8d/image.png)
▶ 표현식(Expression)
- 변수의 값을 웹 브라우저 화면에 출력
- 반환값이 있는 메서드를 호출
- out.print( ) 를 대체하여 좀 더 단순한 방법으로 출력
![](https://velog.velcdn.com/images/minhye1020/post/414ab7d4-3042-4643-b58e-831fc9080ca2/image.png)
✔️ 예제 1-10] 01DirectiveScript/ScriptElements.jsp
![](https://velog.velcdn.com/images/minhye1020/post/f82de36a-c73d-4b46-b487-5a1cd6b4af65/image.png)
✔️ 예제 1-10] 01DirectiveScript/ScriptElements.jsp
![](https://velog.velcdn.com/images/minhye1020/post/38b0a583-dc80-48e4-a3ab-f7eb863ac667/image.png)
JSP 파일이 서블릿으로 변환된 결과 확인하기
![](https://velog.velcdn.com/images/minhye1020/post/f0039409-8bf1-400c-bfa6-c39786f6cd13/image.png)
- 선언부에 정의한 add( ) 메서드는 _jspService( ) 외부에 선언되어 있음
- 스크립틀릿에 작성한 코드는 _jspService( ) 내부에 기술되어 있음
- 따라서 스크립틀릿에 메서드를 정의하면 에러발생됨
- JSP는 지시어와 스크립트 요소로 구성
- 지시어는 JSP에 대한 가장 기본적인 설정을 하는 요소
- page, include, taglib 3가지가 있음
- 스크립트 요소는 자바 코드를 삽입할 수 있게해줌
▣ 핵심요약
- 지시어
- page 지시어 : JSP 페이지에 대한 기본정보 설정
- include 지시어 : JSP나 HTML 페이지를 포함시킬 때 사용
- taglib 지시어 : EL(표현 언어)에서 자바 클래스의 메서드를 호출하거나, JSTL(JSP 표준 태그 라이브러리)을 사용하기 위해 선언(10,11장에서 학습)
- 스크립트 요소
- 선언부 : 멤버 변수나 메서드를 선언할 때 사용하는 영역
- 스크립틀릿 : 선언부에서 선언된 메서드를 호출하거나 자바 코드를 작성하는 영역
- 표현식 : 주로 변수의 값을 간단하게 출력할 때 사용
(참고) JSP 개념정리