Directive, 

JSP 페이지를 서블릿 코드로 변환하는 데 필요한 정보를 JSP에 알려주며

주로 스크립트 언어나 인코딩 방식을 설정하는데 사용된다.

 

지시어의 종류에는 다음 3가지가 있다.

  • page
  • include
  • taglib

 

1. page

JSP 페이지에 대한 정보를 설정하며 속성은 다음과 같다.

속성 사용 여부 내용
info   페이지에 대한 설명 입력
language O 페이지에서 사용할 스크립팅 언어 지정
contentType O 페이지에서 생성할 MIME 지정
pageEncoding O charset과 같음, 인코딩 지정
import   페이지에서 사용할 자바 패키지 및 클래스 지정
session   세션 사용여부 지정
buffer   출력 버퍼의 크기 지정, 사용(x) = 'none'
autoFlush   출력 버퍼가 모두 채워졌을 때 자동으로 비울지 결정
buffer가 none일 때, autoFlush가 false면 에러 발생
trimDirective
Whitespaces
  지시어 선언으로 인한 공백 제거 여부 지정
errorPage   해당 페이지에서 에러 발생 시 에러 발생 여부를 보여줄 페이지 지정
isErrorPage   해당 페이지가 에러를 처리할지 여부 지정

 

(1) language / contentType / pageEncoding

Eclipse에서 JSP 파일을 생성 시 기본으로 나오는 페이지의 속성들이다.

 

[해석]
language 스크립팅 언어는 JAVA
contentType 문서의 타입 즉, MIME = text/html, charset = UTF-8
※ MIME: Multipurpose Internet Mail Extensions의 약자로 간략하게 파일 변환을 뜻한다.
pageEncoding 소스 코드의 인코딩 방식은 UTF-8

 

(2) import

Java를 사용할 때 처럼 외부 클래스를 불러올 때 사용되는 속성이다. 

Java와 마찬가지로 Java.lang 패키지에 속하지 않은 클래스를 JSP 문서에서 사용하기 위해 사용된다.

import 속성

[해석]
Line 2 - Line 15
Line 1 - Line 16 

 

(3) errorPage / isErrorPage

jsp에서 작업을 하다보면 간혹 404 또는 500 오류 페이지를 접하게 된다.

404 에러 _ 페이지를 찾을 수 없음
500 내부 서버 오류

 

404는 페이지 경로를 다시 잡아주거나 파일을 만들어주면 해결이 되지만

고객의 눈에 이런 페이지들이 들어온다면 나라도 다시 들어가고 싶지 않을 것이다.

 

오류가 날 수 는 있으나 다음과 같은 화면이 나오지 않게 하는 방법 두 가지를 알아보자.

그전에 500 에러가 나온 코드를 살펴보자.

 

 

(1) 내장 객체인 request로부터 age라는 이름의 값을 받아와 정수로 변환하는 것인데
최초 실행시에는 매개변수가 없어 null값이 전달되어 에러가 발생한 것이다.
(2)  위에서 이미 에러가 났는데 아래 코드가 실행될 수 없다.
  • try/catch: 가장 많이 사용해 봤으며 가장 자주 사용하는 방법이다.

try-catch 작성코드
catch의 out.println 문장

  • errorPage / isErrorPage: JSP의 page 속성이자 이번에 배워볼 것들이다.

순서는 다음과 같다.

먼저, ErrorPage를 만들어 기존에 에러가 났던 코드를 옮겨준다.

다음, 상단 지시어 부분에 errorPage 속성을 추가해준다.

//ErrorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
	errorPage=isErrorPage.jsp %>
    
//isErrorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
	isErrorPage="true" %>
    
    //isErrorPage="true"
    // 발생된 에러 내용을 그대로 넘겨받아 isErrorPage에서 내용과 메시지 출력 가능

ErrorPage에서 발생된 에러가 isErrorPage로 넘어가 메시지를 출력하는 모습

[살펴보기]
exception Throwable exception - isErrorPage._jspService(HttpServletRequest, HttpServletResponse)
getClass() Class<? extends Throwable> java.lang.Object.getClass()
getName() String java.lang.Class.getName()
getMessage() String java.lang.Throwable.getMessage()
getXxx()는 모두 java.lang인가? 하는 궁금증이 생김. (알아볼 것)

 

(4) trimDireciveWhitespaces

