JSTL(JavaServer Pages Standard Tag Libray)

goยท2024๋…„ 9์›” 2์ผ

๐Ÿ’ก 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)

  • ํ‘œํ˜„์–ธ์–ด๋ž€?
    1) JSTL ๊ทœ์•ฝ์— ์†Œ๊ฐœ๋œ ๋‚ด์šฉ์œผ๋กœ์„œ JSP2.0๊ทœ์•ฝ์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ
    2) ๊ฐ’์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ƒˆ๋กœ์šด ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ์„œ JSP์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์„ ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    3) ํ‘œํ˜„์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ
    -JSP์˜ ๋„ค๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์˜์—ญ์˜ ์†์„ฑ ์‚ฌ์šฉ
    -์ง‘ํ•ฉ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ• ์ œ๊ณต
    -์ˆ˜์น˜์—ฐ์‚ฐ,๊ด€๊ณ„์—ฐ์‚ฐ,๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ์ œ๊ณต
    -์ž๋ฐ” ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๊ธฐ๋Šฅ ์ œ๊ณต
    -ํ‘œํ˜„ ์–ธ์–ด๋งŒ์˜ ๊ธฐ๋ณธ ๊ฐ์ฒด ์ œ๊ณต
<% ๊ธฐ๋Šฅ๊ตฌํ˜„ %>
<%!๋ฉค๋ฒ„๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ%>
<%=๊ฐ’ %> <!-- 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} ์‚ฌ์šฉ

profile
์•ˆ๋…•ํ•˜์„ธ์š”!

0๊ฐœ์˜ ๋Œ“๊ธ€