JSP) JSTL
๐ 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>
<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>