[JSP] 디렉티브 태그(directive tag)
디렉티브 태그(directive tag):
JSP 설정. JSP 페이지를 어떻게 처리할까?를 설정
(1) page(<%@ page ... %>): 페이지 정보 설정
디렉티브 이름은 page이고 , contentType, language라는 속성 사용했고 값은 각각 text/html, java다.
language : 사용할 프로그래밍 언어(대표적으로 java를 많이쓴다.)
contentType: 생성할 문서의 타입을 지정(text/html)
cf) text/html, text/plain, application/wsword
charset : UTF-8, EUC-KRpageEncoding: 문자 인코딩 설정(UTF-8)
import : 사용할 자바 클래스를 설정
<%@ page import="java.util.Date"%>
<%@ page import="java.io.*, java.lang.*" %>
page 디렉티브의 import 속성: JSP 페이지에서 사용할 자바 클래스 설정
JSP 컨테이너가 자동으로 java.io.*와 java.lang.* 패키지를 가져와준다.
session : 세션 사용 여부 설정(기본값 true라 생략가능)
buffer: 출력 버퍼 크기를 설정(기본값 8KB)
autoFlush: 출력 버퍼에 동작 제어 설정(기본값 ture)
errorPage: 오류 발생 시 보여줄 오류(404-jsp를 찾을 수 없다, 500-프로그래밍오류) 페이지 설정(jsp)
<%@ page errorPage="MyErrorPage.jsp" %>
-
isErrorPage: 오류 페이지 여부 설정(기본값 false이라서 수동으로 true로 바꿔줘야한다. 생략시 오류를 위한 페이지가 아니다라는 뜻)
exception.getMessage(): 예외 메시지
exception.printStackTrace() : 예외 추적 메시지 출력
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Directives Tag-MyErrorPage.jsp</title>
</head>
<body>
<h4>errorPage 디렉티브 태그</h4>
<h5>오류가 발생했습니다.</h5>
<%
exception.printStackTrace(new PrintWriter(out));
// 왜 오류가 발생했는지 콘솔창 내용들을 출력해줌. execption 객체를 쓰고싶으면 에러페이지로 설정해줘야함.
%>
*page 디렉티브의 isErrorPage 속성은 현재 JSP 페이지가 오류페이지인지<br>
여부를 설정하는데 사용한다. 기본값은 false. 생략시 오류를 위한 페이지가 아니다라는 뜻
</body>
</html>
http://localhost:8090 => WebContet
크롬에서
http://localhost:8090/ch06/readParameterNoErrorPage.jsp?name=a001
http://localhost:8090/ch06/readParameterNoErrorPage.jsp 로 요청
?name=a001는 파라미터
<%
// ?name = a001
out.print(request.getParameter("name").toUpperCase());
%>
만약 ?name=a001이 없으면 에러발생
에러페이지 설정
<%
try{
out.print(request.getParameter("name").toUpperCase());
}catch(Exception ex){
out.print("name 파라미터가 올바르지 않습니다.");
}
%>
또는
<%
try{
out.print(request.getParameter("name").toUpperCase());
}catch(Exception ex){
out.print("<img src='/images/에러.jpg'>");
}
%>
인터넷 익스플로러는 오류 페이지의 길이가 513바이트보다 작으면 자체적으로 제공하는 오류페이지를 화면에 출력 그래서 에러 페이지의 길이가 513 바이트 이상이 되도록 해주어야 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page errorPage = "/error/noParamEx.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파라미터가 없는 오류가 발생함</title>
</head>
<body>
/error/noParamEx.jsp를 생성하여 오류처리
<%
// memId = a001과 같은 파라미터가 없을 시 null을 toUpperCase하는 과정에서 오류발생
String memId = request.getParameter("memId").toUpperCase();
%>
<!-- 인터넷 익스플로러는 오류 페이지의 길이가 513바이트보다 작으면 자체적으로 제공하는 오류페이지를 화면에 출력
그래서 에러 페이지의 길이가 513 바이트 이상이 되도록 해주어야 한다. 그래서 주석에 지금처럼 아무글이나
적어서 513바이트 이상이 되도록 해주어야함 -->
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<title>예외발생</title>
</head>
<body>
요청 처리 과정에서 예외가 발생했습니다<br>
빠른 시간 내에 문제를 해결하도록 하겠습니다.<br>
<p>
오류타입: <%=exception.getClass().getName()%><br>
오류 메시지: <b><%=exception.getMessage() %></b>
</p>
</body>
</html>
하지만 에러처리는 보통 xml에서 많이한다.(중요)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>JSPBook</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--
error-code: 404(페이지가 없다), 500(개발자 실수) 등의 응답 상태 코드
location : 오류 페이지의 URI(URL + 기능)
-->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/500.jsp</location>
</error-page>
</web-app>
오류 페이지 처리 순서
우선순위1. page 디렉티브의 errorPage 속성 사용(전용 오류 처리)
우선순위2. web.xml 파일의 exception-type(범용 오류 처리)
우선순위3. web.xml 파일의 error-code(별도 오류 처리)
우선순위4. 우선순위 1~3까지 아무것도 안했다면.. 웹컨테이너(tomcat)가 제공하는 기본 오류 페이지를 보여준다.
버퍼와 에러메시지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page buffer="1kb" %>
<%@ page errorPage="/error/noParamEx.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>버퍼 플러시 이후 예외 발생 결과</title>
</head>
<body>
<!-- 1KB를 초과하는 데이터를 출력하여 버퍼가 flush 되도록 해보자 -->
<%
for(int i=0; i<256; i++){
out.print(i + " ");
}
%>
<!-- 자바에서 0으로 나누면 ArithmeticException 발생 -->
<%=1/0 %>
</body>
</html>
(2) include(<%@ include... %>): 다른 문서를 포함시켜준다.
- 현재 JSP 페이지의 특정 영역(top, bottom)에 외부 파일(top.jsp, bottom.jsp)의 내용을 포함하는 태그다.
- 외부 파일 => JSP, HTML, 텍스트 파일
- 어디든 선언 가능함
<body>
<%@ include file="/ch03/include02_header.jsp" %>
<p>다음달 조고르동의 생일을 미리 축하합니다. ^0^</p>
<%
for(int i=0; i<=9; i++){
if(i%2==0){
out.print(2 * i +"<br>");
}
}
%>
<%@ include file="include02_footer.jsp" %>
</body>
(3) taglib(<%@ taglib... %>): 태그 라이브러리 설정. 현재 JSP 페이지에 표현 언어(EL), JSTL, 사용자 정의 태그(custom tag)와 같은 태그 라이브러리를 설정하는 태그.
- uri => url + 기능 => "경로" prefix="태그 식별자"
- 원리
taglib 디렉티브 태그가 서블릿 프로그램으로 번역됨.
uri 경로가 JSP 컨테이너에 사용자가 정의한 태그 라이브러리의 위치를 알려줌
prefix 속성의값(c, fmt)은 사용자가 정의한 태그 라이브러리의 접두어 태그가
무엇인지 JSP 컨테이너에 알려주는 역할을 함
<%@ 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>
<title>Directives Tag</title>
</head>
<body>
<!--
var : 변수
begin : 시작
end : 종료
step : 증가
-->
<c:forEach var="i" begin="1" end="10" step="1" >
<c:out value="${i}"></c:out>
</c:forEach>
</body>
</html>
Author And Source
이 문제에 관하여([JSP] 디렉티브 태그(directive tag)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vgo_dongv/JSP-디렉티브-태그directive-tag저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)