๐ก JSTL์ ๋ฌด์์ธ๊ฐ์?
JSP์์ ์ฌ์ฉํ๋ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, Java ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. MVC(Model-View-Controller) ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ๊ณผ๋ ๋ณ๊ฐ๋ก, JSTL์ MVCํจํด์์ View ๋ถ๋ถ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. JSTL์ ์ฌ์ฉํ๋ฉด JSPํ์ด์ง์์ ์๋ฐ์ฝ๋๋ฅผ ์ต์ํ ํ ์ ์๊ณ , ๊ฐ๋จํ ํ๊ทธ๋ก ํํํ ์ ์์ด ์ฝ๋๊ฐ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ ํ๊ธฐ ์ฌ์์ง๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๐ฆ JSTL์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JSTL ํ์ผ์ ๋ค์ด ๋ฐ์์ผ ํฉ๋๋ค!
ํฐ์บฃ์ ๋ค์ด๊ฐ ์ค๋ฅธ์ชฝ Apache - Taglibs - ์ค์์ Download - ์๋จ์ Apache Standard Taglib ์์ผ๋ก ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์ค๋๋ฐ ๊ทธ ์ค Standard 1.1 download ํด๋ฆญ !
๐ ๋งํฌ๋ฐ๋ก๊ฐ๊ธฐ

๋ค์ด๋ฐ์ ํ์ผ์ ์ด์ด์ 933KB ์ด๋ผ๊ณ ๋์ด์๋ ํ์ผ์ ๋ค์ด๋ฐ์ต๋๋ค.

๋ค์ด๋ฐ์ ํ์ผ์ ํ์ธํ์ฌ 933KB ์ธ์ง ํ์ธ์ ํ๊ณ ,

lib ํด๋๋ฅผ ์ด์ด ์๋์ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.

๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ libํด๋์ ๊ทธ๋๋ก ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํด์ค๋๋ค.

์ดํด๋ฆฝ์ค์์๋ ๋ง์ฐฌ๊ฐ์ง ! ๋ค ๋์๋ค๋ฉด JSTL์ ์ฌ์ฉํ ์ค๋น ์๋ฃ ๐๐ป

EL (Expression Language)
<% ๊ธฐ๋ฅ๊ตฌํ %>
<%!๋ฉค๋ฒ๋ณ์ ๋ฐ ๋ฉ์๋%>
<%=๊ฐ %> <!-- M(Model) V(View) C(Controller)
๐งจ MVC๋ฅผ ์ฐ๋ฉด์ ์๋ฐ์ฝ๋๋ฅผ ์ต๋ํ ํ์ํ๋ ค๊ณ ํจ
๐งจ ์ ์ฝ๋๋ฅผ ์ฐ์ง์์ผ๋ ค๊ณ ํ ๊ฒ
๐งจ ๋ทฐ๋ ๋ณด์ฌ์ฃผ๋ ์ญํ ๋ก๋ง ๊ตฌํ
ํํ์ธ์ด์ ํํ๋ฐฉ๋ฒ
ํํ์ธ์ด๋ $ ์ ํํ์ ๊ทธ๋ฆฌ๊ณ ๊ดํธ('{'์'}')๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํํํ๋ค.
<%=r๊ฐ%> => ${๊ฐ}
${expr}
expr ๋ถ๋ถ์๋ ํํ์ธ์ด๊ฐ ์ ์ํ ๋ฌธ๋ฒ์ ๋ฐ๋ผ ๊ฐ์ ํํํ๋ ์์ด ์จ๋ค.
(ํํ์ธ์ด๋ ์ปค์คํ
ํ๊ทธ์ ์์ฑ์ด๋ ๋น ์คํฌ๋ฆฝํธ ์์ ๋ถ๋ถ์์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.)
ํํ์ธ์ด์ ์ ์ฉ ์

