수업/└JSP

[CH03]디렉티브 태그

onlyun 2022. 2. 11. 12:03

※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로 적어야 함.