๐Ÿ‘€ JSTL(JSP Standard Tag Library)์ด๋ž€?

  • ์ž์นด๋ฅดํƒ€(์•„ํŒŒ์น˜)์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํƒœ๊ทธ๋ฅผ ๋ชจ์•„๋†“์€ ํ˜•ํƒœ
  • ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • CORE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ์ œ๊ณต
    • ๋ณ€์ˆ˜ ์„ ์–ธ, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํƒœ๊ทธ
    • ํŽ˜์ด์ง€ ์ด๋™์ฒ˜๋ฆฌ ํƒœ๊ทธ (ํƒœ๊ทธ๋งŒ ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜๋ณต๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ)
  • Formatting ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๋ฐ์ดํ„ฐ ๊ตญ์ œํ™” ์ฒ˜๋ฆฌ (๋‹ค๊ตญ์–ด) ํƒœ๊ทธ
    • ํ˜•์‹ํ™” (๋‚ ์งœ, ์ˆซ์ž, ์‹œ๊ฐ„) ํƒœ๊ทธ
  • DB ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : sql๊ตฌ๋ฌธ์ฒ˜๋ฆฌ ๋™์ž‘
    • CRUD ๋™์ž‘ ์ˆ˜ํ–‰ ํƒœ๊ทธ
  • XML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • XML ๋ฌธ์„œ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ํƒœ๊ทธ

๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜

  • ํ†ฐ์บฃ ํ™ˆํŽ˜์ด์ง€์—์„œ taglibs ๋ฉ”๋‰ด์— ๋“ค์–ด๊ฐ€์„œ ํ•˜๋‹จ์—
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
  • ์„ธ ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
  • ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ๋“ค์„ WEB-INF/lib์— ๋ณต๋ถ™ํ•˜๋ฉด ์„ค์น˜ ์™„๋ฃŒ


CORE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์‚ฌ์šฉ

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • ๋จผ์ € ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธํด๋ฃจ๋“œ ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • prefix๋Š” ํƒœ๊ทธ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ prefix์— ์ง€์ •ํ•œ ๋ฌธ์ž๋ฅผ ์“ฐ๊ณ  :์„ ์“ฐ๋ฉด ํƒœ๊ทธ ์˜ˆ์•ฝ์–ด๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<%-- <c:set var="๋ณ€์ˆ˜๋ช…" value="๊ฐ’"/> --%>
  <c:set var="num3" value="300"/>
  <c:set var="num4" value="400"/>
  
  <!-- ๋ณ€์ˆ˜๊ฐ’ ์ถœ๋ ฅํ•  ๋•Œ์—” el ํ‘œํ˜„์‹ ์‚ฌ์šฉ -->
  <c:out value="${num3 }"/>
  <c:out value="${num4 }"/>
  <hr>
  
  ${num3 } + ${num4 } = ${num3 + num4 }
  • ํƒœ๊ทธ ์†์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

<c:set var="name" value="S22" scope="request"/>
  • ์Šคํฌ๋ฆฝํ‹€๋ฆฟ์„ ์ด์šฉํ•ด์„œ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ง€์—ญ๋ณ€์ˆ˜๋กœ ์ธ์‹๋˜์–ด์„œ ์„ ์–ธํ•œ ํŽ˜์ด์ง€์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š”๋ฐ JSTL ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ์˜์—ญ๋„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์„œ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ํ›จ์”ฌ ํ™œ์šฉ๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • scope : page, request, session, application ๋„ค ์˜์—ญ ๋ชจ๋‘ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. scope๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ page๋ผ์„œ ์„ ์–ธํ•œ ํŽ˜์ด์ง€์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ถœ๋ ฅ

<c:out value="์•ˆ๋…•ํ•˜์„ธ์š” JSTL์ž…๋‹ˆ๋‹ค."></c:out>
  • ๋งŒ์•ฝ null๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ๋นˆ๊ณต๋ฐฑ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. (JSP ํ‘œํ˜„์‹์€ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋‚จ)
  • ์ปดํŒŒ์ผ ์—๋Ÿฌ๋‚œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” null๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ์‚ฌ์šฉ์ž ์‹ ๋ขฐ๋„์—๋Š” ๋” ์ข‹๋‹ค.

< abc>ํƒœ๊ทธ๋Š” abc์ž…๋‹ˆ๋‹ค.<hr>

&lt;abc>ํƒœ๊ทธ๋Š” abc์ž…๋‹ˆ๋‹ค.<hr>

<c:out value="<abc>ํƒœ๊ทธ๋Š” abc์ž…๋‹ˆ๋‹ค."/>
  • ๋งŒ์•ฝ ํƒœ๊ทธ ์ž์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์กฐ๊ฑด๋ฌธ

if

