JSTL (JSP Standard Tag Library)

JSP Standard Tag Library - 널리 사용되는 커스텀 태그를 표준으로 만든 태그 라이브러리


JSTL 태그 종류

코어(c) : 변수지원, 흐름제어, URL처리 (http://java.sun.com/jsp/jstl/core)

XML(x) : XML 코어, 흐름제어, XML 변환 (http://java.sun.com/jsp/jstl/xml)

국제화(fmt) : 지역, 메시지 형식, 숫자 및 날씨 형식 (http://java.sun.com/jsp/jstl/fmt)

데이터베이스(sql) : SQL (http://java.sun.com/jsp/jstl/sql)

함수(fn) : 콜렉션 처리, String 처리 (http://java.sun.com/jsp/jstl/functions)



JSTL 1.2 관련 jar 파일 필요


1) 아래 사이트에서 jstl-1.2.jar 파일 다운로드

https://search.maven.org/#browse%7C-658715035


2) jstl-1.2.jar 파일을 WEB-INF/lib에 복사




1. 코어 태그 라이브러리 종류


1) 변수지원

set : JSP에서 사용될 변수를 설정한다.

remove : 설정한 변수를 제거한다.


2) 흐름제어

if : 조건에 따라 내부 코드를 수행한다.

choose : 다중 조건을 처리할 때 사용된다.

forEach : 콜렉션이나 Map의 각 항목을 처리할 때 사용된다.

forTokens : 구분자로 분리된 각각의 토큰을 처리할 때 사용된다.


3) URL 처리

import : URL을 사용하여 다른 자원의 결과를 삽입한다.

redirect : 지정한 경로로 리다이렉트 한다.

url : URL을 재작성 한다.


4) 기타 태그

catch : 예외 처리에 사용된다.

out : JspWriter에 내용을 알맞게 처리한 후 출력한다.




2. 변수 지원 태그 (set, remove)


변수 설정 : EL 변수 값 설정 (생성 또는 변경)

<c:set var="변수명" value="값" [scope="영역"] />

<c:set var="변수명"  [scope="영역"]>값</c:set> 


특정 EL 변수의 프로퍼티 값 설정

<c:set target="대상" property="프로퍼티이름" value="값" />

<c:set target="대상" property="프로퍼티이름">값</c:set>


변수 삭제

<c:remove var="varName" [scope="영역"] />

scope 미지정시 모든 영역의 변수 삭제




예제) JSTL 코어 태그 (c:set )테스트

1) 자바빈 생성 Member.java

package com.model;

public class Member {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}


2) 자바빈을 코어태그로 불러오는 jsp 파일 use_c_set.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import = "com.model.Member" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

Member member = new Member();

// member.setName("홍길동");

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>코어 태그 테스트</title>

</head>

<body>

<c:set var="member" value="<%=member %>"></c:set>

<c:set target="${member}" property="name" value="홍길동" /> // 주석처리한 부분과 동일한 부분

이름 : ${member.name}<br />

이름 : <%= member.getName() %>

</body>

</html>


이름 : 홍길동
이름 : 홍길동


코어태그 ${member.name} 로 불러온 것과 jsp 표현식<%= member.getName() %>으로 불러온 것이 동일하게 출력된다.





3. 흐름 제어 (if, choose, forEach, forTokens)


1) if - 조건이 true일 경우 몸체 내용 실행


<%@ 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>JSTL - if</title>

</head>

<body>


<c:if test="${param.name == 'hkd'}">

name 파라미터의 값 : ${param.name}

</c:if>

<br />

<c:if test="${20 < param.age}">

당신의 나이는 20세 이상입니다.

</c:if>


</body>

</html>


실행 후 브라우저 URL창에서 "http://localhost:8095/chap12/use_c_if.jsp?name=hkd&age=30" 이렇게 값을 넘겨주면

name 파라미터의 값 : hkd 
당신의 나이는 20세 이상압니다.

이런 식으로 if에 대한 결과값이 출력된다.




2) choose - when - otherwise

switch - case - default와 동일


<%@ 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>JSTL - choose</title>

</head>

<body>

<ul>

