Web/JSP/Servlet

지시자(directive) 란?

닉넥임 2013. 8. 4. 20:39
반응형

출처 : http://studyto.cafe24.com/teach/jsp/jsp_directive.html

지시자(JSP Directive)


- 웹 컨테이너가 JSP페이지를 서블릿 클래스로 변환할 때 필요한 정보기술하기 위해 사용한다.

 - jsp 컨테이너에 해당 페이지의 특수한 처리 정보를 넣고자 할 때 사용한다. 예를 들어 사용할 스크립팅언어를 지정하거나, 다른 페이지의 컨텐트를 삽입하고, 커스텀 태그 라이브러리를 지정할 때 사용된다.

지시자는 브라우저 사용자에게는 보이지 않는다.

1. page 지시자

jsp 지시자중 가장 복잡한 구조로 되어 있다.

구 문

<%@ page 속성1="값1" 속성2="값2" ... %>

XML 기반 구분

<jsp:directive.page 속성1="값1" 속성2="값2" ... />

속성 설정은 위의 두가지 방법에 동일하지만, xml기반으로 스타일 사용하려면 페이지 전체가 xml 스타일로 되어 있어야 한다는 제약이 따른다.

1) page 지시자의 attribute

속성

기본값

사용예

info

텍스트 문자열

없음

info = " park w.g"

language

스크립팅 언어

"java"

language="java"

contentType

MIME 타입, 문자집합

 

contentType="text/html;charset=iso-8859-1"
contentType="text/html";

pageEncoding

문자집합

"ios-8859-1"

pageEncoding="ios-8859-1"

extends

클래스 이름

없음

extends="testWeb"

import

클래스/패키지이름

없음

import="java.util.*, java.text.*"

session

불린 플래그

"true"

session="true"

buffer

버퍼크기 또는 false

"8kb"

buffer="12kb" or
buffer="false"

autoFlush

불린 플래그

"true"

autoFlush="true"

isThreadSafe

불린 플래그

"true"

isThreadSafe="true"

errorPage

로컬 url

없음

errorPage="error1.jsp"

isErrorPage

불린 플래그

"false"

isErrorPage="false"

위의 지시자를 사용할 때 주의할 점은 import를 제외하고는 중복해서 사용하면 안된다.

(1) info

페이지의 역할을 설명해 주는 도큐먼트 문자열 추가한다. 이 문자열은 jsp 컨테이너나 기타 프로그래밍 도구를 통해 페이지 요약 정보를 추출할 때 사용되기도 한다. 보통 페이지의 작성자나 버전, 저작권 정보등을 기술한다.

<%@ page info="make by park, Copyright 2002 " %>

(2) language

페이지에서 사용할 스크립팅 언어를 지정할 때 사용한다. 기본으로 "java"를 사용한다. 만약 include된 문서가 있다면 language속성에서 지정한 동일한 언어를 사용해야 한다.

<%@ page language="java" %>

(3) contentType

jsp 페이지가 생성하는 응답의 MIME 타입을 지정한다. MIME타입도 그 종류가 대단히 많지만 주로 사용되는 MIME은 "text/html", "text/xml", "text/plain" 등을 들 수가 있다.

또한 문자열셋을 지정할 수가 있는데 이는 페이지가 사용할 전체 문자열을 대체한다.

<%@ page contentType="text/html; charset=ios-8859-1"%>

만약 한글을 사용하는데 문제가 발생하거나 깨진 문자로 보인다면 아래와같이 처리한다.

<%@ page contentType="text/html; charset=euc-kr" %> or
<%@ page contentType="text/html; charset=ksc5601" %>

(4) pageEncoding

pageEncoding 속성은 jsp 1.2에서 새로 도입된 방법으로 contentType의 charset과 같은 기능을 한다.

<%@ page pageEncoding="ios-8859-1" %>

(5) extends

jsp 서블릿 클래스가 상속받을 슈퍼클래스를 지정한다. 이 속성을 지정하지 않으면 jsp컨테이너는 jsp페이지의 슈퍼 클래스를 자동으로 찾아 사용하는데 일반적으로 이렇게 처리해야만 최고의 성능을 발휘하게 된다. 따라서 이 속성은 잘 사용되지 않는다.

<%@ page extends =" info.myit.myJspPage" %>

(6) import

중복해서 사용할 수 있는 속성이며 jsp페이지에서 참조할 자바 클래스를 확장한다.

<%@ page import="java.awt.*" %>
<%@ page import="java.awt.*, java.util.*" %>

등과 같이 import할 클래스를 ","사용하여 연속해서 기술할 수 있다.

(7) session

jsp페이지가 세션관리에 가담할지를 결정한다. 기본값이 "true"이기 때문에 세션관리에 자동으로 가담하게 된다. 만약 세션에 가담하지 않을 경우 "false"값을 주면 성능이 약간 향상되는 것으로 알려져 있다.

<%@ page session="true" %>

(8) buffer

출력 버퍼링을 조정한다. 예를 들어 버퍼를 통하지 않고 바로 웹 브라우저에서 보내려면

<%@ page buffer="none"%>