JSP 파일을 실행 후 페이지에서 마우스 우클릭 → 페이지 소스 보기를 한다.

isErrorPage.jsp 페이지 소스 보기 화면

1번 라인에 아무것도 적혀있지 않고 2번부터 시작하는 것을 볼 수 있다.

아직 안드로이드까지 공부하지는 못했지만 띄어져 있는 것이 외부 기기와 연동을 할 때 문제를 일으킬 수 있다고 한다.

이 때 이 공백을 지우는 데 사용되는 속성이 trimDireciveWhitespaces라고 한다.

trimDireciveWhitespaces="true"

trimDireciveWhitespaces 속성을 사용하니 비워져 있던 1번 라인을 메워서 코드가 시작하는 것을 볼 수 있었다.

그냥 이런 것이 있다는 정도로만 보고 넘어가도록 하겠다.

 

(5) buffer / autoFlush

buffer

가장 쉽게 접할 수 있는 곳으로 Youtube 같은 스트리밍 서비스가 있다.
네트워크로 영상이 전송될 때 작은 단위로 여러 번 전송하는 것보다 크게 묶어서 한 번에 보내는게 효율적인데
이 때 한 번에 묶는 임시 저장소를 buffer라고 한다.

기존에 A에서 Z로 파일 보낼 때 입력할 때마다 파일이 전송됐다면buffer는 저장소의 용량을 채우면 그 용량에 담긴 만큼 한 번에 전송한다.

 

//기본값이 8kb이며, 사용하고 싶지 않으면 'none'으로 지정한다.
//buffer가 없으면 에러페이지 기능 및 2장에서 학습할 forward기능을 사용할 수 없다.
<%@ page buffer = "8kb" %>

//autoFlush
//buffer가 모두 채워졌을 때의 처리 방법을 정할 때 쓴다.
//true(default): buffer가 채워지면 자동으로 flush. false: buffer가 채워지면 예외 발생시킴
//flush: buffer 안의 데이터를 목적지로 전송하고 buffer 비우는 작업
<%@ page buffer = "8kb" autoFlush="false" %>

 

 

2. include

웹 사이트를 가운데 핵심 내용만 달라지고 상단메뉴 또는 하단 회사 정보는 페이지마다 똑같은 걸 볼 수 있다.

각 페이지마다 반복되는 파일들을 따로 분류하고 content, body 부분만 바꿔서 페이지를 만들 때 

사용하는 지시어가 바로 'include'이다.

 

파일 2개를 통해 예제를 알아보자.

  • IncludeFile.jsp
  • IncludeMain.jsp

 

(1) IncludeFile.jsp

이 곳에선 날짜와 관련한 Java time을 import 받고 

오늘 날짜에 해당하는 today 변수와 내일 날짜에 해당하는 tomorrow변수를 만든다.

 

(2) IncludeMain.jsp

Main파일에서는 위쪽에 include 지시어를 사용하여 IncludeFile.jsp를 사용하겠다는 문장을 적는다.

<body>에는 출력하는 문장만 적은 후 IncludeMain.jsp에서 파일을 실행한다.

 

(3) IncludeMain.jsp 실행 결과

IncludeMain.jsp 실행결과

출력된 문장은 IncludeMain.jsp의 것이지만 title은 IncludeFile.jsp의 것이다. 

하지만 주소는 또 IncludeMain.jsp의 것임을 확인할 수 있다. 

 

※ 번외:

include를 사용하면 Main파일에서 File의 코드들을 이어받는다는 것을 알았지만 

title은 File의 것을 쓰는지는 제대로 몰랐다. 

이미지를 올리면서 주소는 맞는 거 같은데 왜 title이 File을 쓰는가에 대해 생각해보는 시간을 가질 수 있었다.

 

3. taglib

EL에서 Java class의 메소드를 호출하거나 JSTL(JSP Standard Tag Library)을/를 사용하기 위한 지시어다.

보충교재 상에선 10장에서 다룬다고 한다.

'ebook > jsp' 카테고리의 다른 글

[5] 내장 객체 - request  (0) 2022.05.24
[4] 스크립트 요소  (0) 2022.05.23
[2] JSP란  (0) 2022.05.17
[1] HelloJSP.jsp  (0) 2022.05.16
[보충교재] 성낙현의 JSP 자바 웹 프로그래밍  (0) 2022.05.16

+ Recent posts