<c:choose>

<c:when test="${param.name == 'hkd'}">

<li>당신의 이름은 ${param.name}입니다.</li>

</c:when>

<c:when test="${param.name == 'lsh'}">

<li>당신의 이름은 ${param.name}입니다.</li>

</c:when>

<c:when test="${param.name == 'khd'}">

<li>당신의 이름은 ${param.name}입니다.</li>

</c:when>

<c:otherwise> <!-- 위의 것이 모두 거짓일 때 수행됨 -->

<li>당신의 이름은 ${param.name}입니다.</li>

</c:otherwise>

</c:choose>

</ul>

</body>

</html>




3) 반복 처리 forEach

집합이나 컬렉션 데이터 사용


<c:forEach var="변수" items="아이템">

  … ${변수사용} ...

</c:forEach>


특정 횟수 반복

<c:forEach var="i" begin="1" end="10" [step="값"]>

  ${i} 사용

</c:forEach>


varStatus 속성

<c:forEach var="item" items="<%= someItemList %>" varStatus="status">

${status.index + 1} 번째 항목 : ${item.name}

</c:forEach>


index - 루프 실행에서 현재 인덱스, count - 루프 실행 횟수

begin - begin 속성 값, end - end 속성 값, step - step 속성 값

first - 현재 실행이 첫 번째 실행인 경우 true

last - 현재 실행이 루프의 마지막 실행인 경우 true

current - 콜렉션 중 현재 루프에서 사용할 객체




예제) forEach를 이용하여 1부터 100까지의 합 구하기

<%@ 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>JSTL = forEach</title>

</head>

<body>

<h3>1~100까지의 합</h3>

<%--

<%

int sum = 0;

for(int i=1; i<=100; i++) {

sum += i;

}

%>

1~100까지의 합: <%= sum %>

--%>

<c:set var="sum" value="0" />

<c:forEach var="i" begin="1" end="100" step="1">

<c:set var="sum" value="${sum+i}" />

</c:forEach>


1~100까지의 합: ${sum}

</body>

</html>

1~100까지의 합

1~100까지의 합: 5050


c:forEach를 이용하여 주석처리한 부분과 동일한 결과를 낼 수 있다.



예제) 구구단 9단 출력하기

<%@ 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>JSTL = forEach</title>

</head>

<body>

<h3>구구단 9단</h3>

<ul>

<c:forEach var="i" begin="1" end="9" step="1">

<li>9 * ${i} = ${9 * i}</li>

</c:forEach>

<ul>

</body>

</html>


구구단 9단

  • 9 * 1 = 9
  • 9 * 2 = 18
  • 9 * 3 = 27
  • 9 * 4 = 36
  • 9 * 5 = 45
  • 9 * 6 = 54
  • 9 * 7 = 63
  • 9 * 8 = 72
  • 9 * 9 = 81



예제) c:forEach로 배열(Array) 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="intArray" value="<%= new int[] {5,6,7,8,9}%>" />

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>JSTL = forEach</title>

</head>

<body>

<h3>int형 배열</h3>

<ul>

<c:forEach var="i" items="${intArray}" begin="2" end="4" step="1" varStatus="status">

<li>status.index는 ${status.index}, status.count는 ${status.count}, 실제 데이터 i는 ${i}</li>

<!-- begin과 end는 index를 지정 -->

</c:forEach>

</ul>

</body>

</html>

int형 배열

  • status.index는 2, status.count는 1, 실제 데이터 i는 7
  • status.index는 3, status.count는 2, 실제 데이터 i는 8
  • status.index는 4, status.count는 3, 실제 데이터 i는 9



예제) c:forEach로 배열(HashMap) 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>

<%@ page import="java.util.HashMap" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

HashMap<String, Object> mapData = new HashMap<String, Object>();

mapData.put("name", "홍길동");

mapData.put("today", new java.util.Date());

%>

<c:set var="map" value="<%= mapData%>" />

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>JSTL = forEach</title>

</head>

<body>

<h3>Map</h3>

<c:forEach var="i" items="${map}">

${i.key} : ${i.value} <br /> 

</c:forEach>

</body>