EL์ ๊ธฐ๋ณธ๊ฐ์ฒด
1) requestScope : request ๊ธฐ๋ณธ๊ฐ์ฒด์ ์ ์ฅ๋ ์์ฑ์ <์์ฑ,๊ฐ> ๋งคํ์ ์ ์ฅํ Map ๊ฐ์ฒด
2) sessoinScope : session ๊ธฐ๋ณธ ๊ฐ์ฒด์ ์ ์ฅ๋ ์์ฑ์ <์์ฑ,๊ฐ> ๋งคํ์ ์ ์ฅํ Map ๊ฐ์ฒด
3) param : ์์ฒญ ํ๋ผ๋ฏธํฐ์ <ํ๋ผ๋ฏธํฐ ์ด๋ฆ,๊ฐ> ๋งคํ์ ์ ์ฅํ map ๊ฐ์ฒด, ๊ฐ์ ํ์
์ String[] ์ผ๋ก์,request.getParameterValues(์ด๋ฆ)์ ๊ฒฐ๊ณผ์ ๋์ผํ๋ค.
4) Cookie : <์ฟ ํค์ด๋ฆ,Cookie> ๋งคํ์ ์ ์ฅํ Map ๊ฐ์ฒด, request.getCookie()๋ก ๊ตฌํ Cookie ๋ฐฐ์ด๋ก๋ถํฐ ๋งคํ์ ์์ฑํ๋ค.
EL์ ๋ฐ์ดํฐ ํ์
1) boolean ํ์
: true์ false
2) ์ ์ํ์
: 0~9๋ก ์ด๋ฃจ์ด์ง ์ ์ ๊ฐ
3) ์ค์ํ์
: 0~9๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฉฐ, ์์์ (.)์ ์ฌ์ฉํ ์ ์๊ณ , 7.24e5์ ๊ฐ์ด ์ง์ํ์ผ๋ก ํํ ๊ฐ๋ฅํ๋ค.
4) ๋ฌธ์์ด ํ์
: ๋ฐ์ดํ('๋๋")๋ก ๋๋ฌ์ผ ๋ฌธ์์ด
5) ๋ ํ์
: null
EL์ ์์น ์ฐ์ฐ์
1) ๋ง์
: +
2) ๋บ์
: -
3) ๊ณฑ์
: *
4) ๋๋์
: / ๋๋ div
5) ๋๋จธ์ง : % ๋๋ mod
๋น๊ต ์ฐ์ฐ์
1) == ๋๋ eq
2) != ๋๋ ne
3) < ๋๋ lt
4) > ๋๋ gt
๋ ผ๋ฆฌ ์ฐ์ฐ์
1) && ๋๋ and
2) || ๋๋ or
3) ! ๋๋ not
emopty ์ฐ์ฐ์
ํ์: empty<๊ฐ>
empty ์ฐ์ฐ์๋ ๊ฒ์ฌํ ๊ฐ์ฒด๊ฐ ํ
๋น ๊ฐ์ฒด์ธ์ง ๊ฒ์ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์ฌ๊ธฐ์ <๊ฐ>์ ๋ฐ๋ผ์ ๋ฆฌํด ๋๋ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ๋๋ค.
1) ๊ฐ์ด null์ด๋ฉด true๋ฅผ ๋ฆฌํด
2) ๊ฐ์ด ๋น ๋ฌธ์์ด("")์ด๋ฉด true๋ฅผ ๋ฆฌํด
3) ๊ฐ์ ๊ธธ์ด๊ฐ 0์ธ ๋ฐฐ์ด์ด๋ฉด true๋ฅผ ๋ฆฌํด
4) ๊ฐ์ด ๋น Map์ด๋ฉด true๋ฅผ ๋ฆฌํด
5) ๊ฐ์ด ๋น Collection ์ด๋ฉด true๋ฅผ ๋ฆฌํด Collection์๋ List,Set,Array๋ฑ์ด ๋ชจ๋ ํฌํจ๋๋ค.
6) ์ด์ธ์ ๊ฒฝ์ฐ๋ false๋ฅผ ๋ฆฌํดํ๋ค
JSTL(ํ์ค ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
1) JSTL์ ๊ณ์์ ์ผ๋ก ์ฌ์ฉ์ด ์ฆ๊ฐ๋๊ณ ์๋ ์ถ์ธ๋ค.
2) ๋ง์ด ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋ฅผ ๋ชจ์์ JSTL์ด๋ผ๋ ๊ท์ฝ์ด ๋ง๋ค์ด์ง
3) ์คํฌ๋ฆฝํ๋ฆฟ,ํํ์์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ํจ์ฌ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ์ง์
4) JSTL์ 5๊ฐ์ง ํ๊ทธ๋ฅผ ์ง์ํ๋ค.

