지시자는 JSP가 JSP컨테이너에게 어떠한 메시지를 보내기 위한 태그들이다.
클래스선언, 구현할 메소드, Content-Type 등의 값을 설정하며 클라이언트에 어떠한 출력도 내보이지 않는다. 그리고 모든 지시자들은 JSP파일 전체에 대한 범위를 가진다.
지시자는 태그안에서 '@'로 시작한다.

▷ 지시자의 3가지 종류
page : JSP 페이지 전체에 대한 중요한 속성을 지정
include : JSP 페이지에 다른 문서의 내용을 삽입
taglib : USER가 만든 태그 라이브러리 사용


□ PAGE 지시자

page전체에 영향을 미치는 중요한 특성을 지정하고 하나의 JSP파일에서 여러 개의 page지시자의 사용은 가능하나, 동일한 특성이 여러번 나와서는 안된다.(import는 예외)

형식] <%@ page  속성1="값"   속성2="값"   속성3="값".... %>
형식] <%@ page language ="java"
                         extends=""
                         import=""
                         session="true"
                         buffer="8KB"
                         autoFlush="true"
                         isThreadSafe="true"
                         info=""
                         errorPage=""
                         isErrorPage="false"
                         contentType="text/html;charset=ISO-8859-1"
         %>
이 속성들은 생략 가능하다. 생략을 하게 되면 디폴트값으로 페이지가 설정된다. JSP페이지 내에서 import속성 외에는 모든 속성들은 하나의 JSP문서안에서 오직 한번만 기술되어야한다.

▷ Page지시자 속성 설명

language : JSP 에서 사용되는 스크립트 언어를 지정하는 속성으로 디폴트값은 "java"이다 . 다른 언어는 사용할 수 없으므로 생략가능하다.
형식] <%@ page language="java" %>

extends : 생성될 클래스가 확장해야 하는 슈퍼클래스의 완전한 이름을 지정하면 된다. JSP파일은 서블릿 파일로 변환되고 서블릿 파일이 컴파일 되기 때문에 자바의 상속 개념을 그대로 사용할 수 있다. 하지만 잘사용되지 않는 속성중 하나다. 서버에 부담을 주기 때문이다.
형식] <%@ page extends="확장할 클래스명" %>

import : 일반적인 자바클레스의 import의 개념이고 import대상 패키지 또는 클레스가 여러개인 경우 컴마(.)로 구분하여 기술 하면 된다.
기본적으로 import 되는것은 java.lang.*,  javax.servlet.*,  javax.servlet.http.*,  javax.servlet.jsp.*,  패키지 등이다
형식] <%@ page import="java.util.*" %>
형식] <%@ page import="java.io.*, java.util.Vector, java.sql.*" %>

session : 웹서버에 여러명의 클라이언트가 접속해서 사용하게 되는데 그때 클라이언트를 구분할 수 있는 단위가 세션이다. 웹페이지가 하나의 HTTP 세션에 참여하는지의 여부를 알수 있다.
session은 서블릿의 javax.servlet.http.HttpSession객체와 대응되는 것으로 JSP 컨테이너는 session이라는 별칭으로 제공하고 있다. 디폴트 값은 "true"이다
형식] <%@ page session="true" %>

buffer  : Client 출력 스트림에 쓰일 버퍼링 방식을 지정 "none"을 쓰면 버퍼링을 사용안하며 PrintWriter에 의해서 SeveletResponse에 의해 직접 전달된다. 버퍼크기를 지정하면 지정된 크기보다 작지 않은 크기의 버퍼를 통해 출력이 버퍼링된다. 즉, 버퍼에 씌여졌다가 PrintWriter로 전달된다. 디폴트값은 "8KB" 이다
형식 ]<%@ page buffer="8KB" %>

autoFlush : 출력버퍼가 자기 사이즈 만큼 꽉 차게되면 자동으로 지울지 여부를 지정하는 속성이다.
디폴트값은 "true"로 설정되어 있으며, 출력버퍼가 꽉차게 되면 자동적으로 버퍼가 비워진다. "false"인 경우 출력버퍼가 꽉 차게되면 overflow를 발생(예외 발생)하게 된다. 또한 buffer속성을 "none"으로 한경우 autoFlush="false"로 설정할 수 없다.
형식]<%@ page autoFlush="true" %>

isThreadSafe : JSP는 멀티스레드가 가능하다. CGI는 클라이언트가요청시 하나의 프로세스가 처리하지만 JSP는 하나의 쓰레드가 처리하여 자원을 공유하므로 오버헤드를 줄일 수 있다. 디폴트값 " true"인 경우는 여러 클라이언트가 요청이 오면 클라이언트 수 만큼 쓰레드를 생성하여 수행시킨다는 것이다. 이때 쓰레드간의 동기화 처리는 개발자가 해결해야 한다. "false"인 경우 JSP처리기는 요청들을 도착한 순서대로 Queue에 쌓은 후 순서대로 요청들을 하나씩 처리한다. 이런 경우는 하나의 쓰레드가 수행되므로 전체적으로 봤을 때는 서버가 느려지는 문제가 발생할 수 있다. 이는 서블릿에서 SingleThreadModel을 구현 할 때와 같은 방식이다.
형식] <%@ page isThreadSafe="true" %>

