[CH03]디렉티브 태그
※JSP 처리 과정 ※
[ JSP 컨테이너 ] : JSP 페이지(A.jsp) -(번역)→ (A.jsp.java) -(컴파일)→ (A.jsp.class)
└자바 코드가 삽입되어 있는 태그를 처리하고 나머지는 HTML 코드나 일반 텍스트로 간주
└태그 : 스크립트 태그(Script Tag), 디렉티브 태그(Directive Tag), 액션 태그(Action Tag)
스크립트 | 디렉티브 태그 | 액션 태그 |
프로그램 구행하는 기능 구현 | JSP페이지 처리 방법 설정 | 페이지 제어 |
1. 디렉티브 태그(Directive Tag)
JSP페이지를 어떻게 처리할 것인지 설정하는 태그
JSP페이지가 서블릿프로그램 →서블릿클래스로 변환(컴파일)할 때,
JSP페이지와 관련된 정보를 JSP컨테이너에 지시하는 메시지. jsp 파일 생성할 때, 자동으로 맨 위에 붙음.
<!--디렉티브 태그-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body> </body>
</html>
(1) 디렉티브 태그 <%@ ... %>
page | include | taglib |
<%@ page ... %> | <%@ include ...%> | <%@ taglib ... %> |
JSP페이지 정보 설정 | JSP페이지에 다른 문서 포함 | JSP페이지에서 사용할 태그 라이브러리 설정 |
(2) 디렉티브 태그 종류
(2-1) Page <%@ page ... %>
현재 JSP페이지에 대한 정보를 설정하는 태그. JSP 페이지의 어디에서든 선언할 수 있지만 일반적으로 JSP 페이지의 최상단에 선언하는 것을 권장. 생성했을 때, 자동으로 페이지 맨 위에 붙음.
-속성 필요에 따라 추가해서 사용.
현재 JSP페이지 기준
language | contentType | pageEncoding | import |
프로그래밍 언어 설정 | 문서의 콘텐츠 유형 | 문자 인코딩 설정 | 사용할 자바 클래스 설정 |
session | buffer | errorPage | isELIgnored |
세션 사용 여부 설정 | 출력 버퍼 크기 설정 | 오류 발생 시 보여줄 오류 페이지 설정 |
현 JSP페이지의 표현언어(EL)의 지원여부 |
isThreadSafe | autoFlush | isErrorPage | isScriptingEnabled |
멀티스레드 허용 여부 | 출력 버퍼의 동작 제어 | 현재 페이지가 오류페이지인지 설정 |
스크립트 태그 사용 여부 |
(2-1-1) language : 프로그래밍 언어. 기본 java
(2-1-2) contentType : 기본값 text/html
HTML을 출력하는 JSP 페이지는 contentType 굳이 사용할 필요없음.
Google에서 MIME 타입을 치면 contentType에 사용할 수 있는 확장자를 알 수 있음.
_사용예시) contentType="text/xml; charset=UTF-8"
<%@ page language="java" contentType="text/xml; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
<h2>contentType 디렉티브 태그</h2>
<h4>text/html : HTML 출력</h4>
<h4>charset-UTF-8 : 문자인코딩</h4>
</body>
</html>
xml 방식으로 출력됨.
_예시) contentType="application/msword; 변경 → application/pdf;(pdf형식), application/zip(zip형식);
msword로 저장되지 않는다면 컴퓨터에 msword가 설치되지 않았을 것. 메모장은 text/plain;'이고 메모장은 저장되지 않고 곧바로 이클립스에 출력됨.
<%@ page contentType="application/pdf;"%>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
Today's is : <%= new java.util.Date() %>
</body>
</html>
(2-1-3) import
_현재 날짜 가져오는 유틸을 사용하기 위해 import
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
<%@ page import = "java.util.Date"
%>
Today is <%= new Date() %>
</body>
</html>
*import하지 않는다면, 아래 방식으로 현재 날짜를 가져올 수도 있음.
<%= new java.util.Date() %>
(2-1-4) session : 기본값 true
-false :
해당 JSP페이지에서 내장 객체인 세션 변수를 사용할 수 없다는 의미이므로 해당 페이지에 대한 세션을 유지 관리할 수 없음.
(2-1-5) buffer : JSP 페이지 출력 버퍼 크기 설정. none값과 '버퍼 크기' 설정.
<!--출력버퍼 none-->
<%@ page buffer = "none" %>
<!--출력버퍼 32KB-->
<%@ page buffer = "32KB" %>
(2-1-6) errorPage : 에러났을때 이동할 페이지 설정.
-에러가 발생했을 때 띄울 페이지와 에러가 발생할 페이지 필요.
-에러 발생 시 띄울 페이지 작성 : errorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>error Page 디렉티브 태그</h4>
에러가 발생했습니다.
</body>
</html>
-에러를 생성시킨 파일 : page_errorPage.jsp
str가 null인데 출력하라고 해서 에러뜸.
<%@ page errorPage="errorPage.jsp" %> <!--에러 발생 시 연결할 페이지 설정-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 단순HTML 파일로 작성 -->
<%
String str = null;
out.println(str.toString());
%>
</body>
</html>
연결시킨 에러페이지가 없다면 jsp 자체 에러페이지를 띄움.
(2-1-6-1) isErrorPage 현재 페이지를 에러페이지로 설정할지 여부
<%@ page isErrorPage = "true" %>
위와 같이 설정하면 현재 JSP페이지가 에러 페이지가 되도록 하는 것.
(2-1-7) isELIgnored
<%@ page isELIgnored = "true" %>
EL형식(${...})을 처리하지 않겠다.
_isELIgnored를 사용하지 않았을 때, 예시)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("RequestAttribute", "request 내장 객체");
%>
${requestScope.RequestAttribute} <!--값 출력-->
</body>
</html>
└출력결과 : request 내장 객체
* 내장객체 request
<%
request.setAttribute("RequestAttribute", "request 내장 객체");
%>
└오른쪽 값을 왼쪽에 넣겠다. 대입.
_isELIgnored를 사용했을 때, 예시)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isELIgnored = "true" %> <!--EL형식을 처리하지 않겠다.-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("RequestAttribute", "request 내장 객체");
%>
${requestScope.RequestAttribute}
</body>
</html>
└출력 : ${requestScope.RequestAttribute}
(2-2) include <%@ include ... %>
현재 JSP페이지에 외부 파일의 내용을 포함하는 태그. HTML, JSP, 텍스트 파일 등. 어디서든 선언 가능.
외부파일이 JSP페이지와 같은 디렉토리면 파일명만 적고 아니라면 경로 설정.
(2-2-1) include 예제1 : 삽입할 페이지와 페이지가 삽입될 페이지 필요.
-삽입할 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>헤더 페이지 영역</h4>
</body>
</html>
-삽입할 페이지를 넣을 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--페이지 삽입과 경로 설정-->
<%@ include file = "include01_header.jsp" %>
<h4>----------현재 페이지 영역----------</h4>
</body>
</html>
-결과
헤더 페이지 영역 ----------현재 페이지 영역---------- |
(2-2-1) include 예제2
-삽입할 페이지1 : : 다 지우고 아래 내용만 입력 (include01_header.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
int pageCount = 0;
void addCount(){
pageCount++; //실행할 때마다 카운트 증가
}
%>
<% //스크립틀릿에서 호출
addCount();
%>
<p> 이 사이트 방문은 <%=pageCount %>번째 입니다.
-삽입할 페이지2 : 다 지우고 아래 내용만 입력(include01_footer.jsp)
Copyright JSPBook
-include 설정할 페이지. include02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file = "include02_header.jsp" %>
<p> 방문해주셔서 감사합니다</p>
<%@ include file = "include02_footer.jsp" %>
</body>
</html>
-결과
이 사이트 방문은 1번째 입니다. 방문해주셔서 감사합니다 Copyright JSPBook |
(2-3) taglib <%@ taglib ... %>
현재 JSP 페이지에 표현하는 언어, JSTL, 사용자 정의 태그 등 태그 라이브러리를 설정하는 태그.
<%@ taglib uri="경로" prefix="태그 식별자" %>
(2-3-0) JSTL을 사용하려면 다운받아야 함.
Apache Jakarsta >> Taglibs >> Apache Standard Taglib
>> Standard JSTL 1.1 Servlet 2.4, JavaServerPages 2.0 download -두번째 것
>> binaries/ >> jakarta-taglibs-standard-1.1.2.zip (목록많으니까 ctrl + f 해서 찾아)
>> 다운받은 압축 파일 풀어서 lib 폴더 안의 파일 복사
>> 방법1) 열린 이클립스에서 현재 프로젝트 → WebContent → WEB-INF → lib에 붙여넣기
(2-3-1) prefix 속성
기능 | prefix | 기본 URI |
기본 기능 | c | http://java.sun.com/jsp/jstl/core |
형식화 | fmt | http://java.sun.com/jstl/fmt |
데이터베이스 작업 | sql | http://java.sun.com/jstl/sql |
XML 처리 | x | http://java.sun.com/jstl/xml |
함수 처리 | fn | http://java.sun.com/jsp/jstl/fn |
_사용 예제) forEach 사용해 1 ~ 10까지 출력
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!--사용준비-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach var="k" begin="1" end="10" step="1"> <!--반복문-->
<!-- for(var k=1; k<=10; k++)과 같은 조건 변수 / 시작점 / 종료점 / 증가 -->
<c:out value = "${k}"/> <!--출력-->
</c:forEach>
</body>
</html>
_직접해보기) 0부터 10까지의 짝수 출력하기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<C:forEach var="k" begin="0" end="10" step="2">
<!-- for(var k=1; k<=10; k++)과 같은 조건 변수 / 시작점 / 종료점 / 증가 -->
<C:out value = "${k}"/>
</C:forEach>
</body>
</html>
taglib에서 대문자 적으면 바디에서도 대문자 C로 적어야 함.