[JSP] 2.디렉티브 태그
디렉티브 태그란 ?
JSP 페이지를 어떻게 처리할 것인지를 설정하는 태그
JSP페이지가 서블릿 프로그램에서 서블릿 클래스를 변환할 때, JSP페이지와 관련된 정보를 JSP컨테이너에 지시하는 메시지
디렉티브 태그 | 형식 | 설명 |
---|---|---|
page | <%@ page ... %> | JSP 페이지에 대한 정보를 설정한다 |
include | <%@ include ... %> | JSP 페이지의 특정 영역에서 다른 문서를 포함한다. |
taglib | <%@ taglib ... %> | JSP 페이지에서 사용할 태그 라이브러리를 설정한다. |
page 디렉티브 태그
현재 JSP 페이지에 대한 정보를 설정하는 태그
일반적으로 JSP 페이지의 최상단에 선언하는 것을 권장함
<%@ page contentType="text/html;charset=UTF-8" language="java" ... %>
속성 | 설명 | 기본값 |
---|---|---|
language | 현재 JSP 페이지가 사용할 프로그래밍 언어를 설정 | java |
contentType | 현재 JSP 페이지가 생성할 문서의 콘텐츠 유형을 설정 | text/html |
pageEncoding | 현재 JSP 페이지의 문자 인코딩을 설정 | ISO-8859-1 |
import | 현재 JSP 페이지가 사용할 자바 클래스를 설정 | |
session | 현재 JSP 페이지의 세션 사용 여부를 설정 | true |
buffer | 현재 JSP 페이지의 출력 버퍼 크기를 설정 | 8KB |
autoFlush | 출력 버퍼의 동작 제어를 설정 | true |
inThreadSafe | 현재 JSP 페이지의 멀티스레드 허용 여부를 설정 | true |
info | 현재 JSP 페이지에 대한 설명을 설정 | |
errorPage | 현재 JSP 페이지에 오류가 발생했을 때 보여줄 오류 페이지를 설정 | |
isErrorPage | 현재 JSP 페이지가 오류 페이지인지 여부를 설정한다. | false |
isELIgnored | 현재 JSP 페이지의 표현 언어(EL)지원 여부를 설정 | false |
isScriptingEnabled | 현재 JSP 페이지가 스크립트 태그 사용 여부를 설정 |
pageEncoding 속성
현재 JSP 페이지의 문자 인코딩 유형을 설정하는 데 사용됨
문자 인코딩 유형의 기본 값 : ISO-8859-1
import 속성
- 현재 JSP 페이지에서 사용할 자바 클래스를 설정
- 둘 이상의 자바 클래스를 포함하는 경우
,
로 구분해서 여러 개의 자바 클래스를 설정 - 여러 개의 클래스를 각각 별도로 설정도 가능
예시
<% page import=”java.io.*” %>
<%page import = “java.io.*, java.lang.*” %>
<% page import=”java.io.*” %>
<% page import=”java.lang.*” %>
보통 지시자는 맨 위에 넣는다. 태그 중간에는 넣지 X
ex)
<%@ page contentType="text/html; charset=UTF-8"
import = "java.util.Date"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<%= new Date()%>
</body>
</html>
Date 객체는 Deprecated 되어있으므로 java.time.LocalDateTime을 사용하자
<%@ page contentType="text/html; charset=UTF-8"
import = "java.time.LocalDateTime"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<%= LocalDateTime.now()%>
</body>
</html>
주의 ) 값 출력을 제외한 모든 <%%>는 태그 안에 넣으면 관리가 불가능하므로, 중간에 절대 넣으면 안된다.
사용자가 로그인을 하는 경우, 로그인 한 상태가 유지되어야한다. HTTP 프로토콜은 클라이언트의 상태 정보를 관리해주지 않기 때문에 상태 정보를 별도로 관리해주기 위해 쿠키, 세션을 사용한다.
- 쿠키 : 클라이언트에 저장
- 세션 : 서버에 저장
session 속성
현재 JSP 페이지의HTTP 세션 사용 여부를 설정
기본값 : true
- if) false를 사용할 경우, 내장객체인 session을 사용할 수 없다는 의미이므로 세션을 유지 관리할 수 없음
<% page session="true" %>
Buffer 속성
- 현재 JSP 페이지의 출력 버퍼 크기를 설정
- 속성 값 : none과 ‘버퍼 크기’로 설정
- 버퍼 크기 : 출력 버퍼에 먼저 기록한 후 웹 브라우저로 보냄
출력 버퍼 크기를 none으로 설정
<% page buffer="none"%>
출력 버퍼 크기를 32KB로 설정
<% page buffer="32KB"%>
autoFlush 속성
자동으로 출력 버퍼를 비우는 것을 제어
isThreadSafe 속성
멀티 스레드의 동작을 제어하는데 사용
autoFlush 속성, isThreadSafe 속성은 설정할 일 없으므로 알아만 두자.
info 속성
- 현재 페이지에 대한 설명 설정
<% page info = "Home Page JSP"%>
errorPage 속성
- 실행되는 동안 오류가 발생하면 특정 오류 페이지로 이동하는데 사용
<% page errorPage="MyErrorPage.jsp"%>
isErrorPage 속성
현재 JSP 페이지가 오류 페이지인지 여부를 설정하는 데 사용됨
기본값 : false
특징
- 예외 처리를 위한 내장 객체인 exception 변수를 사용할 수 없음
- true로 설정 시 현재 JSP 페이지는 오류 페이지가 됨
현재 JSP 페이지가 오류 페이지가 되도록 true 설정
<%@ page isErrorPage="true" %>
isELIgnored 속성
현재 JSP 페이지의 표현 언어 사용 여부를 설정하는 데 사용됨
기본값 : false
true로 설정 시 정적 텍스트로 처리
isELIgnored 속성 사용 예 : 표현 언어를 처리하지 않기 위한 true 설정
<%@ page isELIgnored="true" %>
isScriptingEnabled 속성
스크립트 태그(선언문, 스크립틀릿, 표현문) 사용 여부를 설정하는 데 사용됨
스크립트 태그를 사용하지 않기 위한 false 설정
<%@ page isScriptingEnabled="false" %>
include 디렉티브 태그
현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그
이런 태그는 왜 필요할까 ?
웹 페이지의 경우, 헤더, 푸터, 사이드바는 항상 동일하다. 항상 새로 같은 코드를 넣어서 사용하면 유지보수가 힘들어지기 때문에 사용한다.
<% include file="파일명" %>
file 속성 값
- 현재 JSP 페이지에 포함할 내용을 가진 외부 파일명
- 이때 외부 파일이 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정
- OR 전체 URL(또는 상대 경로)을 설정
⚠️ HTML은 한글 문제가 발생할 수 있으므로 사용 X
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include directive Example</title>
</head>
<body>
<H2>include directive Example</H2>
<hr />
<%@ include file="contents.jsp" %>
<hr />
<%@ include file="contents.html" %>
</body>
</html>
contents.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
contents JSP문서의 내용입니다!
contents.html
contents HTML문서의 내용입니다!
Taglib 디렉티브 태그
태그 라이브러리를 설정하는 태그
JSTL : 태그 형식으로 다양한 여러 동적인 처리 수행