<c:forTokens> 커스텀 액션의 사용 방법
- 자바의 for문과 java.util.StringTokenizer 클래스의 기능을 합친 것 같은 기능을 제공한다.
- 이 액션에는 items, delims, var라는 3개의 어트리뷰트를 사용해야 한다.
- items에는 토큰을 포함하는 문자열을, delims 에는 토큰 분리에 사용할 구획 문자를 , var에는 분리된 토큰을 대입한 변수의 이름을 써야 한다.
<c:forTokens var = "pet"items = "햄스터 이구아나 소라게" delims = "">
${pet} <br>
</c:forTokens>
- 토큰의 구획 문자 delims에 한 종류 이상의 문자를 지정할 수 있다.
EX) delims = "*/-"
forTokens 사용 예시
<%@ 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>동물의 왕국</title>
</head>
<body>
사자의 생일잔치에 누가 왔을까요?<br><br>
<c:set var="guests" value="토끼^^거북이~사슴" />
${guests }<br><br>
<c:forTokens var="animal" items="${guests}" delims="^~">
${animal}<br>
</c:forTokens>
</body>
</html>
<c:catch> 커스텀 액션의 사용 방법
- 자바의 try 문과 비슷한 기능을 한다.
- <c:catch> 커스텀 액션의 시작 태그와 끝 태그 사이에서 에러가 발생하면 실행의 흐름이 곧바로 <c:catch> 액션 다음에 있는 코드로 넘어간다.
- <c:catch> 커스텀 액션은 자바의 try 블록에 해당하는 일만 하기 때문에 catch 블록에 해당하는 일은 별도로 코딩해야 한다.
<c:catch var = "e"> //e = exception 객체를 저장할 변수
<% int result = num1/ num2 %>
나눗셈의 결과는? <%= result %>
</c:catch>
- var에서 지정한 변수는 catch 액션의 범위 밖에서도 EL 식을 통해 사용 가능하다.
- 이를 사용해 에러 처리를 하면 된다.
<c:if test = "${e != null}">
에러 메시지 : ${e.message}
</c:if>
에러 발생 예시 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String str1 = request.getParameter("NUM1");
String str2 = request.getParameter("NUM2");
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>나눗셈 프로그램</title>
</head>
<body>
<c:catch var="e">
<% int result = num1 / num2; %>
나눗셈의 결과는?<%= result %>
</c:catch>
<c:if test="${e != null}">
에러 메시지:${e.message}
</c:if>
</body>
<c:redirec> 커스텀 액션의 사용 방법
- sendRedirect 메서드를 통해 달느 웹 자원을 호출하는 일을 한다
- 호출할 웹 자원의 URL은 url 어트리뷰트를 이용해서 지정하면 된다.
<c:redirect url = "http://www.hanb.co.kr">
<c:import>
- jsp:include 표준 액션과 유사하지만 다른 JSP 페이지 뿐만 아니라 다른 종류의 웹 자원도 호출할 수 있다는 점이 다르다
- 호출할 웹 자원의 URL은 url 어트리뷰트를 이용해서 지정하면 된다.
<c:import url = "http://www.hanb.co.kr/binfo/BrainSeries.jsp" />
- 호출할 웹 자원에 데이터를 넘겨주려면 <c:import> 커스텀 액션의 시작 태그와 끝 태그 사이에 <c:param> 커스텀 액션을 쓰면 된다.
<c:import url = "http://www.hanb.co.kr/binfo/BrainSeries.jsp" />
<c:param name = "product" value = "TV" />
<c:param name = "ad_index" value = "007" />
</c:import>
<c:url>
- c:set 커스텀 액션과 마찬가지로 변수의 선언에 사용되지만, URL을 쉽게 다룰 수 있는 방법을 제공한다는 점이 다르다.
- var 어트리뷰트에 변수 이름을 지정하고, value 어트리뷰트에 변수의 초기값을 지정하면 된다.
- <c:url>의 시작 태그와 끝 태그 사이에 <c:param> 커스텀 액션을 쓰면, URL 뒤에 쿼리 스트링 형태로 덧붙는 데이터를 지정할 수 있다.
<c:url var = "myUrl" value = "http://localhost:9090/bran09/Add.jsp">
<c:param name = "NUM1" value = "999" />
<c:param name = "NUM2" value = "1" />
</c:url>
사용 예시
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url var="next" value="Divide.jsp">
<c:param name="NUM1" value="100" />
<c:param name="NUM2" value="25" />
</c:url>
<c:redirect url="${next}" />
- next에 저장된 값을 value에 저장된 주소로 redirect 해줌을 볼 수 있다.
<c:out>
- 데이터를 출력할 때 사용하는 커스텀 액션이다.
- 웹 브라우저에 의해 특수한 문자로 해석되는 < , > , & , ‘ , “를 포함하는 데이터를 출력할 때 편리하다.
- 출력할 데이터는 value 어트리뷰트에 지정하면 된다.
<%@ 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>문법 설명</title>
</head>
<body>
<h3>FONT 태그에 대하여</h3>
<c:out value="<FONT size=7>커다란 글씨</FONT>는 다음과 같은 출력을 합니다." /><br><br>
<c:out value="<FONT size=7>커다란 글씨</FONT>" escapeXml="false" />
</body>
</html>
- default 어트리뷰트를 이용하면 출력할 데이터의 디폴트 값을 지정할 수 있다.
- 이 방법은 EL 식의 결과를 출력할 때 유용하다.
<%@ 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>간단한 인사</title>
</head>
<body>
안녕하세요, <c:out value="${param.ID}" default="guest" />님
</body>
</html>
날짜와 시각을 포맷하는 fmt:formatDate 커스텀 액션
- 날짜와 시각을 포맷하는 커스텀 액션이다.
- 이 액션에는 출력할 날짜와 시각을 java.util.Date 타입의 객체로 넘겨줘야 하므로 먼저 이 클래스의 객체를 만들어야 한다.
- value 어트리뷰트에 Date 객체를 지정하면 그 객체가 포함하고 있는 날짜가 YYYY.MM.DD 포맷으로 출력된다.
- type 어트리뷰트를 “time” 으로 지정하면 시간을 출력하는 용도로 사용 가능하다.
- value 어트리뷰트에 date 객체, type 어트리뷰트에 “both”를 넘겨주면 날짜와 시간을 둘 다 출력해 준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%= new Date() %>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>현재의 시각</title>
</head>
<body>
[오늘의 날짜] <fmt:formatDate value="${date}" /><br>
[현재의 시각] <fmt:formatDate value="${date}" type="time" />
</body>
</html>
- dateStyle 어트리뷰트에 넣는 값에 따라 날짜를 다른 포맷으로 출력 가능하다.
- full , long , medium, short 중 하나 입력 가능.
- timeStyle 어트리뷰트에 넣는 값에 따라 시각도 다른 포맷으로 출력 가능하다.
-
- full, long, medium, short 중 하나 입력 가능.
-
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%= new Date() %>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>현재의 시각</title>
</head>
<body>
[S] <fmt:formatDate value="${date}" type="both" dateStyle="short" timeStyle="short" /><br>
[M] <fmt:formatDate value="${date}" type="both" dateStyle="medium" timeStyle="short" /><br>
[L] <fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="short" /><br>
[F] <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="short" /><br>
</body>
</html>
- pattern 어트리뷰트로 포맷 지정이 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%= new Date() %>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>현재의 시각</title>
</head>
<body>
[오늘의 날짜] <fmt:formatDate value="${date}" type="date" pattern="yyyy/MM/dd (E)" /><br>
[현재의 시각] <fmt:formatDate value="${date}" type="time" pattern="(a) hh:mm:ss" />
</body>
</html>
수치를 포맷하는 fmt:formatNumber 커스텀 액션
- 출력할 수치 값은 value 어트리뷰트에 지정
- 세 자리마다 쉼표를 찍은 포맷으로 출력하려면 groupingUsed 어트리뷰트를 true로 지정하면 된다.
- pattern 어트리뷰트를 사용하여 소수점 아래의 숫자를 원하는 만큼 끊거나 눌러서 표시할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>숫자 포맷</title>
</head>
<body>
첫번째 수 : <fmt:formatNumber value = "1234500" groupingUsed = "true" /> <br>
두번째 수 : <fmt:formatNumber value = "3.141592" pattern = "#.##" /><br>
세번째 수 : <fmt:formatNumber value = "10.5" pattern = "#.00" /><br>
</body>
</html>
- type 어트리뷰트에 percent라는 값을 지정하면 주어진 수치를 퍼센트 단위로 표시할 수 있다.
- type 어트리뷰트에 currency라는 값을 지정해 주면 주어진 수치가 금액에 적합한 포맷으로 만들어져서 출력된다.
- 화폐 단위를 표시하기 위해서는 currencySymbol이라는 어트리뷰트를 이용하면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>숫자 포맷</title>
</head>
<body>
금액: <fmt:formatNumber value="1000000" type="currency" currencySymbol="₩" /><br>
퍼센트: <fmt:formatNumber value="0.99" type="percent" />
</body>
</html>
지역을 설정하는 fmt:setLocale 커스텀 액션
- 출력할 데이터의 포맷을 특정 지역에 맞게 설정하고자 할 때 사용하는 액션이다.
- 특정 지역을 설정하기 위해서는 value 어트리뷰트에 언어 코드 또는 국가코드_언어코드를 지정하면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%= new Date() %>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>나라마다 다른 포맷</title>
</head>
<body>
<h3>우리나라의 포맷</h3>
<fmt:setLocale value="ko_kr" />
금액: <fmt:formatNumber value="10000000" type="currency" /><br>
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
<h3>미국의 포맷</h3>
<fmt:setLocale value="en_us" />
금액: <fmt:formatNumber value="10000000" type="currency" /><br>
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
<h3>일본의 포맷</h3>
<fmt:setLocale value="ja_jp" />
금액: <fmt:formatNumber value="10000000" type="currency" /><br>
일시: <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full" /><br>
</body>
</html>
시간대를 설정하는 fmt:timeZone 과 fmt:setTimeZone 커스텀 액션
- 시간대마다 다른 날짜와 시각을 자동으로 계산해서 표시하기 위해 필요한 커스텀 액션이다.
- 커스텀 액션의 시작 태그에 value 어트리뷰트를 쓰고 거기에 특정 시간대에 해당하는 지역 이름을 지정하면, 이 액션의 시작 태그와 끝 태그 사이에서 출력되는 날짜와 시각은 그 시간대에 맞게 표시된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="date" value="<%= new Date() %>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세계시 프로그램</title>
</head>
<body>
서울: <fmt:formatDate value="${date}" type="both" /><br>
<fmt:timeZone value="Asia/Hong_Kong">
홍콩: <fmt:formatDate value="${date}" type="both" /><br>
</fmt:timeZone>
<fmt:timeZone value="Europe/London">
런던: <fmt:formatDate value="${date}" type="both" /><br>
</fmt:timeZone>
<fmt:timeZone value="America/New_York">
뉴욕: <fmt:formatDate value="${date}" type="both" /><br>
</fmt:timeZone>
</body>
</html>
- timeZone과 setTimeZone 커스텀 액션은 시작 태그와 끝 태그 사이에만 영향을 미치는 것이 아니라, 이 액션 다음의 모든 코드에 영향을 미친다.
'Back > JSTL' 카테고리의 다른 글
JSTL 문법 - 1 (2) | 2023.04.14 |
---|