- JSP์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ๊ฐํธํ ํํ ์ธ์ด์ด๋ค.
- JSP ์คํฌ๋ฆฝํธ ์์ ์ค ํํ์(
<%= %>
)์ ๋์ฒดํ ์ ์๋ค.
<%-- 1๏ธโฃ ๋ณ์ ์ฌ์ฉ --%>
${user.name}
<%-- 2๏ธโฃ ์์ ์ฌ์ฉ --%>
${num1 + num2}
<%-- 3๏ธโฃ ์ปฌ๋ ์
๋ฐ ๋งต ์ฌ์ฉ --%>
${list[0]}
${map['key']}
<%-- 4๏ธโฃ ๋ฉ์๋ ํธ์ถ --%>
${helperObject.calculateTotal(amount)}
- Java ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- JSP ์คํฌ๋ฆฝํธ ์์ ์ค ์ ์ธ๋ฌธ(
<%! %>
), ์คํฌ๋ฆฝํ๋ฆฟ(<% %>
), ํํ์(<%= %>
)์ ๋์ฒดํ ์ ์๋ค.- ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
- Core: set, out, if, choose/when/otherwise, forEach ๋ฑ
- Formatting
- ํจ์
- JSTL์ Core๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ธ๋ฌธ์ JSP ํ์ผ ์๋จ์ ์์ฑํด์ผ ํ๋ค.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
1) c:set
- ์ญํ : ๋ณ์์ ๊ฐ ํ ๋น
- ๋ฐฉ์
- value ์์ฑ์ ์ฌ์ฉํ๋ ๋ฐฉ์
- value ์์ฑ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์
- ์์ฑ
- var: ๋ณ์๋ช
- value: ๊ฐ
<%-- 1๏ธโฃ value ์์ฑ์ ์ฌ์ฉํ๋ ๋ฐฉ์ --%>
<c:set var="number1" value="100" />
<%-- 2๏ธโฃ value ์์ฑ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์ --%>
<c:set var="number2">100</c:set>
2) c:out
๐ฉ
escapeXml="true"
๋default
์์ฑ์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, EL(${}
)์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๊ฒฐํ๋ค.
- ์ญํ : ๊ฐ ์ถ๋ ฅ
- ์์ฑ
- value: ์ถ๋ ฅํ ๊ฐ/๋ณ์๋ช
- escapeXml: ๊ฐ์ ํฌํจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ฌด์ ์ฌ๋ถ(true/false), ๊ธฐ๋ณธ๊ฐ์ true
- default: ๊ธฐ๋ณธ๊ฐ
<c:out value="Hello world" />
<c:out value="${number1}" />
<c:out value="<script>alert('Hello world')</script>" />
<%-- ์ถ๋ ฅ: <script>alert('Hello world')</script> --%>
<c:out value="<script>alert('Hello world')</script>" escapeXml="true" />
<%-- ์ถ๋ ฅ: <script>alert('Hello world')</script> --%>
<c:out value="<script>alert('Hello world')</script>" escapeXml="false" />
<%-- ์ถ๋ ฅ: ์๋ฆผ์ฐฝ --%>
3) c:if
- ์ญํ : if ์กฐ๊ฑด๋ฌธ
- ์์ฑ
- test: ์กฐ๊ฑด
์ค๋ช | ์ ์ ๋ฐฉ๋ฒ | ์ฌ์ฉ ๊ฐ๋ฅ ๋ฐฉ๋ฒ |
---|---|---|
๊ฐ๋ค | eq | == |
๋ค๋ฅด๋ค | ne | != |
null์ด๋ค | empty | |
null์ด ์๋๋ค | not empty | !empty |
<c:if test="${number1 > 50}">
number1์ 50๋ณด๋ค ํฌ๋ค.
</c:if>
4) c:choose, c:when, c:otherwise
- ์ญํ : if-else if-else ์กฐ๊ฑด๋ฌธ
- ์์ฑ
- c:when
- test: ์กฐ๊ฑด
<c:choose>
<c:when test="${number1 < 50}">
50 ๋ฏธ๋ง์
๋๋ค.
</c:when>
<c:when test="${number1 < 100}">
100 ๋ฏธ๋ง์
๋๋ค.
</c:when>
<c:otherwise>
100 ์ด์์
๋๋ค.
</c:otherwise>
</c:choose>
5) c:forEach
๐ฉ ์ฃผ์ํ ์
- ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
var ๋ณ์ ํ์ฌ ๊ฐ == status.index == status.current
- ํฅ์๋ for๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
var ๋ณ์ ํ์ฌ ๊ฐ == status.current
- ์ญํ : ๋ฐ๋ณต๋ฌธ
- ๋ฐฉ์
- ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์
- ํฅ์๋ for๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์
- ์์ฑ
- ๐ ๊ณตํต
- var: ๊บผ๋ด์ง๋ ๋ฐ์ดํฐ์ ๋ณ์๋ช
- varStatus: ํ์ฌ ๋ฐ๋ณต์ ๋ํ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์, ์ผ๋ฐ์ ์ผ๋ก status๋ก ์ง์
- index
- ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: var๋ก ์ง์ ๋ ๋ณ์์ ํ์ฌ ๊ฐ
- ํฅ์๋ for๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: 0๋ถํฐ ์์
- count: 1๋ถํฐ ์์
- first: ๋ฐ๋ณต๋ฌธ์ด ์ฒซ๋ฒ์งธ๋ก ๋์์ผ๋ฉด true, ๊ทธ ์ธ false
- last: ๋ฐ๋ณต๋ฌธ์ด ๋ง์ง๋ง ๋ฒ์งธ์ด๋ฉด true, ๊ทธ ์ธ false
- current: var๋ก ์ง์ ๋ ๋ณ์์ ํ์ฌ ๊ฐ
- ๐ ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- begin: ์์๊ฐ
- end: ์ข ๋ฃ๊ฐ
- step: ์ฆ๊ฐ์ํฌ ๊ฐ, ๊ธฐ๋ณธ๊ฐ์ 1
- ๐ ํฅ์๋ for๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- items: ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๊ฐ์ฒด๋ช
1๏ธโฃ ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์
<c:forEach begin="12" end="20" step="2" var="i" varStatus="status">
<br>
i: ${i}<br>
index: ${status.index}<br> <%-- index: i์ ๋์ผ --%>
count: ${status.count}<br>
first: ${status.first}<br>
last: ${status.last}<br>
current: ${status.current}<br>
</c:forEach>
2๏ธโฃ ํฅ์๋ for๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์
๐ฉ ์ฃผ์ํ ์
- items๊ณผ var์ ๋ณ์๋ช ์ ๋ฌ๋ผ์ผ ํ๋ค.
- items๋ ํฐ๋ฐ์ดํ์ EL(
${}
)์ ํจ๊ป ์ฌ์ฉํ์ฌ ์์ฑํด์ผ ํ๋ค.
<%-- numbers: [1000, 72, 999, 12, 88] --%>
<c:forEach items="${numbers}" var="number" varStatus="status">
<br>
number: ${number}<br>
index: ${status.index}<br> <%-- index: 0๋ถํฐ ์์ --%>
count: ${status.count}<br>
first: ${status.first}<br>
last: ${status.last}<br>
current: ${status.current}<br>
</c:forEach>
- JSTL์ Formatting๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ธ๋ฌธ์ JSP ํ์ผ ์๋จ์ ์์ฑํด์ผ ํ๋ค.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
1) fmt:formatNumber
- ์ญํ : ์ซ์ ํ์ ์ง์
- ์์ฑ
- value: ํ์์ ์ง์ ํ๋ ค๋ ์ซ์
- type: ํ์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃํ(number/currency/percent). ๊ธฐ๋ณธ๊ฐ์ number.
- groupingUsed: ์ฒ ๋จ์ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ(true/false). ๊ธฐ๋ณธ๊ฐ์ true.
- currencySymbol: type์ด currency์ผ ๊ฒฝ์ฐ ์ฌ์ฉํ ํตํ ๊ธฐํธ. ๊ธฐ๋ณธ๊ฐ์ โฉ.
- var: ํ์์ด ์ ์ฉ๋ ์ซ์๋ฅผ ์ ์ฅํ ๋ณ์์ ์ด๋ฆ
- pattern: ํ์์ 0๊ณผ #์ ์ฌ์ฉํ์ฌ ์ง์ (0: ๊ฐ์ด ์์ด๋ ์๋ฆฌ์๋ฅผ 0์ผ๋ก ์ฑ์, #: ๊ฐ์ด ์์ผ๋ฉด ์ฑ์ฐ๊ณ ์์ผ๋ฉด ์ฑ์ฐ์ง ์์)
<fmt:formatNumber value="12345678" /> <%-- 12,345,678 --%>
<fmt:formatNumber type="percent" value="0.4" /> <%-- 40% --%>
<fmt:formatNumber value="12345678" groupingUsed="false" /> <%-- 12345678 --%>
<fmt:formatNumber type="currency" currencySymbol="$" value="12345678" /> <%-- $12,345,678 --%>
<fmt:formatNumber value="12345678" var="n1" />
${n1} <%-- 12,345,678 --%>
<fmt:formatNumber value="1234.5678" pattern="0.00000" /> <%-- 1234.56780 --%>
<fmt:formatNumber value="1234.5678" pattern="#.#####" /> <%-- 1234.5678 --%>
2) fmt:formatDate
- ์ญํ : ๋ ์ง ํ์ ์ง์
- ์์ฑ
- value: ํ์์ ์ง์ ํ๋ ค๋ ๋ ์ง. java.util.Date ์๋ฃํ์ด์ฌ์ผ ํจ.
- pattern: ๋ ์ง ํ์์ ์ง์ ์ง์ ํ ๋ ์ฌ์ฉ
- var: ํ์์ด ์ ์ฉ๋ ๋ ์ง๋ฅผ ์ ์ฅํ ๋ณ์์ ์ด๋ฆ์ ์ง์
- type: ํ์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃํ(date/time/both). ๊ธฐ๋ณธ๊ฐ์ date.
<fmt:formatDate value="${now}" /> <%-- 2023. 12. 26. --%>
<fmt:formatDate value="${now}" pattern="yyyy๋
MM์ dd์ผ HH์ mm๋ถ ss์ด" /> <%-- 2023๋
12์ 26์ผ 22์ 42๋ถ 16์ด --%>
<fmt:formatDate value="${now}" var="date1" />
${date1} <%-- 2023. 12. 26. --%>
<fmt:formatDate value="${now}" type="time" /> <%-- ์คํ 10:42:16 --%>
3) fmt:parseDate
- ์ญํ : ๋ฌธ์์ด๋ก ํํ๋ ๋ ์ง๋ฅผ Date ์๋ฃํ์ผ๋ก ํ์ฑ
- ์์ฑ
- value: Date ์๋ฃํ์ผ๋ก ํ์ฑํ๋ ค๋ ๋ฌธ์์ด
- pattern: value์ ๋ ์ง ํ์
- var: ํ์ฑ๋ Date ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋ณ์์ ์ด๋ฆ
<fmt:parseDate value="2023-12-26" pattern="yyyy-MM-dd" /> <%-- Tue Dec 26 00:00:00 KST 2023 --%>
<fmt:parseDate value="2023-12-26" pattern="yyyy-MM-dd" var="date2"/>
${date2} <%-- Tue Dec 26 00:00:00 KST 2023 --%>
- JSTL์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ธ๋ฌธ์ JSP ํ์ผ ์๋จ์ ์์ฑํด์ผ ํ๋ค.
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
- ํ๊ทธ๊ฐ ์๋ EL(
${}
)์ ์ฌ์ฉํ๋ค.
${fn:contains('abc', 'a')} <%-- true --%>
${fn:containsIgnoreCase('abc', 'A')} <%-- true --%>
${fn:startsWith('abc', 'a')} <%-- true --%>
${fn:endsWith('abc', 'c')} <%-- true --%>
${fn:length('abc')} <%-- 3 --%>
${fn:replace('abc', 'a', 'A')} <%-- Abc --%>
${fn:split('abc', 'b')[0]} <%-- a --%>
${fn:substring('abc', 0, 1)} <%-- a --%>
${fn:toLowerCase('ABC')} <%-- abc --%>
${fn:toUpperCase('abc')} <%-- ABC --%>
<pre>${fn:trim(' a b c ')}</pre> <%-- a b c --%>