JAVA/JSP

[JSP] 디렉티브 태그

아잠만_ 2024. 6. 25. 17:13

디렉티브 태그

JSP페이지를 어떻게 처리할 것인지를 설정하는 태그

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

page 디렉티브 태그

속성

  • language
    사용할 프로그래밍 언어 설정
  • contentType
    text/html(기본값), text/xml, text/plain ... 등등
    charset : 문자 세트 설정
  • pageEncoding
    문자 인코딩 유형 설정 contentType에서 charset으로 가능,기본값 ISO-8859-1
  • import
    현재 JSP 페이지에서 사용할 자바 클래스를 설정 (여러 개 일 때 , 로 구분이 가능하다)
예시
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
                                    ↓
<%@ page import="java.util.Date,java.text.SimpleDateFormat"%>
  • session
  • buffer
  • autoFlush
  • isThreadSafe
  • info
  • errorPage
  • isErrorPage
    오류 발생 시 특정 오류 처리 페이지로 이동
    기본 웹 서버 오류페이지는 TOMCAT의 내용을 포함해 불필요한 정보가 보여지므로 별개의 페이지로 처리한다
  • isELIgnored
  • isScriptingEnabled

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Date, java.text.SimpleDateFormat"%>
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%
		// 날짜 객체 생성
		Date today = new Date();
		
		// 간단 날짜 형식
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String str = sdf.format(today);
	%>
	 오늘 날짜 : <%=str %>
</body>
</html>

errorPage

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="page_errorPage_error.jsp" %>
<!-- 
	errorPage 속성 : 오류 발생 시 특정 오류 처리 페이지로 이동
 -->
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title> 
</head>
<body>
	<% // 스크립틀릿
		// 지역변수 : 밑에서 부터만 변수 활용 가능
		String str = null;
		
		// 오류 (null은 toString() 할 수 없음)
		// HTTP 상태 500 : HTTP Status. 개발자 오류
		out.print(str.toString());
	%>
	<%=str %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="page_errorPage_error.jsp" %>
<%@ page isErrorPage="true" %>
<!-- 
	isErrorPage 속성 : 오류 페이지인지 여부를 설정, 기본값은 false
 -->
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title> 
</head>
<body>
	<img alt="오류메세지" src="https://uic.yonsei.ac.kr/main/images/errorpage.jpg"><br>
	<!-- isErrorPage가 true이면 exception을 사용할 수 있다 -->
	<%=exception.getMessage() %> 
</body>
</html>

include 디렉티브 태그

html, jsp, 텍스트 파일 포함 가능

<%@ include file="파일명" %>

include01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%@ include file="include01_header.jsp" %>
	<h4>---------------- 현재 페이지 영역 -------------------</h4>
	<%@ include file="include01_footer.jsp" %>
</body>
</html>
include01_header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<h4>header 페이지 영역입니다.</h4>
include01_footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<h4>footer 페이지 영역입니다.</h4>

include02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
	<%
		// 지역변수
	String name = "오리";
	%>
	<%@ include file="include02_header.jsp" %>
	<p><%=name%>님 방문해 주셔서 감사합니다.
	</p>
	<%@ include file="include02_footer.jsp" %>
</body>
</html>
include02_header.jsp

1초마다 시간이 변경되는 헤더 (setInterval()이용)

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
	<div id="time"></div>
	<!-- 2024-06-26 14:09:39 -->
<script>
function fnCt(){
	let today = new Date();
	// 	console.log(today);
	// 연도
	let year = today.getFullYear();
	// 월
	let month = ('0' + (today.getMonth() + 1)).slice(-2);

	// 일
	let day = ('0' + today.getDate()).slice(-2);
	// 	console.log(today.getTime());
	let ampm = "오전"
	let hour = today.getHours();
	if(hour>=12){
		ampm = "오후";
		hour=hour-12;
	}
	hour = ('0' + hour).slice(-2);
	let min = ('0' + today.getMinutes()).slice(-2);
	let sec = ('0' + today.getSeconds()).slice(-2);
	let str = "<p>"+year + "-" + month + "-" + day + " " + hour + ":" + min 
		+ ":" + sec + " " + ampm+"</p>";
	document.querySelector('#time').innerHTML = str;
}
	setInterval(fnCt, 1000); // 1초마다 fnCt 함수를 호출
</script>
include02_footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
	addCount();
%>
<p><%=name %>님은 이 사이트에 <%=pageCount %>번째 방문하였습니다.</p>
<%! // 선언문
	// 전역 변수(재기동 해야 0으로 다시 초기화가 됨)
	String name = ""; // 지역변수에서 사용하므로 해당 이름입력X
	// 방문 카운터
	int pageCount = 0; 
	// 전역 메서드
	void addCount(){
		pageCount++;
	}
