JSTL : JSP 문서에서 많이 사용되는 EL 함수와 커스텀 태그를 제공하기 위한 라이브러리
JSTL 구성 라이브러리
태그 | 설명 |
---|---|
<c:out> | 출력하는데 사용 |
<c:set> | 사용할 변수를 설정하는데 사용 |
<c:remove> | 설정한 변수를 제거하는 데 사용 |
<c:catch> | 예외 처리에 사용 |
<c:if> | 조건물을 처리하는데 사용 |
<c:choose> | 다중 조건문을 처리하는데 사용 |
<c:when> | <c:choose>의 서브 태그로 조건문이 참일 때 수행 |
<c:otherwise> | <c:choose>의 서브 태그로 조건문이 거짓일 때 수행 |
<c:forEach> | 반복문을 처리하는데 사용 |
<c:forTokens> | 구분자로 분리된 각각의 토큰을 처리하는데 사용 |
<c:import> | URL을 사용하여 다른 리소스의 결과를 삽입하는데 사용 |
<c:param> | URL관련 태그의 파라미터를 설정하는데 사용(값 전달) |
<c:redirect> | 설정한 경로로 이동하는데 사용 |
<c:url> | URL을 재작성하는데 사용 |
좌측 Download안의 Taglibs 클릭
taglib Directive를 이용하여 JSTL의 Core 태그 라이브러리를 JSP 문서에 포함해야만 커스텀 태그를 제공받아 사용 가능
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Core tag lib의 EL 지원 태그
set 태그 : 객체를 스코프(Scope) 속성값으로 저장(변경)하기 위한 태그
scope 속성 : page, request, session, application 중 하나를 속성값으로 설정
var 속성 : 스코프 속성명을 속성값으로 설정
value 속성 : 스코프 속성값을 속성값으로 설정
set 태그를 이용하여 스코프 속성값으로 제공된 객체의 필드값 변경 가능 (Setter 메소드 자동 호출)
<c:set target="${student }" property="num" value="1000"/>
remove 태그 : 스코프 속성값을 속성명을 이용하여 삭제하는 태그
<c:remove var="student"/>
<%@page import="xyz.itwill.el.Student"%>
<%@page import="java.util.Date"%>
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - EL 지원 태그</h1>
<hr>
<c:set var="su" value="10" scope="page"/>
<p>su = ${su }</p>
<%-- 스코프 속성명이 같은 경우 스코프 속성값 변경 처리 --%>
<%-- value 속성 대신 태그내용으로 스코프 속성값 처리 가능 --%>
<c:set var="su">20</c:set>
<p>su = ${su }</p>
<%-- value 속성값으로 EL 사용 가능 - EL 표현식에서 EL 연산자 사용 --%>
<c:set var="tot" value="${su+10 }"/>
<p>tot = ${tot }</p>
<c:set var="name" value="홍길동"/>
<p>name = ${name }</p>
<c:set var="now" value="<%=new Date() %>"/>
<%-- EL 표현식에 의해 제공받은 스코프 속성값이 Java 객체인 경우 자동으로 toString() 메소드 호출 --%>
<p>now = ${now }</p>
<p>now.getTime() = ${now.getTime() }</p>
<p>now.time = ${now.time }</p>
<c:set var="student" value="<%=new Student() %>"/>
<%-- Student 클래스에 toString() 메소드가 오버라이드 선언되지 않아 Object 클래스의 toString() 메소드 호출 --%>
<p>student = ${student }</p>
<p>학번 = ${student.num }, 이름 = ${student.name }</p>
<%-- set 태그를 이용하여 스코프 속성값으로 제공된 객체의 필드값 변경 가능 - Setter 메소드 자동 호출 --%>
<%-- target 속성 : 필드값을 변경할 객체(스코프 속성값 - EL)를 속성값으로 설정 --%>
<%-- property 속성 : 필드값을 변경할 객체의 필드명을 속성값으로 설정 --%>
<c:set target="${student }" property="num" value="1000"/>
<c:set target="${student }" property="name" value="홍길동"/>
<p>학번 = ${student.num }, 이름 = ${student.name }</p>
<%-- remove 태그 : 스코프 속성값을 속성명을 이용하여 삭제하는 태그 --%>
<c:remove var="student"/>
<p>student = ${student }</p>
</body>
</html>
out 태그 : 값(EL - 스코프 속성값)을 클라이언트에게 전달하기 위한 출력 태그
스코프 속성값으로 HTML 태그가 포함된 문자열(String 객체) 저장
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - EL 지원 태그</h1>
<hr>
<c:set var="num" value="100"/>
<p>정수값 = ${num }</p>
<%-- out 태그 : 값(EL - 스코프 속성값)을 클라이언트에게 전달하기 위한 출력 태그 --%>
<p>정수값 = <c:out value="${num }"/></p>
<hr>
<%-- 스코프 속성값으로 HTML 태그가 포함된 문자열(String 객체) 저장 --%>
<c:set var="html" value="<font size='7' color='red'>안녕하세요.</font>"/>
<%-- EL을 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우 HTML 태그로
처리되어 출력 --%>
<p>html = ${html }</p>
<%-- out 태그를 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우
HTML 태그도 문자열로 처리되어 출력 --%>
<p>html = <c:out value="${html }"/></p>
</body>
</html>
if 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하는 태그
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<c:if test="true">
<p>test 속성값이 [true]인 경우 태그 내용 출력-1</p>
</c:if>
<c:if test="false">
<p>test 속성값이 [true]인 경우 태그 내용 출력-2</p>
</c:if>
<c:set var="sw" value="true"/>
<%-- test 속성값으로 EL로 제공받은 스코프 속성값 사용 가능 --%>
<c:if test="${sw }">
<p>test 속성값이 [true]인 경우 태그 내용 출력-3</p>
</c:if>
<hr>
<c:set var="num" value="10"/>
<%-- test 속성값으로 EL 사용시 EL 표현식에서 EL 연산자를 사용하여 false 또는 true 중
하나를 제공받아 사용 가능 --%>
<c:if test="${num%2!=0 }">${num } = 홀수</c:if>
<c:if test="${num%2==0 }">${num } = 짝수</c:if>
<hr>
<c:set var="num" value="11"/>
<c:if test="${num mod 2 ne 0 }">${num } = 홀수</c:if>
<c:if test="${num mod 2 eq 0 }">${num } = 짝수</c:if>
<hr>
<c:set var="score" value="80"/>
<c:if test="${score <= 100 && score >= 0 }">${score }점은 정상적인 점수입니다.</c:if>
<c:if test="${score > 100 || score < 0 }">${score }점은 비정상적인 점수입니다.</c:if>
<hr>
<c:set var="score" value="800"/>
<c:if test="${score le 100 and score ge 0 }">${score }점은 정상적인 점수입니다.</c:if>
<c:if test="${score gt 100 or score lt 0 }">${score }점은 비정상적인 점수입니다.</c:if>
<hr>
<c:set var="name" value="홍길동"/>
<c:if test="${empty(name) }">
<p>name 속성명으로 저장된 속성값은 없습니다.</p>
</c:if>
<c:if test="${!empty(name) }">
<p>name 속성명으로 저장된 속성값은 [${name }]입니다.</p>
</c:if>
</body>
</html>
choose 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하기 위한 상위태그
하위태그를 이용하여 태그내용의 포함 여부 선택
when 태그 : 조건에 대한 결과에 태그내용의 포함 여부를 선택하기 위한 태그
otherwise 태그 : when 태그의 모든 조건이 거짓(false)인 경우 태그내용을 무조건 포함하기 위한 태그
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<c:set var="choice" value="4"/>
<c:choose>
<c:when test="${choice == 1 }">
<p>수성으로 이동합니다.</p>
</c:when>
<c:when test="${choice == 2 }">
<p>금성으로 이동합니다.</p>
</c:when>
<c:when test="${choice == 3 }">
<p>화성으로 이동합니다.</p>
</c:when>
<%-- otherwise 태그 : when 태그의 모든 조건이 거짓(false)인 경우 태그내용을 무조건 포함하기 위한 태그 --%>
<c:otherwise>
<p>지구로 이동합니다.</p>
</c:otherwise>
</c:choose>
<hr>
<c:set var="num" value="10"/>
<c:choose>
<c:when test="${num % 2 != 0 }">${num } = 홀수</c:when>
<c:otherwise>${num } = 짝수</c:otherwise>
</c:choose>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<form action="core_choose_action.jsp" method="post">
점수입력 : <input type="text" name="score">
<button type="submit">전송</button>
</form>
</body>
</html>
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<c:choose>
<c:when test="${!empty(param.score) }">
<p>입력점수 = ${param.score }점</p>
<c:choose>
<c:when test="${param.score<=100 && param.score>=90 }">
<c:set var="grade" value="A"/>
</c:when>
<c:when test="${param.score<=89 && param.score>=80 }">
<c:set var="grade" value="B"/>
</c:when>
<c:when test="${param.score<=79 && param.score>=70 }">
<c:set var="grade" value="C"/>
</c:when>
<c:when test="${param.score<=69 && param.score>=60 }">
<c:set var="grade" value="D"/>
</c:when>
<c:otherwise>
<c:set var="grade" value="F"/>
</c:otherwise>
</c:choose>
<p>${param.score }점은 ${grade }학점입니다.</p>
</c:when>
<c:otherwise>
<p style="color: red;">입력페이지에서 점수를 반드시 입력해 주세요.</p>
<a href="core_choose_form.jsp">입력페이지 이동</a>
</c:otherwise>
</c:choose>
</body>
</html>
forEach 태그 : 태그내용을 반복적으로 포함하기 위한 태그
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<c:forEach var="i" begin="1" end="5" step="1">
<p>${i }번째 출력되는 내용입니다.</p>
</c:forEach>
<hr>
<%-- 1~100 범위의 정수들의 합계를 계산하여 출력 --%>
<c:forEach var="i" begin="1" end="100" step="1">
<c:set var="tot" value="${tot+i }"/>
</c:forEach>
<p>1~100 범위의 정수들의 합계 = ${tot }</p>
<hr>
<%-- 구구단을 표(Table) 형식으로 출력 --%>
<table>
<c:forEach var="i" begin="1" end="9" step="1">
<tr>
<c:forEach var="j" begin="2" end="9" step="1">
<td width="100">${j} * ${i} = ${i*j }</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
forEach 태그를 사용하여 스코프 속성값으로 제공된 배열 또는 콜렉션 객체의 요소를 하나씩 얻어와 반복 처리하는 기능 제공
<%@page import="java.util.ArrayList"%>
<%@page import="xyz.itwill.el.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String[] nameArray={"홍길동","임꺽정","전우치","일지매","장길산"};
request.setAttribute("nameArray", nameArray);
List<Student> studentList=new ArrayList<Student>();
studentList.add(new Student(1000,"홍길동"));
studentList.add(new Student(2000,"임꺽정"));
studentList.add(new Student(3000,"전우치"));
studentList.add(new Student(4000,"일지매"));
studentList.add(new Student(5000,"장길산"));
request.setAttribute("studentList", studentList);
request.getRequestDispatcher("core_forEach_two.jsp").forward(request, response);
%>
forEach 태그를 사용하여 스코프 속성값으로 제공된 배열 또는 콜렉션 객체의 요소를 하나씩 얻어와 반복 처리하는 기능 제공
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<ul>
<li>${nameArray[0] }</li>
<li>${nameArray[1] }</li>
<li>${nameArray[2] }</li>
<li>${nameArray[3] }</li>
<li>${nameArray[4] }</li>
</ul>
<hr>
<ul>
<c:forEach var="i" begin="0" end="4" step="1">
<li>${nameArray[i] }</li>
</c:forEach>
</ul>
<hr>
<ul>
<c:forEach var="name" items="${nameArray }">
<li>${name }</li>
</c:forEach>
</ul>
<hr>
<c:forEach var="student" items="${studentList }">
<div>학번 = ${student.num }, 이름 = ${student.name }</div>
</c:forEach>
</body>
</html>
forTokens 태그 : 스코프 속성값으로 저장된 문자열(String 객체)을 특정 문자열로 분리하여 반복 처리하는 태그 (구분자로 분리된 각각의 토큰 처리)
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - 흐름 제어 태그</h1>
<hr>
<c:set var="phone" value="010-1234-5678"/>
<p>전화번호 = ${phone }</p>
<hr>
<c:forTokens items="${phone }" delims="-" var="num">
<div>${num }</div>
</c:forTokens>
</body>
</html>
import 태그 : 다른 웹프로그램을 요청하여 결과를 응답받아 포함하는 태그
JSP의 include 태그는 현재 서버의 웹프로그램만 요청하여 실행 결과를 응답받아 포함하지만 import 태그는 다른 서버의 웹프로그램을 요청하여 실행 결과를 응답받아 포함 가능
URL 관리 태그에서는 param 태그를 하위태그로 사용하여 값 전달 가능
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - URL 관리 태그</h1>
<hr>
<p>core_import_source.jsp 문서의 응답 결과입니다.</p>
<%-- <c:import url="core_import_target.jsp"/> --%>
<%-- JSP의 include 태그는 현재 서버의 웹프로그램만 요청하여 실행 결과를 응답받아 포함하지만
import 태그는 다른 서버의 웹프로그램을 요청하여 실행 결과를 응답받아 포함 가능 --%>
<%-- => HTML의 iframe 태그와 유사한 기능을 제공 --%>
<%-- <c:import url="https://www.naver.com"/> --%>
<%-- URL 관리 태그에서는 param 태그를 하위태그로 사용하여 값 전달 가능 --%>
<c:import url="core_import_target.jsp">
<%-- param 태그 : 요청 웹프로그램에게 값을 전달하기 위한 태그 --%>
<%-- => URL 관리 태그의 종속 태그 --%>
<%-- => URL 관리 태그에 param 태그를 제외한 코드가 존재할 경우 에러 발생 - JSP 주석 예외 --%>
<c:param name="name" value="홍길동"/>
</c:import>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Core - URL 관리 태그</h1>
<hr>
<p>core_import_target.jsp 문서의 응답 결과입니다.</p>
<p>${param.name }님, 안녕하세요.</p>
</body>
</html>
redirect 태그 : 클라이언트에게 URL 주소를 전달하여 재요청하도록 응답 처리하는 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Core - URL 관리 태그</h1>
<hr>
<form action="core_redirect_action.jsp" method="post">
이름 : <input type="text" name="name">
<button type="submit">전송</button>
</form>
</body>
</html>
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - URL 관리 태그</h1>
<hr>
<c:choose>
<c:when test="${!empty(param.name) }">
<p>${param.name }님, 안녕하세요.</p>
</c:when>
<c:otherwise>
<%-- redirect 태그 : 클라이언트에게 URL 주소를 전달하여 재요청하도록 응답 처리하는 태그 --%>
<%-- url 속성 : 클라이언트에게 전달하여 재요청하기 위한 URL 주소를 속성값으로 설정 --%>
<c:redirect url="core_redirect_form.jsp"/>
</c:otherwise>
</c:choose>
</body>
</html>
웹자원을 상대경로로 표현하여 제공
<img src="images/Koala.jpg" width="200">
절대경로 : 최상위 디렉토리를 기준으로 웹자원의 경로를 표현하는 방법
<img src="/mvc/jstl/images/Koala.jpg" width="200">
request.getContextPath() 메소드를 호출하여 컨텍스트 경로를 반환받아 절대경로로 표현
<img src="<%=request.getContextPath() %>/jstl/images/Koala.jpg" width="200">
EL 표현식에서 pageContext 내장객체를 사용하여 컨텍스트 경로를 제공받아 절대경로로 표현
<img src="${pageContext.request.contextPath }/jstl/images/Koala.jpg" width="200">
url 태그 : 컨텍스트 경로가 포함된 웹자원의 절대경로를 제공하는 태그
<img src="<c:url value="/jstl/images/Koala.jpg"/>" width="200">
<%@ 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>MVC</title>
</head>
<body>
<h1>Core - URL 관리 태그</h1>
<hr>
<%-- 상대경로 : 현재 요청 웹프로그램의 경로를 기준으로 웹자원의 경로를 표현하는 방법 --%>
<img src="images/Koala.jpg" width="200">
<%-- 절대경로 : 최상위 디렉토리를 기준으로 웹자원의 경로를 표현하는 방법 --%>
<img src="/mvc/jstl/images/Koala.jpg" width="200">
<%-- request.getContextPath() 메소드를 호출하여 컨텍스트 경로를 반환받아 절대경로로 표현 --%>
<img src="<%=request.getContextPath() %>/jstl/images/Koala.jpg" width="200">
<%-- EL 표현식에서 pageContext 내장객체를 사용하여 컨텍스트 경로를 제공받아 절대경로로 표현 --%>
<img src="${pageContext.request.contextPath }/jstl/images/Koala.jpg" width="200">
<%-- url 태그 : 컨텍스트 경로가 포함된 웹자원의 절대경로를 제공하는 태그 --%>
<%-- value 속성 : 컨텍스트 경로를 제외한 웹자원의 절대경로를 속성값으로 설정 --%>
<img src="<c:url value="/jstl/images/Koala.jpg"/>" width="200">
</body>
</html>
taglib Directive를 이용하여 JSTL의 Formatter 태그 라이브러리를 JSP 문서에 포함해야만 커스텀 태그를 제공받아 사용 가능
formatDate 태그 : Date 객체에 저장된 날짜와 시간을 원하는 형식의 문자열로 변환하여 제공하는 태그
속성값이 [date]인 경우 기본적으로 [yyyy.M.d.] 형식의 문자열로 변환되어 제공
속성값이 [time]인 경우 기본적으로 [a h:mm:ss] 형식의 문자열로 변환되어 제공
<fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
timeZone 태그 : 타임존(TimeZone)을 변경하는 태그
<fmt:timeZone value="Asia/Hong_Kong"/>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- taglib Directive를 이용하여 JSTL의 Formatter 태그 라이브러리를 JSP 문서에 포함해야만
커스텀 태그를 제공받아 사용 가능 - prefix 속성값은 [fmt]로 설정 --%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Formatter - 날짜와 시간 변환 태그</h1>
<hr>
<%-- 서버 시스템의 현재 날짜와 시간이 저장된 Date 객체를 생성하여 스코프 속성값으로 저장 --%>
<c:set var="now" value="<%=new Date() %>"/>
<%-- Date 객체의 toString() 메소드를 호출하여 Date 객체에 저장된 날짜와 시간을 문자열로 제공받아 출력 --%>
<p>now = ${now }</p>
<%-- formatDate 태그 : Date 객체에 저장된 날짜와 시간을 원하는 형식의 문자열로 변환하여 제공하는 태그 --%>
<%-- => SimpleDateFormat 클래스 참조 --%>
<%-- value 속성 : Date 객체를 속성값으로 설정 - EL 사용 가능 --%>
<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
<%-- => 속성값이 [date]인 경우 기본적으로 [yyyy.M.d.] 형식의 문자열로 변환되어 제공 --%>
<p>now(날짜) = <fmt:formatDate value="${now }" type="date"/>
<%-- dateStyle 속성 : full 또는 short 중 하나를 속성값으로 설정 --%>
<%-- => dateStyle 속성값이 [full]인 경우 [yyyy년 M월 d일 E요일] 형식의 문자열로 변환되어 제공 --%>
<%-- => dateStyle 속성값이 [short]인 경우 [yy.M.d.] 형식의 문자열로 변환되어 제공 --%>
<p>now(날짜) = <fmt:formatDate value="${now }" type="date" dateStyle="full"/>
<p>now(날짜) = <fmt:formatDate value="${now }" type="date" dateStyle="short"/>
<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
<%-- => 속성값이 [time]인 경우 기본적으로 [a h:mm:ss] 형식의 문자열로 변환되어 제공 --%>
<p>now(시간) = <fmt:formatDate value="${now }" type="time"/>
<%-- timeStyle 속성 : full 또는 short 중 하나를 속성값으로 설정 --%>
<%-- => timeStyle 속성값이 [full]인 경우 [a h시 mm분 ss초 z] 형식의 문자열로 변환되어 제공 --%>
<%-- => timeStyle 속성값이 [short]인 경우 [a h:mm] 형식의 문자열로 변환되어 제공 --%>
<p>now(시간) = <fmt:formatDate value="${now }" type="time" timeStyle="full"/>
<p>now(시간) = <fmt:formatDate value="${now }" type="time" timeStyle="short"/>
<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
<%-- => 속성값이 [both]인 경우 기본적으로 [yyyy.M.d. a h:mm:ss] 형식의 문자열로 변환되어 제공 --%>
<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both"/>
<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/>
<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both" dateStyle="short" timeStyle="short"/>
<%-- pattern 속성 : 날짜와 시간을 변환하기 위한 패턴문자이 포함된 문자열을 속성값으로 설정 --%>
<p>now(패턴) = <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
<%-- timeZone 태그 : 타임존(TimeZone)을 변경하는 태그 --%>
<%-- value 속성 : 변경할 타임존(대륙/도시)을 속성값으로 설정 --%>
<fmt:timeZone value="Asia/Hong_Kong">
<p>홍콩의 현재 날짜와 시간 = <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
</fmt:timeZone>
</body>
</html>
formatNumber 태그 : 숫자값을 원하는 형식의 문자열로 변환하여 제공하는 태그
type 속성값이 [number]인 경우 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공
<p>가격 = <fmt:formatNumber value="${price }" type="number"/>원</p>
type 속성값이 [currency]인 경우 앞부분에 화폐단위가 포함되고 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공
<p>가격 = <fmt:formatNumber value="${price }" type="currency"/></p>
pattern 속성 : 숫자값을 변환하기 위한 패턴문자가 포함된 문자열을 속성값으로 설정
<p>가격 = <fmt:formatNumber value="${price }" pattern="$##,###,###,##0.00"/></p>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Formatter - 숫자 변환 태그</h1>
<hr>
<c:set var="price" value="1000000000"/>
<p>가격 = ${price }원</p>
<%-- formatNumber 태그 : 숫자값을 원하는 형식의 문자열로 변환하여 제공하는 태그 --%>
<%-- value 속성 : 변환할 숫자값을 속성값으로 설정 - EL 사용 가능 --%>
<%-- => 속성값으로 숫자가 아닌 문자가 포함된 경우 NumberFormatException 발생 --%>
<%-- type 속성 : number(숫자) 또는 currency(화폐) 중 하나를 속성값으로 설정 --%>
<%-- => type 속성을 생략한 경우 [number] 속성값을 기본값으로 사용하여 처리 --%>
<%-- => type 속성값이 [number]인 경우 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공 --%>
<%-- => type 속성값이 [currency]인 경우 앞부분에 화폐단위가 포함되고 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공 --%>
<p>가격 = <fmt:formatNumber value="${price }" type="number"/>원</p>
<p>가격 = <fmt:formatNumber value="${price }" type="currency"/></p>
<%-- pattern 속성 : 숫자값을 변환하기 위한 패턴문자가 포함된 문자열을 속성값으로 설정 --%>
<p>가격 = <fmt:formatNumber value="${price }" pattern="$##,###,###,##0.00"/></p>
</body>
</html>
taglib Directive를 이용하여 JSTL의 Functions 태그 라이브러리를 JSP 문서에 포함해야만 EL 함수를 제공받아 사용 가능
split 함수 : 문자열을 구분자로 분리하여 배열로 반환하는 함수
${fn:split(phone,'-') }
substring 함수 : 문자열을 시작첨자(포함)와 종료첨자(미포함)를 사용해 분리하여 반환하는 함수
${fn:substring(phone,0,3) }
replace 함수 : 문자열에서 원하는 문자열을 검색하여 치환 문자열로 변환하여 반환하는 함수
${fn:replace(content,'\\n','<br>') }
escapeXml 함수 : 속성값으로 제공된 문자열에 태그 관련 문자가 있는 경우 회피문자로 변환하여 반환하는 함수
${fn:escapeXml(html) }
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- taglib Directive를 이용하여 JSTL의 Functions 태그 라이브러리를 JSP 문서에 포함해야만
EL 함수를 제공받아 사용 가능 - prefix 속성값은 [fn]로 설정 --%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>Functions - EL 함수</h1>
<hr>
<c:set var="phone" value="010-1234-5678"/>
<p>전화번호 = ${phone }</p>
<hr>
<%-- split 함수 : 문자열을 구분자로 분리하여 배열로 반환하는 함수 --%>
<c:set var="array" value="${fn:split(phone,'-') }"/>
<c:forEach var="num" items="${array }">
<div>${num }</div>
</c:forEach>
<hr>
<%-- substring 함수 : 문자열을 시작첨자(포함)와 종료첨자(미포함)를 사용해 분리하여 반환하는 함수 --%>
<div>${fn:substring(phone,0,3) }</div>
<div>${fn:substring(phone,4,8) }</div>
<div>${fn:substring(phone,9,13) }</div>
<hr>
<c:set var="content" value="안녕하세요.\n반갑습니다."/>
<div>${content }</div>
<%-- replace 함수 : 문자열에서 원하는 문자열을 검색하여 치환 문자열로 변환하여 반환하는 함수 --%>
<div>${fn:replace(content,'\\n','<br>') }</div>
<hr>
<c:set var="html" value="<font size='7' color='red'>안녕하세요.</font>"/>
<%-- HTML 태그가 포함된 문자열이 저장된 속성값을 EL로 제공받아 출력할 경우 HTML 태그가
적용된 문자열로 출력 --%>
<div>${html }</div>
<%-- HTML 태그가 포함된 문자열이 저장된 속성값을 out 태그로 제공받아 출력할 경우
HTML 태그도 문자열로 적용되어 출력 --%>
<div><c:out value="${html }"/></div>
<%-- escapeXml 함수 : 속성값으로 제공된 문자열에 태그 관련 문자가 있는 경우 회피문자로
변환하여 반환하는 함수 --%>
<%-- HTML 태그가 포함된 문자열이 저장된 속성값을escapeXml 함수로 제공받아 출력할 경우
HTML 태그도 문자열로 적용되어 출력 --%>
<div>${fn:escapeXml(html) }</div>
</body>
</html>