11장. JSP 정의와 구성 요소
11.1 JSP 등장 배경
- 초기 웹 프로그램은 앞 장들에서 그랬듯이 서블릿을 이용해서 화면을 구현 함
- (문제) 비즈니스 로직과 화면 기능이 같이 있다보니 개발 후 유지관리가 어려움
- (해결) JSP => 둘을 분리함으로써 개발 후 재사용성과 유지관리가 훨씬 수월해짐
- 서블릿 : 자바 코드를 기반으로 문자열을 사용해 HTML과 자바스크립트로 화면 구현
- JSP : HTML, CSS, 자바스크립트 기반으로 JSP 요소들을 사용해 화면 구현
<JSP의 구성 요소>
1. HTML 태그, CSS, 자바스크립트 코드
2. JSP 기본 태그
3. JSP 액션 태그
4. 커스텀 태그(개발자가 직접 만듦 or 프레임워크에서 제공)
11.2 JSP의 3단계 작업 과정
* JSP는 톰캣 컨테이너에 의해 브라우저로 전송되기전에 변환 과정을 거쳐야 함(모두 컨테이너가 수행)
1. 변환 단계 : JSP -> 자바파일
2. 컴파일 단계 : 자바파일 -> 클래스 파일 (컴파일)
3. 실행 단계 : 클래스 파일 실행 후 결과를 브라우저로 전송
- 브라우저로 전송되는 결과는 HTML, CSS, 자바스크립트로 변환된 파일
- WebContent 디렉터리에 jsp파일 생성 후 코드 작성 > 브라우저에서 jsp파일 요청
- 서블릿에서는 html태그를 만들어서 print으로 전송해줘야 했지만, JSP는 컨테이너에서 자동으로 브라우저로 전송
11.3 JSP 페이지 구성 요소
1. 디렉티브 태그
2. 스크립트 요소 (주석문, 스크립트릿, 표현식, 선언식)
3. 표현 언어
4. 내장 객체(내장 변수)
5. 액션 태그
6. 커스텀 태그
11.4 디렉티브 태그
디렉티브 태그 : JSP 페이지에 대한 전반적인 설정 정보를 지정할 때 사용하는 태그
1. 페이지 디렉티브 태그 : JSP페이지의 전반적인 정보를 설정
2. 인클루드 디렉티브 태그 : 공통으로 사용하는 JSP 페이지를 다른 JSP 페이지에 추가
3. 태그라이브 디렉티브 태그 : 개발자나 프레임워크에서 제공하는 태그를 사용
<페이지 디렉티브 태그>
- <%@ page 속성1="값1" 속성2="값2" ... %>
<페이지 디렉티브 태그를 이용해 지정하는 JSP 속성들>
속성 | 설명 | 기본값 |
info | 페이지를 설명해주는 문자열 | - |
language | JSP 페이지에서 사용할 언어 | java |
contentType | 출력 형식 | text/html |
import | 다른 패키지의 클래스를 임포트 | - |
session | HttpSession 객체의 사용 여부 | "true" |
buffer | JSP 페이지 출력시 사용할 버퍼 크기 | "8kb" |
autoFlush | JSP 내용 출력 되기 전에 버퍼가 다 채워질 경우 동작 | "true" |
errorPage | 처리 도중 예외가 발생할 경우 예외 처리 담당 JSP 페이지 지정 | "false" |
isErrorPage | 이 페이지가 예외 처리 담당 JSP 페이지인가? | "false" |
pageEncoding | JSP 페이지에서 사용하는 문자열 인코딩 지정 | "ISO-8859-1" |
isELIgnored | EL 사용 유무 지정 | "true" |
ex)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" <!--여기까지는 jsp파일 생성시 자동으로 입력되어있음-->
import="java.util.*" <!--이 import속성 제외 다 한번씩만 선언해야 함-->
session="true"
buffer="8kb"
autoFlush="true"
isThreadSafe="true"
info="(ShoppingMall................)" <!--getServletInfo()메서드에서 서블릿 정보 반환-->
isErrorPage="false"
errorPage=""
%>
<!DOCTYPE html>
<html>
<head>
...
>> 요청 시 자바파일로 변환되는데 이 자바파일에서 페이지 디렉티브에서 설정한 정보가 모두 자바 코드로 변환됨
>> 따라서 서블릿에서 처럼 필요한 클래스 파일을 import문을 이용해 일일이 설정하거나, response.setContentType()을 해줄 필요가 없이 JSP 페이지에서 페이지 디렉티브 태그를 이용해서 설정함
<인클루드 디렉티브 태그>
- 웹페이지에서 화면이 바뀌어도 일정하게 유지되는 공통 JSP 페이지는 미리 만들어 놓고
다른 JSP 파일에서 인클루드 디렉티브 태그를 사용해 포함시킨다.
- 재사용성이 높고 유지관리가 쉽다.
- <%@ include file="공통기능.jsp" %>
<인클루드 디렉티브 태그 이용해 이미지 삽입하기>
- WebContent에 디렉터리를 만들어 사진을 넣는다
- duke_image.jsp
...
<body>
<img src="./image/duke.png">
</body>
...
- include.jsp
<body>
<h1>안녕하세요. 쇼핑몰 중심 JSP 시작 부분입니다!!</h1>
<%@include file="duke_image.jsp" %>
<h1>안녕하세요. 쇼핑몰 중심 JSP 끝 부분입니다!!</h1>
</body>
- 자바파일(include)을 보면 인클루드 디렉티브로 포함된 jsp파일(duke_image)의 HTML 태그가 합쳐져 있음
- 즉, 요청하는 JSP 페이지에 대해 실행하는 자바 파일은 단 한 개만 생성 됨