본문 바로가기

JSP, Servlet, MySQL/JSP - webmarket

디렉티브 태그 : 한글 출력 및 페이지 모듈화 하기

728x90
반응형

chapter 3-1

디렉티브 태그 : 한글 출력 및 페이지 모듈화 하기

01. 디렉티브 태그의 개요

디렉티브 태그는 jsp페이지를 어떻게 처리할 것인지를 설정하는 태그.

디렉티브 태그는 jsp페이지가 서블릿 프로그램에서 서블릿 클래스로 변환할 때 jsp페이지와 관련된 정보를 jsp컨테이너에 지시하는 메시지.

따라서 디렉티브 태그는 jsp 페이지를 수정하여 다시 컴파일 하는 경우에만 역할을 수행하기 때문에 개별 html 응답에 특별한 영향을 미치지 않는다.

디렉티브 태그 형식 설명

page <%@ page ….%> jsp페이지에 대한 정보를 설정한다.
include <%@include …%> jsp페이지의 특정 영역에 다른 문서를 포함한다.
taglib <%@ taglib…%> jsp페이지에서 사용할 태그 라이브러리를 설정한다.

02.page 디렉티브 태그의 기능과 사용법

page 디렉티브 태그는 현재jsp페이지에 대한 정보를 설정하는 태그로 형식은 다음과 같다.

page 디렉티브 태그는 jsp페이지가 생성할 콘텐츠 유형의 문서, 사용할 자바 클래스, 오류 페이지 설정, 세션 사용 여부, 출력 버퍼의 존재 유무 등과 같이 jsp컨테이너가 jsp페이지를 실행하는데 필요한 정보를 설정할 수 있다.

page 디렉티브 태그는 jsp 페이지의 어디에서든 선언할 수 있지만 일반적으로 jsp 페이지의 최상단에 선언하는것을 권장한다.

<%@ page 속성1="값1" [속성2="값2"....] %>    //<%와 @사이에 공백이 없어야 한다.

page 디렉티브 태그의 속성

속성 설명 기본 값

language 현재 jsp 페이지가 사용할 프로그래밍 언어를 설정한다. java
contentType 현재 jsp 페이지가 생성할 문서의 콘텐츠 유형을 설정한다. text/html
pageEncoding 현재 jsp 페이지의 문자 인코딩을 설정한다. ISO-8859-1
import 현재 jsp 페이지가 사용할 자바 클래스를 설정한다.  
session 현재 jsp 페이지의 세션 사용 여부를 설정한다. true
buffer 현재 jsp 페이지의 출력 버퍼 크기를 설정한다. 8KB
autoFlush 출력 버퍼의 동작 제어를 설정한다. true
isThreadSafe 현재 jsp 페이지의 멀티스레드 허용 여부를 설정한다. true
info 현재 jsp 페이지에 대한 설명을 설정한다  
errorPage 현재 jsp 페이지에 오류가 발생했을 때 보여줄 오류 페이지를 설정한다.  
isErrorPage 현재 jsp 페이지가 오류 페이지인지 여부를 설정한다. false
isELlgnored 현재 jsp 페이지의 표현 언어(EL)지원 여부를 설정한다. false
isScriptingEnabled 현재 jsp 페이지의 스크립트 태그 사용 여부를 설정한다.  

하나의 pafe 디렉티브 태그에 하나 또는 여러 개의 속성을 설정할 수 있다. 또는 여러개의 속성마다 개별적으로 page디렉티브 태그를 선언할 수 있다. 그리고 import 속성을 제외한 속성은 jsp페이지에 한 번씩만 설정할 수 있다.

2.1 language 속성

[language 속성 사용 예: 자바 프로그래밍 언어 설정]

<%@ page language="java" %>

2.2contentType 속성

콘텐츠 유형은 주로 text/html , text/xml, text/plain 등이며, 기본값은 text/html 로 HTML을 출력하는 jsp페이지는 contentType 을 사용할 필요가 없다..

[contentType 속성 사용 예 : text/html 콘텐츠 유형 설정]

<%@ page contentType="text/html" %>

[contentType 속성 사용 예 : utf-8 문자열 세트 설정]

<%@ page contentType="text/html:charset=utf-8" %>