Core Tag

๋ค๋ชจ์นธ์ผ๋ก ํ์๋์ด ์๋ ๊ธฐ๋ฅ๋ค์ด ์ ์ผ ๋ง์ด ์ฐ์ด๋ ๊ธฐ๋ฅ์ด๋ค.
<c:set> ํ๊ทธ
<c:set>ํ๊ทธ๋ EL๋ณ์์ ๊ฐ์ด๋ EL๋ณ์์ ํ๋กํผํฐ์ ๊ฐ์ ์ง์ ํ ๋ ์ฌ์ฉ๋๋ค.
1) Syntax 1 : scope์ ํด๋นํ๋ ๋ณ์์ ์์ฑ ๊ฐ์ ์ ํ๋ค.
<c:set value="value" var="varName"[scope="{page|request|session|application}"]/>
*scope๋ฅผ ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด controller์ ์ ์ฅํด์ผํ๋ค
2) Syntax 2 : scope์ ํด๋นํ๋ ๋ณ์์ body ๊ฐ์ ์ ํ๋ค.
<c:set var="varName"[scope="{page|request|session|application}"]/>
</c:set>
โญ ์๋จ์ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ๊ผญ ์ ์ธํด์ฃผ๊ธฐ !

<c:if> ํ๊ทธ
<c:if test="์กฐ๊ฑด" [var=testResult]
</c:if>
์ค์ฒฉ๋ if~else ๋ธ๋ก๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
<c:choose> & <c:when> & <c:otherwise>
<c:choose>ํ๊ทธ๋ ์๋ฐ์ switch๊ตฌ๋ฌธ๊ณผ if-else ๋ธ๋ก์ ํผํฉํ ํํ๋ก ๋ค์์ ์กฐ๊ฑด๋ฌธ์ ํ๋์ ๋ธ๋ก์์ ์ํํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
<c:choose>
<c:when test="${์กฐ๊ฑด์1}"></c:when>
<c:when test="${์กฐ๊ฑด์2}"></c:when>
<c:when test="${์กฐ๊ฑด์3}"></c:when>
</c:choose>
<c:forEach> ํ๊ทธ
<c:forEach var="๋ณ์" items="์์ดํ
">
<tr>
<td align=right>
${๋ณ์์ฌ์ฉ}
</td>
</tr>
</c:forEach>
*items ์์ฑ์๋ map, ๋ฐฐ์ด, Collection ๋ฑ์ด ์๋ค.
jstl์์๋ break์ contiue๊ฐ ์๋ค. ์ถ๋ ฅ์ ๋ชฉ์ ์ผ๋ก ํ๊ธฐ ๋๋ฌธ
<c:forTokens> ํ๊ทธ
<c:forTokens var="token" items="๋ฌธ์์ด" delims="๊ตฌ๋ถ์">
${token}์ ์ฌ์ฉ
</c:forTokens>
<c:import>&<c:url>&<c:redirect>
1) <c:import> ํ๊ทธ
<c:import url="URL" [var="๋ณ์๋ช
"] [scope="์์ญ"] [charEncoding="์บ๋ฆญํฐ์
"]>
</c:import>
2) <c:url> ํ๊ทธ
<c:url value="URL" [var="varName"] [scope="์์ญ"]>
<c:param name="์ด๋ฆ" value="๊ฐ"/>
</c:url>
3) <c:redirect> ํ๊ทธ
<c:redirect url="URL" [content="์ฝํ
์คํธ๊ฒฝ๋ก"]>
<c:param name="์ด๋ฆ" value="๊ฐ"/>
</c:redirect>
<c:catch>
<c:catch var="exName">
์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฝ๋
</c:catch>
${exName} ์ฌ์ฉ