info : 페이지에 대한 간략한 정보를 지정하는곳이며 JSP엔진에 의해서 참조 되어진다.
페이지의 Servlet.getServlet() 메소드의 구현으로 얻을 수 있는 정보 문자열의 정의, 내용이나 길이의 제한은 없으며 제작자 이름, 버전, 저작권 정보등이 포함된다.
형식] <%@ page info="페이지 정보" %>

errorPage : JSP 페이지에서 에러가 발생했을 때 보여줄 페이지를 지정한다.
점검(carch)되지 않은 RunTime에러가 발생시 호출될 에러 page의 URL을 기술한다. 에러페이지와 에러를 발생시킨 페이지는 같은 서버에 존재해야한다. 출력 스트림이 버퍼로 설정되어 출력이 Client로 안갔으면 error page의 호출이 가능하나, 출력이 이미 Client로 전송되었다면 에러페이지의 호출은 불가능하다. 기본적으로 버퍼는 8kb이므로 8kb이하로 출력을 했다면 에러페이지의 호출은 가능. 결국 에러페이지는 클라이언트로 아무것도 넘어가지 않은 상태에서 Exception이 발생했을 때 가능하다.
형식] <%@ page error="../에러처리페이지 %>

isErrorPage : 값이 "true"로 설정되어 있다면 현재 JSP페이지는 에러 메세지를 보여주는 에러 페이지가 된다.
형식] <%@ page isErrorPage="false" %>

contentType : JSP페이지의 MIMETYPE을 설정한다. MIME타입은 전송되는 페이지의 데이터 타입을 결정한다.
JSP에서 대부분 "text/html"로 설정되어 있다. contentType을 지정할 때 charset속성을 지정할수 있는데 charset속성은 문자코드방식을 결정하는 것으로 한글 출력문제를 해결하기 위해 설정한다.
지금까지 몇 개의 JSP페이지를 작성할 때 마다 charset속성을 "charset=euc=kr"같은 방식으로 처리했다. charset속성을 지정하지 않으면 "ISO-8859-1"로 설정된다. ISO-8859-1은 8bit 구성되어져 있고, euc-kr은 16bit로 구성되어져 있기 때문에 한글이 올바르게 나올수 있다.
형식] <%@ page contentType ="text/html; charset=euc-kr" %>


□ include 지시자

JSP의 현제 페이지에 다른 자원(html,JSP)을 포함시키고자 할때 사용한다.
형식] <%@ incluse file = "filename(절대경로/상대경로)" %>
포함된 파일은 JSP자체와 동일한 방식으로  JSP엔진에 의해 해석되는데,JSP엔진은 서블릿 코드를 생성할 때  include되는 페이지의 텍스트나 코드를 현재 페이지 안으로 포함시켜서 하나의 JSP를 생성해 낸다. 이는 변환시점에 한번만 일어난다.(실행시점에 파일을 포함시킬려면 incluse 액션을 이용)
JSP컨테이너는 이들 파일의 변화를 감시하고 파일이 변경되면 JSP를 다시 컴파일 한다.

예제 - include.jsp

<%@ page contentType="text/html; charset=euc-kr" %>
<!-- include.jsp JSP에서 다른 html이나 jsp 파일을 컴파일시 포함 -->
<html>
<head><title>include 지시자 예제.</title>
</head>
<body>
<h3>date.jsp include 결과 </h3>
date.jsp 를 통한 현재 시각은? <hr>
<%@ include file="date.jsp" %>
 
</body>
</html>

예제 - date.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<!-- date.jsp 현재의 시각을 출력 %>
<%@ page import="java.util.*,java.text.*" %>
 
<%= new Date().toLocaleString() %>
<br>
<% Date now = new Date();
   DateFormat sdf = DateFormat.getDateInstance(DateFormat.FULL, Locale.KOREA);
   out.println(sdf.format(now));
%>


□ taglib 지시자

JSP에서는 사용자가 자신만의 TAG를 정의하고 사용 가능하게 하고있다. 태그 라이브러리에 정의된 태그를 자겨와서 사용할 수 있게 방법을 제공한다.
Taglib지시자에는 uri, prefix의 두개의 요소를 가진다
<%@ taglib uri="태그라이브러리가 있는 주소" prefix="태그라이브러리를 나타내는 이름" %>
예를 들어 prefix가 "mytag"라고 지정되었다면 JSP안에서 <myteg:tagname .../> 를 만나면 URI에 지정된 태그 라이브러리 서술자를 참조하여 해당 태그를 처리한다.
위의 두가지 요소를 지정하지 않으면 오류가 발생한다.

커스텀 태그 라이브러리 Tomcat, 또는 Resin싸이트를 참조하여 테스트 가능


[출처] : http://snowflower.tistory.com/168

+ Recent posts