page 디렉티브 태그에 콘텐츠 유형을 마이크로소프트 워드 문서로 설정하기

<%@ page contentType="application/msword" %>
<html>
<head>
	<title>Directives Tag</title>
</head>
<body>
	Today is : <%=new java.util.Date() %>
</body>
</html>

page 디렉티브 태그에 콘텐의 유형을 XML문서로 한글 출력 설정하기

<%@ page contentType="text/xml; charset=utf-8" %>
<html>
<head>
	<title>Directives Tag</title>
</head>
<body>
	<h2>contentType 디렉티브 태그</h2>
	<h4>text/html : HTML 출력 </h4>
	<h4>charset=utf-8 : 문자 인코딩 </h4>
</body>
</html>
출력결과:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
<h2>contentType 디렉티브 태그</h2>
<h4>text/html : HTML 출력 </h4>
<h4>charset=utf-8 : 문자 인코딩 </h4>
</body>
</html>

2.3pageEncoding 속성

[pageEncoding 속성 사용 예 : ISO-8859-1 문자 인코딩 유형 설정]

<%@ page pageEncoding="ISO-8859-1" %>

이 예는 다음에서 보듯이 contentType속성의 문자열 세트를 설정한 것과 같은 기능을 한다.

<%@ page contentType="text/html; charset=iso-8859-1" %>

2.4 import 속성

import 속성은 현재 jsp 페이지에서 사용할 자바 클래스를 설정하는 데 쓰인다. 둘이상의 자바 클래스를 포함하는 경우 쉼표(,)로 구분하여 연속해서 여러개의 자바 클래스를 설정할 수 있다.

[import 속성 사용 예: 자바 패키지 java.io.* 설정]

<%@ page import="java.io.*" %>

[import 속성의 다중 자바 클래스 참조 예:java.io.* 와 java.lang.* 패키지 설정]

<%@ page import="java.io.*,java.lang.*" %>

위의 예에서는 기본적으로 jsp 컨테이너가 자동으로 java.io.* 와 java.lang.* 패키지를 가져와 사용한다. 이를 다음과 같이 개별적으로 설정할 수도 있다.

<%@ page import="java.io.*" %>
<%@ page import="java.lang.*" %>

page 디렉티브 태그에 Date 클래스를 이용하여 현재 날짜 출력하기

<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%@ page import="java.util.Date" %>
	Today is<%=new Date() %>
</body>
</html>
출력결과:
Today isSat Aug 05 03:35:54 KST 2023

2.5 session 속성

session 속성은 현재 jsp 페이지의 http 세션 사용 여부를 설정하는 데 사용한다.

기본값은 세션을 자동으로 사용하는 true 이며, 세션을 사용하지 않으려면 false로 설정한다. session 속성 값이 true 이면 현재 jsp 페이지에서 jsp 내장 객체 인 session 변수를 사용 할 수 없다. 만약 session 속성 값을 false 로 설정하면 해당 jsp 페이지에서 내장 객체인 session 변수를 사용 할 수 없다는 의미이므로 해당 페이지 대해 세션을 유지 관리 할 수 없다.

[session 속성 사용 예 : session 내장 객체 사용을 위한 true 설정]

<%@ page ssession="true" %>

<aside> 💡 session 속성을 사용 하는 이유

</aside>

세션은 일반적으로 웹 애플리케이션이 실행되는 동안 사용자가 웹 애플리케이션의 데이터를 가져와 확인할 수 있는 권한을 부여받기 위해 사용한다. 예를 들면 사용자가 은행 계좌에 로그인하여 로그아웃(또는 세션 만료)할 때까지 모든 데이터에 접근할 수 있다. 따라서 jsp 페이지에 대한 세션을 유지하려면세션 속성이 true 여야 한다.

2.6 buffer 속성

buffer 속성은 현재 jsp 페이지의 출력 버퍼 크기를 설정하는데 사용한다. 이 속성 값은 none 과 ‘버퍼 크기’로 설정할 수 있다. 속성 값을 none 으로 설정하면 출력 버퍼를 채우지 않고 웹브라우저로 직접 보내게 된다.

[buffer 속성 사용 예: 출력 버퍼 크기를 none으로 설정]

<%@ page buffer="none" %>