</html>

Map

today : Wed Mar 16 12:29:21 KST 2016 
name : 홍길동 



4) 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>JSTL - forTokens</title>

</head>

<body>

구분자를 통한 데이터 가져오기: <br />

<c:forTokens items="빨강, 주황, 노랑, 초록, 파랑, 남, 보라" delims="," var="tokens">

${tokens}

</c:forTokens>

</body>

</html>


구분자를 통한 데이터 가져오기: 
빨강 주황 노랑 초록 파랑 남 보라




3. URL 관련 태그


1) import : 외부/내부 페이지를 현재 위치에 삽입

<c:import url="URL" [var="변수명"] [scope="영역"] [charEncoding="캐릭터셋"]>

    <c:param name="파라미터이름" value="값" />

    ...

</c:import>

상대 URL import 시 <jsp:include>와 동일하게 동작


2) url : 절대 URL과 상대 URL을 알맞게 생성

<c:url value="URL" [var="varName"] [scope="영역"]>

    <c:param name="이름" value="값" />

</c:url>

웹 컨텍스트 내에서 절대 경로 사용시 컨텍스트 경로 자동 추가


3) redirect : 지정한 페이지로 리다이렉트

<c:redirect url="URL" [context="콘텍스트경로"]>

    <c:param name="이름" value="값" />

</c:redirect>



예제) import

<%@ 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>JSTL</title>

</head>

<body>

<h1>선택하세요</h1>

<c:choose>

<c:when test="${param.type=='youtube'}">

<c:import url="https://www.youtube.com/results/">

<c:param name="search_query" value="건담"></c:param>

</c:import>

</c:when>

<c:when test="">

</c:when>

<c:otherwise>

<c:import url="use_c_forEach.jsp">

</c:import>

</c:otherwise>

</c:choose>

</body>

</html>

실행 후 브라우저에서 url 끝에 ?type=youtube를 입력하면 해당 사이트, 해당 검색어로 이동한다.



예제) url

<%@ 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>JSTL url</title>

</head>

<body>

<c:url value="http://search.daum.net/search">

<c:param name="w" value="blog" />

<c:param name="q" value="공원" />

</c:url>

<br />

 

<c:url value="/use_c_if.jsp" /> <br />

<c:url value="use_c_if.jsp" /> <br />

<c:url value="./use_c_if.jsp" /> <br />

</body>

</html>


http://search.daum.net/search?w=blog&q=%ea%b3%b5%ec%9b%90 
/chap12/use_c_if.jsp 
use_c_if.jsp 
./use_c_if.jsp 



예제) redirect

<%@ 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>JSTL url</title>

</head>

<body>

<c:redirect url="http://search.daum.net/search">

<c:param name="w" value="blog" />

<c:param name="q" value="공원" />

</c:redirect>

</body>

</html>

실행하면 해당 사이트가 열리며 해당 검색어로 검색이 된다.


<c:redirect url="use_c_if.jsp" />는 <% response.sendRedirect("use_c_if.jsp"); %>와 결과가 같음.

코어태그 redirect는 response 객체의 sendRedirect 메서드와 동일하다.





4. 기타 코어 태그

1) out : 데이터를 출력
<c:out value="value" [escapeXml="(true|false)"] [default="defaultValue"] />

<c:out value="value" [escapeXml="(true|false)"]>
    default value
</c:out> 

escapeXml 속성이 true일 경우 다음과 같이 특수 문자 처리
< → &lt;  ,  > → &gt;
& → &amp;  ,  ' → &#039;  ,  " → &#034;

2) catch : 몸체에서 발생한 예외를 변수에 저장
<c:catch var="exName">
...
예외가 발생할 수 있는 코드
...
</c:catch>
${exName} 사용


예제) out
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@ page import ="java.io.FileReader, java.io.IOException" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL out</title>
</head>
<body>
<%
FileReader reader = null;
String path = "";
try {
path = request.getParameter("path");
reader = new FileReader(getServletContext().getRealPath(path));
%>
소스코드 : <%= path %><br />
<pre>
<c:out value="<%=reader%>" />
</pre>
<%
} catch(IOException e) {
e.getStackTrace();
}finally {
if(reader != null) try {reader.close();}
catch(IOException e){}
}
%>
</body>
</html>

