3 λΆ„ μ†Œμš”

πŸ“š WEB


πŸ“š JSTL ( JSP Standard Tag Library )

JSTL μ΄λž€ 무엇인가?

JSTL은 JAVA EE 기반의 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 ν”Œλž«νΌμ„ μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ λͺ¨μŒμ΄λ‹€.
XML 데이터 μ²˜λ¦¬μ™€ 쑰건문, 반볡문, κ΅­μ œν™”μ™€ 지역화 같은 일을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ JSP νƒœκ·Έ 라이브러리λ₯Ό μΆ”κ°€ν•˜μ—¬ JSP 사양을 ν™•μž₯ν–ˆλ‹€.
JSTL은 JSP νŽ˜μ΄μ§€ λ‚΄μ—μ„œ μžλ°” μ½”λ“œλ₯Ό λ°”λ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ‘œμ§μ„ λ‚΄μž₯ν•˜λŠ” 효율적인 방법을 μ œκ³΅ν•œλ‹€.
ν‘œμ€€ν™”λœ νƒœκ·Έ 셋을 μ‚¬μš©ν•˜μ—¬ μžλ°” μ½”λ“œκ°€ λ“€λ½κ±°λ¦¬λŠ” 것 보닀 더 μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ™€ μ‘μš© μ†Œν”„νŠΈμ—μ–΄ μ½”λ“œμ™€ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ κ΄€μ‹¬μ‚¬μ˜ λΆ„λ¦¬λ‘œ μ΄μ–΄μ§€κ²Œ ν•œλ‹€.

  • custom tag : κ°œλ°œμžκ°€ 직접 νƒœκ·Έλ₯Ό μž‘μ„±ν•  수 μžˆλŠ” κΈ°λŠ₯을 제곡
  • custom tag μ€‘μ—μ„œ 많이 μ‚¬μš©λ˜λŠ” 것듀을 λͺ¨μ•„μ„œ JSTLμ΄λΌλŠ” κ·œμ•½μ„ λ§Œλ“¬
  • 논리적인 νŒλ‹¨, 반볡문의 처리, λ°μ΄ν„°λ² μ΄μŠ€ λ“±μ˜ 처리λ₯Ό ν•  수 μžˆλ‹€.
  • JSTL은 JSP νŽ˜μ΄μ§€μ—μ„œ μŠ€ν¬λ¦½νŠΈλ¦Ώμ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ•‘μ…˜μ„ 톡해 κ°„λ‹¨ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•œλ‹€.
  • JSTLμ—λŠ” λ‹€μ–‘ν•œ μ•‘μ…˜μ΄ 있으며, EL κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

JSTL μ‚¬μš©λ°©λ²•

  1. ν™ˆνŽ˜μ΄μ§€μ—μ„œ jstl-1.2 클릭



  1. jar 파일 λ‹€μš΄



  1. dynamic web project 생성 -> WebContent -> WEB-INF -> lib -> jar 파일 μ €μž₯



JSTL Tag

library prefix function URI
core c λ³€μˆ˜ 지원, νλ¦„μ œμ–΄, URL처리 http://java.sun.com/jsp/jstl/core
XML x XML μ½”μ–΄, νλ¦„μ œμ–΄, XML λ³€ν™˜ http://java.sun.com/jsp/jstl/xml
κ΅­μ œν™” fmt 지역, 메세지 ν˜•μ‹, 숫자 및 λ‚ μ§œ ν˜•μ‹ http://java.sun.com/jsp/jstl/fmt
database sql SQL http://java.sun.com/jsp/jstl/sql
ν•¨μˆ˜ Collection, String 처리 http://java.sun.com/jsp/jstl/functions

JSTL - core tag

function tag description
λ³€μˆ˜ 지원 set jsp pageμ—μ„œ μ‚¬μš© ν•  λ³€μˆ˜ μ„€μ •
remomve μ„€μ •ν•œ λ³€μˆ˜λ₯Ό 제거
흐름 μ œμ–΄ if 쑰건에 λ”°λ₯Έ μ½”λ“œ μ‹€ν–‰
choose, when, otherwise 닀쀑 쑰건을 μ²˜λ¦¬ν•  λ•Œ μ‚¬μš© ( if ~ else if ~ else )
forEach array λ‚˜ collection의 각 ν•­λͺ©μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©
forTokens κ΅¬λΆ„μžλ‘œ λΆ„λ¦¬λœ 각각의 토큰을 μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©
( StringTokenizer )
URL 처리 import URL을 μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ μžμ›μ˜ κ²°κ³Όλ₯Ό μ‚½μž…
redirect μ§€μ •λœ 경둜둜 redirect
url URL μž‘μ„±
기타 νƒœκ·Έ catch Exception μ²˜λ¦¬μ— μ‚¬μš©
out JspWriter에 λ‚΄μš©μ„ μ²˜λ¦¬ν•œ ν›„ 좜λ ₯