‘버퍼 크기’로 속성 값을 설정하면 출력 버퍼에 먼저 기록 한 수 웹 브라우저로 보낸다. 이때 기분 버퍼 크기는 서버의 고유한 값이지만 일반적으로 8KB이다. 다음은 버퍼 크기를 32KB 로 설정하는 예이다. 이렇게 설정하면 페이지가 완료되는 경우나 출력이 명확하게 되는 경우를 제외하고는 출력 버퍼에 출력 내용이 최소한 32KB 누적될 떄까지 웹 브라우저에 전송되지 않는다.

[buffer 속성 사용 예 : 출력 버퍼 크기를 32KB로 설정]

<%@ page buffer="32KB" %>

page 디렉티브 태그에 출력 버퍼 크기를 16KB로 설정하기

<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%@ page buffer="16kb" %>
	Today is<%=new java.util.Date() %>
</body>
</html>
출력결과:
Today isSat Aug 05 03:48:41 KST 2023

2.7 autoFlush 속성

autoFlush 속성은 자동으로 출력 버퍼를 비우는 것을 제어하는 데 사용한다. 즉 출력 버퍼가 채워진 경우 자동으로 버퍼에 있는 데이터를 웹 브라우저로 보내고 버퍼를 비울지 또는 버퍼를 오버플로의 예외를 나타낼지 등의 처리를 설정하는 것이다. 기본값은 true 이며, 다음과 같이 속성값을 true 로 설정하면 출력 버퍼가 채워질 때마다 자동으로 웹 브랄우저에 보내고 버퍼를 비운다. 반면에 false 로 설정하면 출력 버퍼가 가득 채워질 때 버퍼 오버플로의 예외를 발생 시킨다.

[autoFlush 속성 사용 예: 출력 버퍼 자동 비우기를 위한 true 설정]

<%@ page autoFlush="true" %>

2.8 isThreadSafe 속성

isThreadSafe 속성은 현재 jsp 페이지에서 멀티스레드의 동작을 제어하는 데 용한다. 즉 여러 요청이 동시에 수신되는 경우 jsp 페이지가 어떻게 동작해야 하는지를 jsp 컨테이너에 지시하여 응답 할 수 있게 한다. 기본값은 true 이며, 다음과 같이 속성 값을 true 로 설정하면 jsp 페이지에 대해 수신된 여러 요청이 동시에 처리도니다. 반면에 false 로 설정하면 jsp 페이지에 대한 요청이 순차적으로 처리된다.

[isThreadSafe 속성 사용 예: 멀티스레드 처리를 위한 true 설정]

<%@ page isThreadSafe="true" %>

2.9 info 속성

info 속성은 현재jsp페이지에 대한 설명을 설정하는데 사용한다. 따라서 jsp 개발자가 페이지의 기능을 이해하는데 도움을 준다. 이 속성은 jsp 페이지의 설명 부분으로서 주석문의 기능과 같기 때문에 jsp 컨테이너는 info 속성을 무시한다.

[info 속성 사용 예: jsp 페이지 설명을 위한 설정]

<%@ page info="Home Page JSP" %>

<aside> 💡 info 속성이 서블릿에서 사용되는 방법

</aside>

jsp 페이지에 <%@ page info="Home Page JSP" %> 와 같이 선언하면 jsp 컨테이너는 info 속성에 대응하여 서블릿 인터페이스 getServletInfo()메소드를 사용한다. 즉 jsp 컨테이너는 info 속성 값인 설명 메시지를 검색하여 다음과 같이 getServletInfo() 메소드를 생성한다.

public String getServletInfo(){
	return "Home Page JSP";
}

page 디렉티브 태그에 현재 웹 페이지의 설명 작성하기

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%@ page info="Data 클래스를 이용한 날짜 출력하기" %>
	Today is<%=new java.util.Date() %>
</body>
</html>

2.10 errorPage 속성

errorPage 속성은 현재 jsp 페이지가 생행되는 동안 오류가 발생하면 특정 오류 페이지로 이동하는 데 사용한다. 웹 서버가 제공하는 기본 오류 페이지를 사용하지 않고 이동할 오류 페이지의 URL 을 설정한다. 다음은 jsp 페이지에 오류가 발생했을 때 오류 페이지로 설정한 MyErrorPage.jsp 로 자동 이동하는 예이다.