결과) 실행 후 url 뒤에 ?path= 을 붙인 뒤 같은 폴더 안의 jsp 파일명을 써주거나 다른 경로명의 다른 파일을 불러주면 코드 정보를 불러온다.
ex) http://localhost:8095/chap12/use_c_out.jsp?path=use_c_if.jsp

소스코드 : use_c_if.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>
<meta charset="UTF-8">
<title>JSTL - if</title>
</head>
<body>

<c:if test="${param.name == 'hkd'}">
	name 파라미터의 값 : ${param.name}
</c:if>
<br />
<c:if test="${20 < param.age}">
	당신의 나이는 20세 이상압니다.
</c:if>
</body>
</html>
		






5. 국제화 태그

1) 로케일 지정
setLocale : Locale을 지정한다.
requestEncoding : 요청 파라미터의 캐릭터 인코딩을 지정


2) 메시지 처리
bundle : 사용할 번들을 지정
message : 지역에 알맞은 메시지를 출력
setBundle : 리소스 번들을 읽어와 특정 변수에 저장

3) 숫자 및 날짜 포맷팅
formatNumber : 숫자를 포맷팅
formatDate : Date 객체를 포맷팅
parseDate : 문자열로 표시된 날짜를 분석해서 Date 객체로 변환
parseNumber : 문자열로 표시된 날짜를 분석해서 Date 객체로 변환
setTimeZone : 시간대 정보를 특정 변수에 저장
timeZone : 시간대를 지정


5-1. 로케일 지정 및 요청 파라미터 인코딩 지정

<fmt:setLocale value="언어코드" scope="범위" />
국제화 태그가 Accept-Language 헤더에서 지정한 언어가 아닌 다른 언어를 사용하도록 지정하는 기능

<fmt:requestEncoding value="캐릭터셋" />
요청 파라미터의 캐릭터 인코딩을 지정
request.setCharacterEncoding("캐릭터셋")과 동일




5-2. <fmt:message> 태그

1) 리소스 번들 범위에서 메시지 읽기
<fmt:bundle basename="resource.message" [prefix="접두어"]>
    <fmt:message key="GREETING" />
</fmt:bundle>

2) 지정한 번들에서 메시지 읽기
<fmt:setBundle var="message" basename="resource.message" />
...
<fmt:message bundle="${message}" key="GREETING" />

3) <fmt:message> 태그의 메시지 읽는 순서
- bundle 속성에 지정한 리소스 번들을 사용
- <fmt:bundle> 태그에 중첩된 경우 <fmt:bundle> 태그에서 설정한 리소스 번들 사용
- 1과 2가 아닐 경우 기본 리소스 번들 사용. 기본 리소스 번들은 web.xml 파일에서 javax.servlet.jsp.jstl.fmt.localizationContext 콘텍스트 속성을 통해서 설정 가능

예제) fmt:message
1) 이클립스 Java Resources>src>resource라는 폴더 만들고 message.properties란 이름의 파일 생성. 다음과 같이 입력한다.

TITLE = MadVirus's Learning JSP 2.3
GREETING = HI! I'm ALPHAGO
VISITOR = Your ID is {0}.

2) message_ko.propertie라는 파일을 생성 후 이번엔 한글로 입력. 자동으로 한글이 코드로 변환되는 것을 볼 수 있다.

TITLE = \uC54C\uD30C\uACE0 ('알파고'라고 입력하면 이클립스가 자동변환)
GREETING = 안녕하세요 알파고입니다. (이클립스에서 다 자동변환 해준다)
VISITOR = 당신의 아이디는 {0}입니다. (이클립스에서 다 자동변환 해준다)

※ C:\Program Files\Java\jdk1.8.0_45\bin에 있는 native2ascii.exe를 이용하면 일반 텍스트를 아스키코드로 바꿔줄 수 있다.