JSTL - λ³€μˆ˜ μ„ μ–Έ : <c:set>

  • μ•‘μ…˜μ€ λ³€μˆ˜λ‚˜ νŠΉμ • 객체의 ν”„λ‘œνΌν‹°μ— 값을 ν• λ‹Ήν•  λ•Œ μ‚¬μš©
  • value μ†μ„±μ˜ κ°’μ΄λ‚˜ μ•‘μ…˜μ˜ Body Content둜 값을 μ„€μ •
  • var 속성은 λ³€μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λ©°, λ³€μˆ˜μ˜ μƒμ‘΄λ²”μœ„λŠ” scope μ†μ„±μœΌλ‘œ μ„€μ • ( λ””ν΄νŠΈλŠ” page )
  • νŠΉμ • 객체의 ν”„λ‘œνΌν‹°μ— 값을 ν• λ‹Ήν•  λ•ŒλŠ” target 속성에 객체λ₯Ό μ„€μ •ν•˜κ³  property에 ν”„λ‘œνΌν‹°λͺ…을 μ„€μ •

1. value 속성을 μ΄μš©ν•˜μ—¬ μƒμ‘΄λ²”μœ„ λ³€μˆ˜ κ°’ ν• λ‹Ή
<c:set value="value" var="varName" [scope="{page|request|session|application}"] />

2. μ•‘μ…˜μ˜ body 컨텐츠λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ‘΄λ²”μœ„ λ³€μˆ˜ κ°’ ν• λ‹Ή
<c:set var="varName" [scope="{page|request|session|application}"]>
body content
</c:set>

3. value 속성을 μ΄μš©ν•˜μ—¬ λŒ€μƒ 객체의 ν”„λ‘œνΌν‹° κ°’ ν• λ‹Ή
<c:set value="value" target="target" property="propertyName" />

4. μ•‘μ…˜μ˜ body 컨텐츠λ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€μƒ 객체의 ν”„λ‘œνΌν‹° κ°’ ν• λ‹Ή
<c:set target="target" property="propertyName">
body content
</c:set>

JSTL - μ˜ˆμ™Έ : <c:catch>


try {
    String str = null;
    out.println("Length of string : " + str.length());
} catch(Throwable ex){
    out.println(ex.getMessage());
}

이 try ~ catch ꡬ문을 JSTL둜 ν‘œν˜„ν•˜λ©΄


<%@ page contentType="text/html" pageEncoding="UTF-8" errorPage="error.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:catch var="ex">
<%
    String str = null;
    out.println("Length of string : " + str.length());  // μ˜ˆμ™Έ λ°œμƒ
%>
</c:catch>

<c:if test="$ex != null">
    μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. ${ex.message}
</c:if>

JSTL - 쑰건문 : <c:if>, <c:choose><c:when><c:otherwise>


1. <c:if> μ•‘μ…˜ μ‚¬μš© 예
<c:if test="${userType eq 'admin'}">
    <jsp:inclde page="admin.jsp" />
</c:if>


2. <c:if> μ•‘μ…˜μ˜ var 속성
<c:if test="${userType eq 'admin'}" var="accessible">
    <jsp:include page="admin.jsp" />
</c:if>
...
<c:if test="${category == 'user' && menu == 'list'}">
    νšŒμ› λͺ©λ‘.
</c:if>


3. <c:choose><c:when><c:otherwise> μ•‘μ…˜ μ‚¬μš© 예
<c:choose>
    <c:when test="${userType == 'admin'}">
        κ΄€λ¦¬μž ν™”λ©΄ ...
    </c:when>

    <c:when test="${userType == 'member'}">
        νšŒμ› μ‚¬μš©μž ν™”λ©΄ ...
    </c:when>

    <c:otherwise>
        일반 μ‚¬μš©μž ν™”λ©΄ ...
    </c:otherwise>
</c:choose>
    

JSTL - 반볡문 : <c:forEach>


1. 짝수번째 κ³Όμ •λͺ…λ§Œ 좜λ ₯ν•˜κΈ°
<c:forEach var="course" items="${courses}" begin="0" end="5" step="2">
    ${course.name}<br>
<c:forEach>

2. courses 리슀트λ₯Ό λ°˜λ³΅ν•˜λ©΄μ„œ 순번과 κ³Όμ •λͺ… 좜λ ₯ν•˜κΈ°
<c:forEach var="course" items="${courses}" varStatus="varStatus">
    ${varStatus.count}. ${course.name}
</c:forEach>

JSTL 마무리

JSTLκ³Ό λ‹€μ–‘ν•œ νƒœκ·Έμ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.
μ—¬λŸ¬ μœ μš©ν•œ νƒœκ·Έλ“€μ΄ λ§Žμ€λ° 그쀑 core νƒœκ·Έλ₯Ό κ°€μž₯ 많이 μ‚¬μš©ν•œλ‹€.
JSTLκ³Ό EL을 적절히 μ‚¬μš©ν•΄μ„œ JSP νŽ˜μ΄μ§€ μ½”λ“œλ₯Ό κ°„λ‹¨ν•˜κ³  가독성 μ’‹κ²Œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.