목차
개요
<%@ ... %>
JSP 지시어(Directive)는 위와 같은 형식으로 JSP 파일 내에서 JSP를 실행할 컨테이너에서 해당 페이지를 어떻게 처리할 것인가 설정 정보를 지정하는데 사용된다. 지시어는 크게 3가지로 나뉜다.
page 지시어
<%@ page 속성1="값1" 속성2="값2" 속성3="값3" %>
JSP 페이지에 대한 속성을 지정하는 지시어로 12개의 설정 정보를 지정할 수 있다.
속성 | 사용법 | 기본값 | 설명 |
---|---|---|---|
language | language=”java” | java | 스크립트 요소에서 사용할 언어 설정 |
extends | extends=”클래스명” | 없음 | 상속받을 클래스를 설정 |
import | import=”패키지.클래스명” | 없음 | import할 패키지.클래스 설정 |
session | session=”true” | true | HttpSession 사용 여부를 설정 |
buffer | buffer=16kb” | 8kb | JSP 페이지의 출력 버퍼 크기를 설정 |
autoFlush | autoFlush=”true” | true | 출력 버퍼가 다 찼을 경우 처리 방법을 설정 |
isThreadSafe | isThreadSafe=”true” | true | 다중 스레드의 동시 실행 여부를 설정 |
info | info=”페이지 설명” | 없음 | 페이지 설명 |
errorPage | errorPage=”에러 페이지.jsp” | 없음 | 에러 페이지로 사용할 페이지를 지정 |
contentType | contentType=”text/html” | htext/html; charset=ISO-8859-1 |
JSP 페이지가 생성할 문서의 타입을 지정 |
isErrorPage | isErrorPage=”false” | false | 현재 페이지를 에러 페이지로 지정 |
pageEncoding | pageEncoding=”euc-kr” | ISO-8859-1 | 현재 페이지의 문자 인코딩 타입 설정 |
- language 속성: JSP 파일 내에서 사용될 스크립트 언어를 지정하는 속성
- include 지시어를 사용할 경우 include될 페이지의 language 속성과 include할 페이지의 language 속성은 반드시 동일해야 함
- extends 속성: JSP 파일이 서블릿 클래스로 변환되는 과정에서 상속할 부모 클래스를 지정하는 속성
- 보통은 개발자가 특별히 지정하는 경우는 거의 없음
-
import 속성: 자바에서 사용하는 import 구문과 동일
-
session 속성: 세션 관리할 때 사용하는 속성
- 세션 관리: HTTP 프로토콜은 stateless 특성을 가져 커넥션을 매번 새로 생성하므로 동일한 클라이언트에 대해 정보를 유지할 필요가 있을 경우 다른 클라이언트와 구별하는 특별하는 방법
- buffer 속성: JSP 페이지가 서블릿으로 변환되어 응답을 생성해 클라이언트에 전송할 때 사용되는 버퍼의 크기를 지정하는 속성
- “none”으로 설정할 경우 응답을 생성할 때 버퍼를 사용하지 않고 클라이언트에 응답을 바로 전송한다.
- autoFlush 속성: buffer 속성에서 지정한 버퍼가 다 채워졌을 경우 어떻게 처리할 것인지 JSP 컨테이너에게 알려주는 속성
- “false”로 설정할 경우 버퍼가 다 채워졌을 때 버퍼를 전송하는 것이 아니라 Exception을 발생시킴
- buffer 속성을 “none”으로 지정했을 때 autoFlush 속성을 “false”로 지정하는 것은 불가능함
- isThreadSafe 속성: 다중 스레드로 인한 한 데이터에 동시 접근 가능성 여부를 지정하는 속성
- JSP는 다중 스레드를 기반으로 실행되므로 다중 스레드로 인해 한 데이터에 동시 접근이 이루어지면 그 데이터의 값이 의도되지 않은 값으로 변경될 가능성이 있을 경우 동시 접근을 차단할 필요가 있으므로
- “true”로 설정할 경우 하나의 스레드에 의한 service() 메소드 실행이 완전히 끝날 때까지 다른 스레드는 기다리게 함
-
info 속성: 해당 페이지 전체의 주석 역할을 하는 속성
-
errorPage 속성: JSP 페이지를 처리하는 과정에서 예외가 발생했을 때 직접 처리하지 않고 에러 페이지를 지정해 지정된 에러 페이지에서 예외를 처리하도록 하는 속성
- 모든 예외가 반드시 에러 페이지에서 처리되는 것은 아님
- buffer 속성이 “none”으로 지정되었다면 응답이 즉시 전송되므로 에러 페이지로 넘어가지 않음
- buffer 속성에 특정 값이 지정되어 있고 autoFlush가 “true”로 지정되었을 때 버퍼가 다 채워져서 클라이언트로 응답이 전송된 이후에는 마찬가지로 예외가 발생하더라도 에러 페이지로 제어권이 넘어가지 않음
-
contentType 속성: JSP 페이지가 전송할 응답의 형태가 어떤 MIME 형식으로 되어 있는지를 지정하는 속성
-
isErrorPage 속성: 다른 페이지에서 발생하는 예외를 처리할 페이지인지 지정하는 속성
-
pageEncoding 속성: JSP 페이지의 문자셋 인코딩을 지정할 때 사용하는 속성
- 보통은 pageEncoding을 사용하지 않고 지시자 영역에서 contentType 속성을 지정할 때 한 번에 지정함
include 지시어
<%@ include file="header.jsp" %>
특정한 JSP 파일 또는 HTML 파일을 해당 JSP 페이지에 삽입할 수 있도록 하는 기능을 제공하는 지시어로, 공통된 부분이 많을 때 이러한 공통되는 부분을 따로 파일로 만들어 include 지시어로 삽입하면 간단하다.
이 때 포함되는 파일들은 실제 컴파일 과정을 거쳐서 그 결과가 해당 JSP 페이지에 포함되는 것이 아니라 JSP 소스 코드 자체가 복사되어 더해지므로 서블릿 컴파일 과정은 include 되는 파일의 개수가 아무리 많더라도 단 한 번만 이루어진다. (사실 잘 모르겠다)
includeTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ include file="header.jsp" %>
<html>
<head>
<meta charset="UTF-8">
<title>Include TEST</title>
</head>
<body>
<h1>inlcudeTest.jsp 파일입니다.</h1>
<%@ include file="footer.jsp" %>
</body>
</html>
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h3>header.jsp 파일이 내용이 들어가는 곳입니다.</h3>
<hr>
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<hr>
<h3>footer.jsp 파일의 내요이 들어가는 곳입니다.</h3>
결과
taglib 지시어
<%@ taglib uri="http://taglib.com/sampleURI" prefix="samplePrefix" %>
JSTL(JSP Standard Tag Library)나 커스텀 태그 등 태그 라아브러리를 JSP에서 사용할 때 접두사를 지정할 때 사용한다. taglib 지시어는 uri 속성과 prefix 속성의 두 가지 속성으로 이루어지고, uri 속성은 태그와 속성 정보를 저장한 TLD(Tag Library Descriptor) 파일이 존재하는 위치를 지정하고, prefix 속성에는 사용할 커스텀 태그의 네임 스페이스를 지정한다.