3) jsp 파일 작성: fmt:bundle과 fmt:message를 사용한 예
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<fmt:requestEncoding value="utf-8" />
<fmt:setLocale value="en" />
<fmt:bundle basename="resource.message">
<fmt:message key="TITLE" var="title" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
</head>
<body>
<fmt:message key="GREETING"/>
<c:if test="${empty param.id}">
<fmt:message key="VISITOR">
<fmt:param value="${param.id }"/>
</fmt:message>
</c:if>
</body>
</html>
</fmt:bundle>

3) jsp 파일 작성: fmt:setBundle과 fmt:message bundle=를 사용한 예
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<fmt:requestEncoding value="utf-8" />
<fmt:setLocale value="en" />

<fmt:setBundle basename="resource.message" var="message" />
<fmt:message bundle="${message }" key="TITLE" var="title"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
</head>
<body>
<fmt:message bundle="${message }" key="GREETING" />

<c:if test="${! empty param.id}">
<fmt:message bundle="${message }" key="VISITOR">
<fmt:param value="${param.id }"/>
</fmt:message>
</c:if>
</body>
</html>



5-3. formatNumber 태그
숫자를 포맷팅

<fmt:formatNumber value="숫자값" [type="값타입"] [pattern="패턴"]
 [currentCode="통화코드"] [currencySymbol="통화심볼"] 
   [groupingUsed="(true|false)"] [var="변수명"] [scope="영역"] />

주요 속성
value : 양식에 맞춰 출력할 숫자
type : 어떤 양식으로 출력할지를 정한다. number는 숫자형식, percent는 % 형식, currency는 통화형식으로 출력. 기본 값은 number.
pattern : 직접 숫자가 출력되는 양식을 지정한다. DecimalFormat 클래스에서 정의되어 있는 패턴 사용
var : 포맷팅 한 결과를 저장할 변수 명. var 속성을 사용하지 않으면 결과가 곧바로 출력.
scope : 변수를 저장할 영역. 기본 값은 page 이다.

예제) formatNumber를 이용한 숫자와 통화 단위로 출력
<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>numberFormat 태그</title>
</head>
<body>
<c:set var="price" value="10000"></c:set>
<fmt:formatNumber value="${price}" type="number" var="numberType"/>
<ul>
<li>숫자: ${numberType}</li>
<li>통화: <fmt:formatNumber value="${price}" type="currency" currencySymbol="$" /></li>
<li>패턴: <fmt:formatNumber value="${price}" pattern="00000000.00" /></li>
<li>확률: <fmt:formatNumber value="${price}" type="percent" /></li>
</ul>
</body>
</html>
  • 숫자: 10,000
  • 통화: $10,000
  • 패턴: 00010000.00
  • 확률: 1,000,000%




5-4. parseNumber 태그
문자열을 숫자 데이터 타입으로 변환

<fmt:parseNumber value="값" [type="값타입"] [pattern="패턴"]
    [parseLocale="통화코드"] [integerOnly="true|false"] 
    [var="변수명"] [scope="영역"] />

주요 속성
value : 파싱할 문자열
type : value 속성의 문자열 타입을 지정. number, currency, percentage 가 올 수 있다. 기본 값은 number
pattern : 직접 파싱할 때 사용할 양식을 지정
var : 파싱한 결과를 저장할 변수 명을 지정
scope : 변수를 저장할 영역을 지정한다. 기본 값은 page.




5-5. formatDate 태그
날짜 정보를 담은 객체(Date)를 포맷팅

<fmt:formatDate value="날짜값"
    [type="타입"] [dateStyle="날짜스타일"] [timeStyle="시간스타일"]
    [pattern="패턴"] [timeZone="타임존"]
    [var="변수명"] [scope="영역"] />

주요 속성
value : 포맷팅할 날짜 및 시간 값
type : 날짜, 시간 또는 둘 다 포맷팅 할 지의 여부를 지정
dateStyle : 날짜에 대한 포맷팅 스타일을 지정
timeStyle : 시간에 대한 포맷팅 스타일을 지정
pattern : 직접 파싱할 때 사용할 양식을 지정
var : 파싱한 결과를 저장할 변수 명을 지정
scope : 변수를 저장할 영역을 지정