<!-- jstl ๋ณ€์ˆ˜ 2๊ฐœ ์ƒ์„ฑ(์†์„ฑ) -->
<c:set var="name" value="itwill"/>
<c:set var="tel" value="010-1234-5678"/>

<!-- ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์ด "itwill"์ธ์ง€ ์ฒดํฌ -->
<c:if test="${name == 'itwill' }"><!-- ํ‘œํ˜„์‹ ์•ˆ์—์„œ๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์จ์•ผ ํ•จ(ํฐ ๋”ฐ์˜ดํ‘œ ์“ฐ๋ฉด ๋ฐ–์— ๋”ฐ์˜ดํ‘œ๋ž‘ ๋ฐ˜์‘ํ•จ) -->
  ์‚ฌ์šฉ์ž ์ด๋ฆ„ : ${name }<br>
</c:if>

<c:if test="${100 lt 200 }"><!-- lt : ๋น„๊ต์—ฐ์‚ฐ์ž(<)์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์˜ˆ์•ฝ์–ด -->
  200์ด ๋” ํฌ๋‹ค.<br>
</c:if>
  • HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ํƒœ๊ทธ ์‚ฌ์ด์— ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ๋ฌธ๊ตฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

switch ~case

<c:choose>
  <c:when test="${param.num1 le param.num2 }">
    num1! <br>
  </c:when>
  <c:when test="${param.num1 lt param.num2 }">
    num2! <br>
  </c:when>
  <c:otherwise>
    ๊ทธ ์™ธ ๋‚˜๋จธ์ง€<br>
  </c:otherwise>
</c:choose>
  • choose ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ switch ~case๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ

<c:forEach var="i" begin="1" end="10" step="1">
  ${i }
</c:forEach>
  • ์œ„์™€ ๊ฐ™์ด for๋ฌธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์กฐ๊ฑด์‹, ์ฆ๊ฐ์‹์„ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ €๋ ‡๊ฒŒ๋Š” ์ž˜ ์•ˆ ์“ด๋‹ค.(๋‹จ์ˆœ ์ˆœํšŒํ•  ๋•Œ for๋ฌธ์—์„œ ๊ท€์ฐฎ์€ ๊ฒƒ๋“ค์„ ๋œ์–ด๋‚ด๊ณ  ์“ฐ๋Š” ๊ฒƒ์ด foreach๋‹ˆ๊นŒโ€ฆ)

<%
  int arr[] = new int[3];
  for (int i = 0; i < arr.length; i++)
  {
    arr[i] = i;
  }
%>
<!-- ์ด ํ˜•ํƒœ๋ฅผ ๋งŽ์ด ์“ด๋‹ค.(items ์ž๋ฆฌ์—” jsp ํ‘œํ˜„์‹๋ณด๋‹ค๋Š” el ํ‘œํ˜„์‹์„ ์“ด๋‹ค.) -->
<c:forEach var="test" items="<%=arr %>">
  ${test } 
</c:forEach>
  • ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฌธ์ž์—ด Parsing

<c:forTokens var="abc" items="a,b,c,d,e,f,g,h" delims=",">
  ${abc } 
</c:forTokens>

<hr>
<c:set var="data" value="์ž๋ฐ” ๋””๋น„ ์›น JSP"/>

<c:forTokens var="name" items="${data }" delims=" ">
  ${name }<br>
</c:forTokens>
  • delims์— ๋„ฃ์€ ์ธ์ž๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋‹ค.


Formatting ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  • Formatting ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ fmt ์ ‘๋‘์‚ฌ๋ฅผ ์“ด๋‹ค.

๋‚ ์งœ ์ถœ๋ ฅํ•˜๊ธฐ

<c:set var="today" value="<%=new Date() %>"/>

<fmt:formatDate value="${today }"/><br>

<!-- time: ์‹œ๊ฐ„์ •๋ณด -->
<fmt:formatDate value="${today }" type="time"/><br>

<!-- both: ๋‚ ์งœ & ์‹œ๊ฐ„์ •๋ณด -->
<fmt:formatDate value="${today }" type="both"/><br>

<hr>

<fmt:formatDate value="${today }" dateStyle="full"/><br>
<fmt:formatDate value="${today }" dateStyle="long"/><br>
<fmt:formatDate value="${today }" dateStyle="medium"/><br>
<fmt:formatDate value="${today }" dateStyle="short"/><br>

<hr>

<fmt:formatDate value="${today }" type="both" dateStyle="full" timeStyle="full"/><br>
<fmt:formatDate value="${today }" type="time" timeStyle="full"/><br>
<fmt:formatDate value="${today }" type="time" timeStyle="long"/><br>
<fmt:formatDate value="${today }" type="time" timeStyle="medium"/><br>
<fmt:formatDate value="${today }" type="time" timeStyle="short"/><br>