%>
<div>Copyright &copy; <%=name %></div>
<!-- 지역변수 name 들어감 -->

taglib 디렉티브 태그

EL(Expression Language-표현 언어), JSTL(JSP Standard Tag Library) 설정 태그

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • uri : 태그 설정 정보를 가진 경로 주소
  • prefix : 식별 명

prefix="c"

  • set
    JSTL
    java변수를 jsp 변수로 변환
    <c:set var="jsp변수이름" value="<%=java변수%>" />
  • 사용(출력)
    ${jsp변수이름}
  • forEach
    varStatus는 생략 가능하며 순번을 매길 때 주로 사용
    varStatus명.index 0번부터
    varStatus명.count 1번부터
    <c:forEach var="이름" items="${jsp변수이름}" varStatus="상태용변수">
         ${이름}
    </c:forEach>

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 
	taglib 디렉티브 : EL(Expression Language-표현 언어), 
				   JSTL(JSP Standard Tag Library) 설정 태그
	uri : 태그 설정 정보를 가진 경로 주소
	prefix : 식별 명
 -->
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%
	// java 세계의 변수
	String title = "JSTL Core 태그 라이브러리";
	String[] fruitArr = {"apple", "watermelon", "melon", "strawberry", "grape"};
	List<String> likeList = new ArrayList<>();
	likeList.add("초콜릿");
	likeList.add("사탕");
	likeList.add("젤리");
	likeList.add("과자");
	likeList.add("껌");
	
	List<Map<String, Object>> mapList = new ArrayList<>();
	Map<String, Object> map = new HashMap<>();
	map.put("name", "아잠만");
	map.put("age",5);
	map.put("animal","오리");
	mapList.add(map);
	Map<String, Object> map2 = new HashMap<>();
	map2.put("name", "뽀야미");
	map2.put("age",15);
	map2.put("animal","햄스터");
	mapList.add(map2);
	Map<String, Object> map3 = new HashMap<>();
	map3.put("name", "쭈니");
	map3.put("age",20);
	map3.put("animal","다람쥐");
	mapList.add(map3);
%>
<!-- JSTL -->
<!-- title이 subject라는 이름의 jsp의 변수가 된다 -->
<c:set var="subject" value="<%=title %>" />
<c:set var="arr" value="<%=fruitArr %>" />
<c:set var="list" value="<%=likeList %>" />
<c:set var="mapList" value="<%=mapList %>" />

<!-- java --> 
<h3><%=title %></h3>
<!-- EL -->
<h3>${subject}</h3>
<hr />

<!-- fruitArr 출력 -->
<c:forEach var="str" items="${arr}" varStatus="stat">
	<h5>${str}</h5>
</c:forEach>
<hr />

<!-- likeList 출력 -->
<c:forEach var="like" items="${list}" varStatus="stat2">
	<h5>${like}</h5>
</c:forEach>
<hr />

<!-- mapList 출력 -->
<table border="1">
	<tr>
		<th>번호</th>
		<th>이름</th>
		<th>나이</th>
		<th>종류</th>
	</tr>
<c:forEach var="map" items="${mapList}" varStatus="stat3">
	<tr>
		<td>${stat3.count}</td>
		<td>${map.name}</td>
		<td>${map.age}</td>
		<td>${map.animal}</td>
	<!-- 
		mapList : List<Map>
		하나 꺼내면 : map
		
		stat3.index : 0부터 시작
		stat3.count : 1부터 시작
	 -->
	</tr>
</c:forEach>
</table>
<hr />

<!-- 구구단 -->
<%for(int k=1; k<=9; k++){} %>
<c:forEach var="k" begin="1" end="9" step="1">
	<c:set var="o" value="${10-k}"/>	<!-- 자바변수 뿐만이 아니라 JSP변수 재정의도 가능하다 -->
	<h2>${o}단</h2>
	<c:forEach var="n" begin="1" end="9" step="1">
	<h4>${o} X ${n} = ${o*n}</h4>
	</c:forEach>
</c:forEach>
</body>
</html>

prefix="fmt"

  1. 숫자 포맷팅:
    <fmt:formatNumber value="${number}" type="currency" currencySymbol="₩" />
    <fmt:formatNumber value="${number}" type="number" pattern="#,###" />
     
  2. 날짜 포맷팅:
    <fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss" />
    

  3. 메시지 리소스 사용:
    <fmt:setBundle basename="messages" />
    <fmt:message key="welcome.message" />
    

  4. 타임존 설정:
    <fmt:setTimeZone value="GMT+9" />
    

  5. 지역 설정:
    <fmt:setLocale value="ko_KR"/>