** ๐Ÿ“ŒJSTL + EL ํ†ตํ•ฉ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ**

ํšŒ์› ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ + ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ + ๊ถŒํ•œ ๋ถ„๊ธฐ + ํŽ˜์ด์ง•๊นŒ์ง€ ํ•œ ๋ฒˆ์—!


โœ… ๋ชฉ์ฐจ

  1. ์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค ์†Œ๊ฐœ
  2. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๊ฐœ์š”
  3. ํ†ตํ•ฉ JSP ์˜ˆ์ œ ์ฝ”๋“œ
  4. ์ฃผ์š” ์ฝ”๋“œ ์„ค๋ช…
  5. ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ์ •๋ฆฌ
  6. ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

1๏ธโƒฃ ์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค ์†Œ๊ฐœ

๐Ÿ“Œ โ€œํšŒ์› ๋ชฉ๋ก ํŽ˜์ด์ง€โ€๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • sessionScope.user์— ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์Œ
  • userList๋Š” ํšŒ์› ์ •๋ณด ๋ฆฌ์ŠคํŠธ (User ๊ฐ์ฒด ๋ฐฐ์—ด)
  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌ์ž์ผ ๊ฒฝ์šฐ, ์‚ญ์ œ ๋ฒ„ํŠผ ์ถœ๋ ฅ
  • ํšŒ์› ์ˆ˜์— ๋”ฐ๋ผ ํŽ˜์ด์ง• ๋ฒˆํ˜ธ ์ถœ๋ ฅ

2๏ธโƒฃ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๊ฐœ์š”

/memberList.jsp           โ† ๋ฉ”์ธ JSP
/UserServlet.java         โ† userList, ๋กœ๊ทธ์ธ์ •๋ณด setAttribute
/userList (ArrayList<User>)  โ† requestScope์— ์ €์žฅ
sessionScope.user         โ† ํ˜„์žฌ ๋กœ๊ทธ์ธ ์œ ์ € ๊ฐ์ฒด

3๏ธโƒฃ ํ†ตํ•ฉ JSP ์˜ˆ์ œ ์ฝ”๋“œ

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<h2>๐Ÿ‘ฅ ํšŒ์› ๋ชฉ๋ก</h2>

<!-- ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ƒ๋‹จ ๋ฌธ๊ตฌ ํ‘œ์‹œ -->
<c:choose>
  <c:when test="${not empty sessionScope.user}">
    <p>โœ… ${sessionScope.user.name}๋‹˜, ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!</p>
  </c:when>
  <c:otherwise>
    <p>๐Ÿ” ๋กœ๊ทธ์ธ ํ›„ ์ด์šฉํ•ด์ฃผ์„ธ์š”.</p>
  </c:otherwise>
</c:choose>

<!-- ํšŒ์› ํ…Œ์ด๋ธ” -->
<table border="1">
  <tr>
    <th>No</th>
    <th>์•„์ด๋””</th>
    <th>์ด๋ฆ„</th>
    <th>๊ถŒํ•œ</th>
    <th>์‚ญ์ œ</th>
  </tr>

  <c:forEach var="member" items="${userList}" varStatus="vs">
    <tr>
      <td>${vs.count}</td>
      <td>${member.id}</td>
      <td>${member.name}</td>
      <td>
        <c:choose>
          <c:when test="${member.role eq 'admin'}">๐Ÿ‘‘ ๊ด€๋ฆฌ์ž</c:when>
          <c:otherwise>๐Ÿ‘ค ์ผ๋ฐ˜</c:otherwise>
        </c:choose>
      </td>
      <td>
        <c:if test="${sessionScope.user.role eq 'admin'}">
          <a href="deleteUser?id=${member.id}">๐Ÿ—‘ ์‚ญ์ œ</a>
        </c:if>
      </td>
    </tr>
  </c:forEach>
</table>

<!-- ํŽ˜์ด์ง• ๋ฒˆํ˜ธ ์ถœ๋ ฅ -->
<p>
  ํŽ˜์ด์ง€:
  <c:forEach var="i" begin="1" end="${totalPages}">
    <c:choose>
      <c:when test="${i == currentPage}">
        <strong>[${i}]</strong>
      </c:when>
      <c:otherwise>
        <a href="memberList.jsp?page=${i}">${i}</a>
      </c:otherwise>
    </c:choose>
  </c:forEach>
</p>

4๏ธโƒฃ ์ฃผ์š” ์ฝ”๋“œ ์„ค๋ช…

๊ตฌ์—ญ ์„ค๋ช…
<c:choose> ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ผ ์ธ์‚ฟ๋ง ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ
<c:forEach> ํšŒ์› ๋ฐ˜๋ณต ์ถœ๋ ฅ userList์˜ ํšŒ์›๋“ค์„ ๋ฐ˜๋ณต
<c:if> ๊ด€๋ฆฌ์ž๋งŒ ์‚ญ์ œ ๋ฒ„ํŠผ ๋…ธ์ถœ session์˜ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์ฒดํฌ
<c:choose> ์—ญํ• ๋ณ„ ์ถœ๋ ฅ ๊ด€๋ฆฌ์ž/์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ์—ญํ•  ๊ตฌ๋ถ„ ์ถœ๋ ฅ
ํŽ˜์ด์ง• ํ˜„์žฌ ํŽ˜์ด์ง€๋Š” ๊ฐ•์กฐ, ๋‚˜๋จธ์ง€๋Š” ๋งํฌ ์ฒ˜๋ฆฌ

5๏ธโƒฃ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ์š”์•ฝ

์งˆ๋ฌธ ์˜ˆ์‹œ ๋‹ต๋ณ€
โ“ EL๊ณผ JSTL์„ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋‚˜์š”? EL์€ ${}๋กœ ๊ฐ’์„ ํ‘œํ˜„, JSTL์€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ํƒœ๊ทธ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ JSP๋ฅผ ํ‘œํ˜„ ์ „์šฉ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
โ“ ์‹ค๋ฌด์—์„œ ์กฐ๊ฑด + ๋ฐ˜๋ณต์„ ์กฐํ•ฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”? ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ ํ•ญ๋ชฉ๋งˆ๋‹ค ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ‘œ์‹œ๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์˜ˆ: ๊ถŒํ•œ ํ‘œ์‹œ, ์‚ญ์ œ ๋ฒ„ํŠผ ๋“ฑ)
โ“ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž์™€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋ฅผ JSP์—์„œ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ ์ถœ๋ ฅํ•˜๋‚˜์š”? <c:if test="${not empty sessionScope.user}"> ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
โ“ ๊ด€๋ฆฌ์ž๋งŒ ๋ฒ„ํŠผ์„ ๋ณด์ด๊ฒŒ ํ•˜๋ ค๋ฉด? <c:if test="${sessionScope.user.role eq 'admin'}"> ๋กœ ๊ถŒํ•œ ์ฒดํฌํ•ด์„œ ์กฐ๊ฑด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
โ“ EL๋กœ ์‚ฌ์šฉ์ž role์ด๋‚˜ null ์ฒดํฌ ์‹œ ์ฃผ์˜์ ์€? null์ด๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— JSTL <c:if>์™€ ์กฐํ•ฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

๐Ÿ“Œ JSTL + EL์„ ๊ฒฐํ•ฉํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์—†์ด๋„ ๋ณต์žกํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ, ๋ฐ˜๋ณต ์ถœ๋ ฅ, ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” MVC ๊ตฌ์กฐ + JSTL + EL ์กฐํ•ฉ์ด JSP View ๊ฐœ๋ฐœ์˜ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.