[errorPage 속성 사용 예 : 이동할 오류 페이지 MyErrorPage.jsp 설정]

<%@ page errorPage="MyErrorPage.jsp" %>

page 디렉티브 태그에 이동할 특정 오류 페이지 작성하기

<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%
		String str = null;
		out.println(str.toString());
	%>
</body>
</html>
출력결과:
http status 500-internal server error 

변수 str에 값을 저장하고 저장된 값을 출력하도록 스크립틀릿 태그를 작성함→출력결과 에러 발생

page 디렉티브 태그를 추가 수정한다

<%@ page errorPage="page_errorPage_error.jsp" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%
		String str = null;
		out.println(str.toString());
	%>
</body>
</html>

그리고 현재 jsp 페이지에 오류가 발생하면 오류페이지로 이동하기위해 page 디렉티브 태그의errorPage 속성을 작성

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<h4>errorPage 디렉티브 태그</h4>
	에러가 발생했습니다.
</body>
</html>
출력결과 : 
errorPage 디렉티브 태그
에러가 발생했습니다.

2.11 isErrorPage 속성

isErrorPage 속성은 현재 jsp 페이지가 오류 페이지인지 여부를 설정하는 데 사용한다. 기본값은 false 이며 예외처리를 위한 내장 객체인 exception 변수를 사용 할 수 없다. 속성값을 true로 설정하면 현재 jsp 페이지는 오류 페이지가 된다. 만약 다른 jsp페이지에서 오류가 발생하면, 호출되는 오류페이지는 true 가 설정된 jsp 페이지가 된다.

[isErrorPage 속성 사용 예: 현재 jsp 페이지가 오류 페이지가 되도록 true 설정]

<%@ page isErrorPage="true" %>

page 디렉티브 태그에 현재 jsp 페이지를 오류 페이지로 설정하기

<%@ page errorPage="page_isErrorPage_error.jsp" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%
		String str = null;
		out.println(str.toString());
	%>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<h4>에러가 발생했습니다.</h4>
	<h5>exception 내장 객체 변수</h5>
	
	<%
		exception.printStackTrace(new java.io.PrintWriter(out));
	%>
	
</body>
</html>
출력결과:
에러가 발생했습니다.
exception 내장 객체 변수
java.lang.NullPointerException: Cannot invoke "String.toString()" because "str" is null at org.apache.jsp.ch03.page_005fisErrorPage_jsp._jspService(page_005fisErrorPage_jsp.java:125) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833)

2.12 isELIgnored 속성

isELIgnored 속성은 현재 jsp 페이지의 표현 언어(expression language) 사용 여부를 설정하는데 사용한다. 기본값은 false 이며 jsp 페이지에 표현 언어의 표현식’${}’를 사용 할 수 있다. 속성값을 true 로 설정하면 jsp 페이지에 사용된 표현 언어의 표현식을 처리할 수 없기 때문에 정적 텍스트로 처리된다.

[isELIgnored 속성 사용 예 : 표현 언어를 처리하지 않기 위한 true 설정]

<%@ page isELIgnored="true" %>

page 디렉티브 태그에 표현 언어를 사용할수 없도록 설정하기

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	
	<%
		request.setAttribute("RequestAttribute","request 내장 객체");
	%>
	${requestScope.RequestAttribute}
	
</body>
</html>
출력결과:
request 내장 객체
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page isELIgnored="true" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	
	<%
		request.setAttribute("RequestAttribute","request 내장 객체");
	%>
	${requestScope.RequestAttribute}
	
</body>
</html>
출력결과:
${requestScope.RequestAttribute}

2.13 isSeriptingEnabled 속성

isScriptingEnabled 속성은 스크립트 태그(선언문, 스크립틀릿, 표현문) 사용 여부를 설정하는 데 사용한다. 속성 값은 true 나 false 이며 true 로 설정하면 기본 스크립트 태그를 사용할 수 있다. false 로 설정하면 스크립트 태그를 제한하기 때문에 스크립트 태그를 사용하는 경우 번역 시 오류가 발생한다.

[isScriptingEnabled 속성 사용 예: 스크립트 태그를 사용하지 않기 위한 false 설정]

728x90
반응형