[Web] JSTL & c tag

자바 서버페이지와 c tag에 대한 분석

Posted by owin2828 on 2020-01-06 17:26 · 7 mins read

들어가기 앞서


  • 본 문서에서는 JSTL 및 c tag에 대하여 알아보도록 한다.
  • 출처: https://bit.ly/2OpbwWJ, https://bit.ly/2oboH2w

1. JSTL


JSTL(JSP Standard Tag Library)는 JSP페이지에서 많이 사용되는
논리적인 판단, 반복처리, 포맷처리를 위한 커스텀 태그를 표준으로 만들어 정의한 라이브러리

1-1. Why JSTL

  • JSP는 HTML 코드와 스크립트릿, 표현식등의 스크립트 코드가 섞여 가독성이 떨어짐
  • 이를 해결하기 위해 HTML 태그와 비슷한 코드를 사용해 처리하는 것이 JSTL

1-2. JSTL 사용법

  • JSTL 사용법으로는 다음과 같이 두 가지 방법이 존재
    1. pom.xml에 maven 의존 설정
         <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>jstl</artifactId>
             <version>1.2</version>
         </dependency>
      
    2. jar 파일을 WEB-INF/lib 디렉토리에 복사

1-3. JSTL이 제공하는 태그

  • JSTL의 태그는 다음과 같은 종류가 존재
  1. 코어
  2. XML
  3. 국제화
  4. DataBase
  5. 함수
    • 주요기능: 컬렉션 처리, String 처리
    • 접두어: fn
    • 관련 URL: [http://java.sun.com/jsp/jstl/functions])(http://java.sun.com/jsp/jstl/functions)
  • 이 중, 제일 많이 사용되는 태그는 c tag(코어)

2. C Tag


코어 태그 라이브러리는 변수 설정이나 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공

  • 변수 지원:
    • set, remove
  • 흐름 제어:
    • if, choose, forEach, forTokens
  • URL 처리:
    • import, redirect, url
  • 기타 태그:
    • catch, out

2-1. set, remove (변수 설정)

  • <c:set> 태그는 EL 변수 값 혹은 EL 변수의 프로퍼티 값을 지정하거나, JSTL 태그에서 사용할 변수의 값을 처리할 때 다음과 같이 사용
    • <c:set var="varName" value="varValue" [scope="지정영역"] />
    • <c:set target="대상" property="프로퍼티 이름" value="값" />
        <!-- 첫번째 사용법 (jstl 변수를 생성하여 사용하는법) -->
        <c:set var="test1"  value="니나노"/>
      
        <!-- 두번째 사용법 (빈즈활용) -->
        <!-- 자바 빈즈가 필요함. 한페이지에서 설명하기위해.. map 으로 대체 -->
        <% Map<String, String> member = new HashMap<String, String>();
        member.put("name", "홍길동");
        %>
              
        <c:set var="member"  value="<%=member%>"/>
        <div style="background-color: yellow;">${member.name}</div>
        <c:set target = "<%=member%>" property = "name" value = "홍길동2"/>
      

      실행결과
      니나노
      홍길동
      홍길동2
      홍길동2

  • <c:remove> 태그는 태그로 지정한 변수를 `삭제`할 때 다음과 같이 사용
    • <c:remove var="varName" [scope="지정영역"] />
        <c:set var="test1"  value="니나노"/>
        <div style="background-color: yellow;">${test1}</div>
        <!-- c:remove 사용하여 c:set 변수를 삭제 -->
        <c:remove var = "test1"/>
        <div style="background-color: yellow;">${test1}</div>
      

      실행결과
      니나노
      (빈 텍스트가 출력 됨)

2-2. if, choose (조건문)

  • <c:if> 태그는 조건의 참/거짓 유무에 따라 분기하며 다음과 같이 사용

    else는 따로 존재하지 않음, 따라서 choose를 사용

    • <c:if test="조건" [var = "testResult"]/>
        <c:set var="test1"  value="3"/>
        <c:if test="${test1 > 1}">
            <div style="background-color: yellow;">1보다 크다</div>
        </c:if>
        <c:if test="${test1 < 1}">
            <div style="background-color: yellow;">1보다 작다</div>
        </c:if>
      

      실행결과
      1보다 크다

  • <c:choose>, <c:when>, <c:otherwise> 태그를 else if, else 대신 다음과 같이 함께 사용
    • <c:chose>
      <c:when test="조건">실행문</c:when>
      <c:otherwise>실행문</c:otherwise>
      </c:chose>
        <c:set var="test1"  value="3"/>
        <c:choose>
            <c:when test="${test1 < 1}">
                <div style="background-color: yellow;">1보다 작음</div>
            </c:when>
            <c:when test="${test1 == 3}">
                <div style="background-color: yellow;">3과 같음</div>
            </c:when>
            <c:otherwise>
                <div style="background-color: yellow;">쩌리</div>
            </c:otherwise>
        </c:choose>
      

      실행결과
      3과 같음

2-3. forEach, forTokens (반복문)

  • <c:forEach> 태그는 자바의 for문과 동일하며, 다음과 같이 사용
    • <c:forEach var="변수" item = "아이템" [begin ="시작값" end="종료값" step="증가값" varStatus="현재의값"]/>
        <!-- memberList라는 구조체가 존재하며 프로퍼티 값은 name, age를 가짐 -->
        <c:forEach var="member" items="<%=memberList %>" >
            <div style="background-color: yellow;">
                이름 : ${member.name} 나이 : ${member.age}
            </div>
        </c:forEach>
      

      실행결과
      이름: 홍길동 나이: 21
      이름: 김순이 나이: 23

  • <c:forTokens> 태그는 자바의 split 기능과 유사하며, 다음과 같이 사용
    • <c:forTokens var="변수" items="아이템" delims="자를 문구" [varStatus="status"]/>
        <c:set var="nameGroup" value="철수,영미,나미,우솝,루피"/>
        <c:forTokens var="name" items="${nameGroup}" delims=",">
            <div style="background-color: yellow;">
                이름 : ${name}
            </div>
        </c:forTokens>
      

      실행결과
      이름: 철수
      이름: 영미
      이름: 나미
      이름: 우솝
      이름: 루피

2-4. url, imnport, redirect (URL 처리)

  • 해당 태그들은 문법만 정리
  • <c:url value = "링크"/>
  • <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
  • <c:redirect url="value" [context="context"]/>

2-5. catch, out (기타)

  • 해당 태그들은 문법만 정리
  • <c:catch var="명칭"></c:catch>
  • <c:out value="value" [escapeXml="{true|false}"] [default="value가 없을 때 표시될 문자"] />