<hr>
<h3>2022/2/25(๊ธˆ) (์˜ค์ „) 11:50:00 ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ</h3><br>
<fmt:formatDate value="${today }" pattern="yyyy/MM/dd(E)"/>
<fmt:formatDate value="${today }" type="time" pattern="(a)hh:mm:ss"/>
  • dateStyle์— ๋„ฃ์€ ๊ฐ’๋งŒํผ ์ถœ๋ ฅ๋˜๋Š” ๋‚ ์งœ ์ •๋ณด์˜ ๊ฐฏ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ†ตํ™” ์ถœ๋ ฅํ•˜๊ธฐ

<c:set var="today" value="<%=new Date() %>"/>
${today }
<hr>
<fmt:setLocale value="ko_kr"/><!-- ํ•œ๊ตญ์œผ๋กœ ๊ธฐ๋ณธ ์„ธํŒ…๋˜์–ด ์žˆ์–ด์„œ ์ƒ๋žต ๊ฐ€๋Šฅ -->
<fmt:formatDate value="${today }" dateStyle="full"/><br><!-- ๋…„ ์›” ์ผ ์š”์ผ ํ‘œ์‹œ -->
<fmt:formatNumber value="1000000000000" type="currency"/><br><!-- ์ˆซ์ž ์ž๋™์œผ๋กœ ,์ฝค๋งˆ ๋„ฃ์–ด์„œ ํ‘œ์‹œ/ currency๋Š” ํ†ตํ™”๋„ ๋„ฃ์–ด์คŒ -->

<hr>

<fmt:setLocale value="en_us"/><!-- ํ•œ๊ตญ์œผ๋กœ ๊ธฐ๋ณธ ์„ธํŒ…๋˜์–ด ์žˆ์–ด์„œ ์ƒ๋žต ๊ฐ€๋Šฅ -->
<fmt:formatDate value="${today }" dateStyle="full"/><br><!-- ๋…„ ์›” ์ผ ์š”์ผ ํ‘œ์‹œ -->
<fmt:formatNumber value="1000000000000" type="currency"/><br><!-- ์ˆซ์ž ์ž๋™์œผ๋กœ ,์ฝค๋งˆ ๋„ฃ์–ด์„œ ํ‘œ์‹œ/ currency๋Š” ํ†ตํ™”๋„ ๋„ฃ์–ด์คŒ -->

<hr>
<fmt:setLocale value="zh_cn"/><!-- ํ•œ๊ตญ์œผ๋กœ ๊ธฐ๋ณธ ์„ธํŒ…๋˜์–ด ์žˆ์–ด์„œ ์ƒ๋žต ๊ฐ€๋Šฅ -->
<fmt:formatDate value="${today }" dateStyle="full"/><br><!-- ๋…„ ์›” ์ผ ์š”์ผ ํ‘œ์‹œ -->
<fmt:formatNumber value="1000000000000" type="currency"/><br><!-- ์ˆซ์ž ์ž๋™์œผ๋กœ ,์ฝค๋งˆ ๋„ฃ์–ด์„œ ํ‘œ์‹œ/ currency๋Š” ํ†ตํ™”๋„ ๋„ฃ์–ด์คŒ -->

<hr>
<fmt:setLocale value="ja_jp"/><!-- ํ•œ๊ตญ์œผ๋กœ ๊ธฐ๋ณธ ์„ธํŒ…๋˜์–ด ์žˆ์–ด์„œ ์ƒ๋žต ๊ฐ€๋Šฅ -->
<fmt:formatDate value="${today }" dateStyle="full"/><br><!-- ๋…„ ์›” ์ผ ์š”์ผ ํ‘œ์‹œ -->
<fmt:formatNumber value="1000000000000" type="currency"/><br><!-- ์ˆซ์ž ์ž๋™์œผ๋กœ ,์ฝค๋งˆ ๋„ฃ์–ด์„œ ํ‘œ์‹œ/ currency๋Š” ํ†ตํ™”๋„ ๋„ฃ์–ด์คŒ -->


์ˆซ์ž ์ถœ๋ ฅ

<fmt:formatNumber value="100000000" groupingUsed="false"/><br>
<fmt:formatNumber value="100000000" groupingUsed="true"/><br>

<hr>

<h2>์†Œ์ˆ˜์  ์ž๋ฆฌ ํ‘œํ˜„</h2>
<fmt:formatNumber value="${2.12345676 }" pattern="#.####"/><br>

<!-- 0์€ .๋’ค์— 0์„ ์ฑ„์›Œ์คŒ -->
<fmt:formatNumber value="20.0" pattern="##.00"/><br>

<fmt:formatNumber value="0.5" type="percent"/><br>

<!-- ํ†ตํ™” ์‹ฌ๋ณผ๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค -->
<fmt:formatNumber value="10000000" type="currency" currencySymbol="@"/><br>

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: