[JSP]EL/JSTL?
in JSP
EL/JSTL
EL ( Expression Language )
Expression Language(ํํ ์ธ์ด)๋ ๊ฐ์ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก, JSP์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ณด์ํ๋ ์ญํ ์ ํ๋ค.
JSP์๋ Java ์ฝ๋์ markup ์์๋ค์ด ์์ฌ์๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์, ๋์์ด๋๋ค๋ ์ฝ๊ฒ ๋ณผ ์ ์๋ ์ฝ๋์ ๋ํ needs๊ฐ ์์๊ณ , ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์ฌ์ด์ ์ด๋ป๊ฒ ํ๋ฉด ํจ์จ์ ์ผ๋ก ์ผ๋ค์ ๋๋ ์ ์์ ๊ฒ์ธ๊ฐ๋ผ๋ ๊ณ ๋ฏผ์ด ์์๋ค.
์ด๋ฅผ ์ํด Java ์ฝ๋๋ณด๋ค ๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๋์จ ๊ฒ์ด EL์ด๋ค.
EL์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
JSP์ ์ค์ฝํ(scope)์ ๋ง๋ ์์ฑ ์ฌ์ฉ ๊ฐ scope์ ๋ณ์๋ค์ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
(Framework์์ ์ ๊ณตํ๋)์งํฉ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ ๋ฐฉ๋ฒ ์ ๊ณต
์์น ์ฐ์ฐ, ๊ด๊ณ ์ฐ์ฐ, ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ ๊ณต
Java ํด๋์ค ๋ฉ์๋ ํธ์ถ ๊ธฐ๋ฅ ์ ๊ณต
EL๋ง์ ๊ธฐ๋ณธ ๊ฐ์ฒด ์ ๊ณต
- <%= i %>
- JSP์์์ ๊ฐ ํ๊ธฐ๋ฒ์ด๋ฉฐ, i๋ ๋ณ์์ ๋๋ค.
- ${ i }
- EL์์์ ๊ฐ ํ๊ธฐ๋ฒ์ด๋ฉฐ, i๋ ์ด๋ฆ์ ๋๋ค
๊ฐ์ฒด Scope์์ ์ ํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ, Scope๊ฐ ์์ ๋ฒ์์์ ํฐ ๋ฒ์๋ก ํด๋น ์ด๋ฆ์ด ์กด์ฌํ๋์ง ์ฐพ์ต๋๋ค.
์๋ฅผ ๋ค์ด, request scope์ A ์ ํธ๋ฆฌ๋ทฐํธ๊ฐ ์๊ณ session scope์ ๋์ผํ ์ด๋ฆ์ A ์ ํธ๋ฆฌ๋ทฐํธ๊ฐ ์์ ๋,
${ A }์ ๊ฒฐ๊ณผ๋ request scope์ ์๋ A ์ ํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ด ์ถ๋ ฅ๋ ๊ฒ์ ๋๋ค.
EL ํ๊ธฐ๋ฒ์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ param ํค์๋๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ํ JSP ๊ฐ ํ๊ธฐ๋ฒ์์ ํ๋ผ๋ฏธํฐ๋ ๋ฌธ์์ด์ด์ง๋ง, EL์์ ์ซ์๋ ์ซ์๋ก, ๋ฌธ์์ด์ ๋ฌธ์์ด๋ก ์ธ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ localhost:8080/testing/test.sjp?a=10 ์ผ๋ก ์์ฒญ์ด ์ฌ ๋,
test.jsp ํ์ผ์์ ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด,
<%= request.getParameter("a") + 100 %> JSP => 10100
${param.a + 100 } EL => 110
JSP ๊ฐ ํ๊ธฐ๋ฒ์์๋ a๊ฐ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ 10100์ด ๋์ง๋ง,
EL ํ๊ธฐ๋ฒ์์๋ 10์ ์ ์ํ์ผ๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ 110์ด ๋ฉ๋๋ค.
EL ํ๊ธฐ๋ฒ์์๋ ์์ฃผ ์ฌ์ฉ๋ ์ ์๋ ๊ฐ์ฒด๋ค์ ๋ฏธ๋ฆฌ ์ ์ํด๋์์ต๋๋ค.
๋ด์ฅ ๊ฐ์ฒด
๊ฐ ๊ฐ์ฒด Scope์ ์ ๊ทผํ ์ ์์๋ ์ด์ ๋ EL ํ๊ธฐ๋ฒ์์ ๋ด์ฅ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
JSTL ( JavaServer Pages Standard Tag Library )
JSP ํ์ผ ์์ HTML ๋ฌธ๋ฒ๊ณผ Java ๋ฌธ๋ฒ์ด ์์ฌ ์๋ ์ํ์์๋, ํ๊ทธ์ ์ต์ํ ํ๋ก ํธ ๊ฐ๋ฐ์๋ค์ ์ฝ๋๋ฅผ ์ฝ๊ธฐ๊ฐ ๋ถํธํ๋ค๋ ๋ฌธ์ ์ ์ด ์์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด JSTL(JSP Standard Tag Library)์ด๋ค. ํ๊ทธ๋ฅผ ํตํด JSP ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์, JSP์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ JSTL์ ์ฌ์ฉํ๋ ค๋ฉด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ ํด์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ JSP ํ์ด์ง์์ ์๋์ ์ธ ์ค์ ๋งจ ์์ ์์ฑํด์ผ ํด์ผ JSTL ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
ํ๊ทธ์ ์ข ๋ฅ์๋ core , format , function , xml , sql ์ด ์์ต๋๋ค.
1) set
๋ณ์์์ฑ <c:set var="๋ณ์๋ช
" value="๊ฐ" [scope="์์ญ"]/>
var : EL ๋ณ์์ ์ด๋ฆ
value : ์ค์ ๊ฐ์ ์ง์
scope : ๋ณ์๋ฅผ ์ ์ฅํ ์ใ
ใฑ
<c:set var="count" value="${fn:length(list)}"/>
=>count๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ ํ ์ ์๋ค.
2) if
๋ถ๊ธฐ <c:if test = "true"> ํญ์ ์คํ๋๋ค. </c:if>
if๋ ์กฐ๊ฑด์ด ํ ๊ฐ์ธ ๊ฒฝ์ฐ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
if - else ์ฌ์ฉ์ ๋ถ๊ฐํ๋ฉฐ, choose ํ๊ทธ๋ก ๋์ฒดํ๋ค.
3) choose
if-else์์ else ๋ถ๋ถ ํด๊ฒฐ์ ์ํ switch๊ฐ์ ํ๊ทธ
<c:choose>
<c:when test="์กฐ๊ฑด1">
...
</c:when>
<c:when test="์กฐ๊ฑด2">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
์ฌ๊ธฐ์ test๋ผ๋ ์์ฝ์ด๊ฐ ์๋๋ฐ HTML์์์ attribute๊ฐ์ ์กด์ฌ์ด๋ฉฐ ๋ณ๊ฒฝ๋ถ๊ฐํ๋ค.
ex) <c:when a="์กฐ๊ฑด1">์ด๋ ๊ฒ ์ฐ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
(if์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค.)
4) foreach
5) import
include๋ฅผ JSTL๋ก ๋ฐ๊พธ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
<jsp:include page="/WEB-INF/views/includes/header.jsp"/>
<c:import url="/WEB-INF/views/includes/header.jsp"/>
importํ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.
๋ํ JSTL๋ด์์๋ HTML์ฃผ์์ ์ฌ์ฉํ ์ ์๋ค.
=> JSP ์ฃผ์์ ์ฌ์ฉํ ๊ฒ
<c:import url="/WEB-INF/views/includes/navigation.jsp"/>
<%-- navigation.jsp์๊ฒ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.--%>
<!-- navigation.jsp์๊ฒ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.--> ERROR
<c:param name="menu" value="main"/>
</c:import>
6) ๋ ์ง format
<fmt:parseDate value='${ vo.regDate }' var='regDate' pattern="yyyy-MM-dd H:m" />
<td><fmt:formatDate value="${ regDate }" pattern="MM์dd์ผ H:m"/></td>
- vo.regDate๋ MySQL์ Datetime ํ์ ์ ๊ฐ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
- Datetime์ 2018-03-17 11:48:33 ์ format์ ๊ฐ๋๋ฐ, ์ด๋ฅผ JSP์์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด๊ธฐ๊ฐ ์์ข์ผ๋ฏ๋ก โ03์17์ผ 11:48โ์ format์ผ๋ก ๋ฐ๊พธ๋ ์์ ์ ๋๋ค.
- ๊ฒ์์ ํ์๋ฉด ๋ ๋ง์ pattern์ด ์์ผ๋ฏ๋ก ์ฐธ๊ณ ํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
7) split
<c:set var="phone" value="${ fn:split(userVO.phone , '-') }" />
- ๋ฌธ์์ด์ ๊ตฌ๋ถ์์ ๋ฐ๋ผ ๋ฐฐ์ด๋ก ๋ง๋๋ ํจ์์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํธ๋ํฐ๋ฒํธ 010-1111-1111 ์ด๋ผ๋ ๋ฌธ์์ด์ด ์์ ๋ ํ์ดํ โ-โ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฑํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
8) ํฉ๊ณ
<c:set var ="total" value = "0" />
<c:forEach var="price" items="${prices}">
<c:set var= "total" value="${ total + price }"/>
</c:forEach>
<c:out value="${total}"/>
9) ๊ฐํ์ฒ๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋ textarea๋ก ์ ๋ ฅ๋ ๊ฐ์ ๊ฐํ์ฒ๋ฆฌ๊ฐ ๋์ด DB์ ์ ์ฅ๋์ด ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ JSP์ ๊ฐ์ ์ถ๋ ฅ ํด๋ณด๋ฉด ๊ฐํ์ฒ๋ฆฌ๊ฐ ๋์ง ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ pageContext์ ๋๋ถ์ด JSTL replace ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
<%
pageContext.setAttribute("newLine", "\n");
%>
<td align="center">
${fn:replace(productVO.info, newLine, '<br>') }
</td>
10) JSTL ์ ์ฉ ์ ๊ณผ ์ ์ฉ ํ ๋น๊ต ( 1 )
11) JSTL ์ ์ฉ ์ ๊ณผ ์ ์ฉ ํ ๋น๊ต (2)
JSP ํ์ผ์ ์คํด๋ฆฝํ๋ฆฟ <% %>์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค, JSTL๊ณผ EL ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
๊ทธ ์ด์ ๋ <% %>์ ์ฌ์ฉํ๋ฉด HTML ํ๊ทธ๋ฅผ ๋ค์ฌ์ฐ๊ธฐ ํ ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ ์
์ฅ์์๋ ๋์ค์ Spring ํ๋ ์์ํฌ์์๋ JSTL/EL ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋๋ฐ, JSTL/EL์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ์ ์์ด ํจ์ฌ ํจ์จ์ ์
๋๋ค.