라고 하면 된다. 기본 버퍼의 크기는 8kb이지만 jsp 컨테이너는 상황에 따라 더 큰 버퍼을 잡을 수 있다. 즉, buffer속성으로 정한 버퍼의 크기는 최소의 크기라고 생각하면 된다.

<%@ page buffer="12kb" %> // 12kb크기의 버퍼를 지정

(9) autoFlush

buffer속성과 밀접한 관계가 있는 속성으로 버퍼를 자종으로 비울 것인가를 판단하는 속성이다. 기본값은 "true"이지만 출력 결과를 최대한 늦추길 원한다면 "false"를 줄 수 있다. 그러나 이때 주의할 점은 buffer의 속성이 "none"일 때 autoFlush속성을 "false"로 줄 수 없다.

<%@ page autoFlush="true" %>

 (10) isThreadSafe

이 속성은 jsp페이지가 서블릿으로 컴파일될 때 여러 개의 동시 요청에 응답할 수 있는 기능을 넣느냐를 결정하는 속성이다. 만약 속성값을 "false"로 주면 동시에 전달된 요청에 순차적으로 반응하기 때문에 사용자들은 엄청난 인내심을 가져야 한다.

그러나, 속성값을 "true"로 주었을 때도 관심을 기울여야 할 부분이 많다. jsp페이지에 의해 데이터 베이스를 연동한다면, 데이터 베이스 사용에 특별한 조치가 없는한 여러개의 쓰레드에 의해 안전하게 데이터 베이스를 처리할 수는 없다. 이런 경우 페이지 엑세스중 런타임 에러가 발생할 확율이 높아진다.

이러한 부분을 해결하려면

데이터베이스의 pool을 엑세스하여 미사용 데이터베이스가 생길 때 까지 기다리게 하게 하거나, synchronized 키워드를 사용하여 해당 처리 부분을 동기화 시킵니다.

최소한의 수정으로 안전성을 기할려면 속성값을 "false"로 주어 처리할 수도 있지만 보편적으로 "true"를 주는 것이 득이 많다.

<%@page isThreadSafe="ture"%>

(11) errorPage

 jsp에서 처리하지 못하는 오류가 발생할 때 기본 에러 페이지를 사용하지 않고 특정 페이지를 사용하고자 할 때 사용한다.

<%@page errorPage="url"%>

 url은 절대 경로와 상대경로 모두 사용할 수 있다.

<%@ page errorPage="/errorpage/error1.html"%>

 웹서버의 절대경로 "/errorpage"안에 error1.html으로 연결된다.

<%@ page errorPage="../errorpage/error1.html"%>

은 현재 디렉토리의 상위디렉토리에서 "errorpage"경로안의 error1.html페이지로 연결된다.

한가지 주의할점은 errorPage 속성을 사용하고자 할 때는 현재의 페이지 정보가 한번이라도 브라우저로 전송되어서는 안된다는 것이다. 따라서 autoFlush 속성을 false로 설정하여야 한다.

(12) isErrorPage

 해당 페이지가 에러 페이지로 작동하도록 할 때 사용한다.

<%@ page isErrorPage="true"%>

 대부분의 페이지가 에러 페이지로 작동하지 않기 때문에 기본값은 false이다.

2. include 지시자

주어진 파일을 현재 페이지에 삽입하고자 할 때 사용된다.

<%@ include file="file_url"%> or
<jsp:directive.include file="file_url"/>

c언어의 #include와 그 기능이 유사합니다. 반복해서 여러번 사용할 수 있다.

그러나 한가지 주의할 점은 jsp컨테이너는 어떤 페이지의 내용이 수정되면 자동으로 서블릿으로 컴파일되어지지만 include로 삽입된 파일이 수정되었다고 자동으로 컴파일되지 않는다는 점이다.

만약 include된 파일이 수정되었다면 include한 파일의 저장 날짜를 수정해 주거나, 내용을 다시 한번 저장해 주어야 한다.

3. taglib 지시자

jsp 페이지가 사용할 태그라이브러리를 지정할 때 사용한다. 태그 라이브러리는 jsp기능을 확장하기 위해 사용될 수 있는 커스텀 태그를 모아놓은 것을 말한다.

<%@ taglib url="tag_library_url" prefix="tag_prefix" %> or
<jsp:directive.taglib url="tag_library_url" prefix="tag_prefix" />

 url속성값은 해당 태그 라이브러리의 태그 라이브러리 설명자(TLD:Tag Library Descriptor)의 위치를 나타내며, prefix속성은 라이브러리를 사용하는 페이지에서 해당 라이브러리의 태그 앞에 붙여지는 XML 네임스페이스 식별자를 지정하는 것이다.

예를들면,

<%@ taglib url="/abc" prefix="alpha" %>

 라고 지정하면 이 라이브러리의 태그에 "korea"가 있다면

<alpha:korea/>

 라고 사용할 수 있다.

 

 

 

반응형

'Web > JSP/Servlet' 카테고리의 다른 글

JavaMail  (1) 2013.08.04
마임(MIME) 이란?  (0) 2013.08.04
프로퍼티(property) 란?  (1) 2013.08.04
메타 태그(meta tag)  (0) 2013.08.01
JSTL(코어태그 까지됨.)  (0) 2013.07.25