예제) formatDate
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSLT fmt formatDate</title>
</head>
<body>
<c:set var="now" value="<%= new java.util.Date()%>" />
<ul>
<li><fmt:formatDate value="${now}" type="date" dateStyle="full" /></li>
<li><fmt:formatDate value="${now}" type="date" dateStyle="short" /></li>
<li><fmt:formatDate value="${now}" type="time" /></li>
<li><fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /></li>
<li><fmt:formatDate value="${now}" type="both" pattern="z a h:mm" /></li>
</ul>
</body>
</html>
  • 2016년 3월 17일 목요일
  • 16. 3. 17
  • 오전 11:44:31
  • 2016년 3월 17일 목요일 오전 11시 44분 31초 KST
  • KST 오전 11:44


5-6. timeZone과 setTimeZone
국제화 태그가 사용할 시간대 설정

주요 속성
value : 포맷팅할 날짜 및 시간 값
type : 날짜, 시간 또는 둘 다 포맷팅 할 지의 여부를 지정
dateStyle : 날짜에 대한 포맷팅 스타일을 지정
timeStyle : 시간에 대한 포맷팅 스타일을 지정
pattern : 직접 파싱할 때 사용할 양식을 지정
var : 파싱한 결과를 저장할 변수 명을 지정
scope : 변수를 저장할 영역을 지정

예제) timeZone
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL fmt timeZone</title>
</head>
<body>
<c:set var="now" value="<%= new java.util.Date() %>" />
<ul>
<li>현재시간: <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /></li>
<li><fmt:timeZone value="Hongkong">
홍콩시간: <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" />
</fmt:timeZone>
</ul>

<p>fmt:timeZone의 value에 넣을 수 있는 각 나라의 입력값:</p> 
<ul>
<c:forEach var="id" items="<%= java.util.TimeZone.getAvailableIDs() %>" >
<li>${id}</li>
</c:forEach>
</li>
</ul>
</body>
</html>
  • 현재시간: 2016년 3월 17일 목요일 오후 12시 11분 28초 KST
  • 홍콩시간: 2016년 3월 17일 목요일 오전 11시 11분 28초 HKT

fmt:timeZone의 value에 넣을 수 있는 각 나라의 입력값:

  • Africa/Abidjan
  • Africa/Accra
  • Africa/Addis_Ababa
  • Africa/Algiers
  • Africa/Asmara
.
.
.



5-7. web.xml, 국제화 태그 콘텍스트 속성

javax.servlet.jsp.jstl.fmt.localizationContext : 기본으로 사용할 리소드 번들을 지정한다. 리소스 번들의 basename을 입력한다.

javax.servlet.jsp.jstl.fmt.locale : 기본으로 사용할 로케일을 지정한다.

javax.servlet.jsp.jstl.fmt.timeZone : 기본으로 사용할 시간대를 지정한다.





6. JSTL이 제공하는 주요 EL 함수

length(obj) : obj가 List와 같은 Collection인 경우 저장된 항목의 개수를 리턴하고, obj가 문자열일 경우 문자열의 길이를 리턴한다.

toUpperCase(str) : str을 대문자로 변환한다.

toLowerCase(str) : str을 소문자로 변환한다.

substring(str, idx1, idx2) : str.substring(idx1, idx2)의 결과를 리턴한다. idx2가 -1일 경우 str.substring(idx1)과 동일하다.

trim(str) : str 좌우의 공백문자를 제거한다.

replace(str, src, dest) : str에 있는 src를 dest로 변환한다.

indexOf(str1, str2) : str1에서 str2가 위치한 인덱스를 구한다.

startsWith(str1, str2) : str1이 str2로 시작할 경우 true를, 그렇지 않을 경우 false를 리턴한다.

endsWith(str1, str2) : str1이 str2로 끝나는 경우 true를, 그렇지 않을 경우 false를 리턴한다.

contains(str1, str2) : str1이 str2를 포함하고 있을 경우 true를 리턴한다.

escapeXml(str) : XML의 객체 참조에 해당하는 특수 문자를 처리한다. 예를 들어, '&'는 '&amp;'로 변환한다.










Posted by netyhobby
,