cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 생활코딩
  • 삼성SDS
  • javascript
  • 데이터분석
  • 인공지능
  • 브라이틱스 스튜디오
  • 머신러닝
  • Brightics Studio
  • Brightics
  • beautifulsoup
  • 크롤링
  • 브라이틱스 튜토리얼
  • Brightics AI
  • 삼성SDS 브라이틱스
  • web
  • 브라이틱스 스튜디오 사용법
  • 데이터 사이언스
  • react
  • 차원축소
  • 브라이틱스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

[JSP] JSTL(Jsp Standard Tag Library) 정리 - <c:set>,<c:out>,<c:remove>,<c:if>,<c:choose>,<c:when>,<c:otherwise>,<c:forEach>,<c:forTokens> 등
Programming/Servlet

[JSP] JSTL(Jsp Standard Tag Library) 정리 - <c:set>,<c:out>,<c:remove>,<c:if>,<c:choose>,<c:when>,<c:otherwise>,<c:forEach>,<c:forTokens> 등

2019. 10. 27. 15:31
반응형

[ JSTL 이란? ]

JSTL은 JSP에서 유용하게 사용될 수 있는 기능을 만들어 둔 커스텀 태그 라이브러리이다. JSTL을 사용하면 JSP에서 스크립트릿의 사용을 줄일 수 있으며 특히 화면에 데이터를 표현할 때 필요한 프로그램 요소를 대체할 수 있어 유용하다.

 

 

JSTL을 사용하기 위해서는 라이브러리를 다운받고 적용하고 선언해야 하는데 차례차례 해보도록 하자.

 

우선 http://tomcat.apache.org/taglibs/standard/ 이곳을 들어갑니다.

Standard 1.1 download를 들어가주세요

Standard 1.1 다운로드를 클릭해주세요.

 

binaries 클릭

birnaries를 클릭해주세요.

맨 밑에 1.1.2.zip 다운로드

jakarta-taglibs-standard-1.1.2.zip을 다운로드 받고 압축을 풉니다.

lib 폴더

그 다음 lib 폴더로 들어오면 두 개의 jar파일이 있는데 이것을 모두 복사한다.

그리고 여러분들이 적용할 프로젝트의 WEB-INF/lib 에 모두 붙여 넣습니다. 

mysql-connector는 jdbc를 위한 것이므로 무시

 

여기까지가 JSTL 라이브러리를 추가한 것이다. 이제 JSTL 사용 선언을 해보자.

 

 

 

core(핵심) 라이브러리를 사용하기 위해서 taglib 지시어에 다음과 같이 입력을 해주면 된다.

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

c라는 접두사로 시작하는 태그는 위의 URI에서 가져오는 태그다. 라고 알려주는 것이다.

 


 

<c:set> 태그

변수를 설정하거나 객체의 멤버변수 값을 설정할 때 사용하는 태그이다.

<c:set var="변수이름" value="값" />

이렇게 선언하면. ${변수이름}을 사용할 수 있다.

다른 영역에 저장하고 싶다면, scope="session"을 추가하면 된다. 디폴트 값은 "page"이다.

<c:set var="변수이름" value="값" [scope={"page|request|session|application"}] />

그런데 이 변수는 내부적으로 자바 변수로 선언되는 것이 아니라 page 데이터 영역의 속성으로 선언되기 때문에 <%= 변수이름%> 형태로는 출력될 수 없다.

 

 

 

<c:out> 태그

이 태그는 변수 내용을 출력할 때 사용되는 태그이다. EL태그로도 출력할 수 있지만, 아래와 같이 태그가 포함된 변수를 escapeXml 항목을 true/false 지정해서 태그를 포함해서 출력할지 적용해서 출력할지 결정할 수 있다.

<c:set var="aaa" value="hello" />

<!-- 1. 태그 바디가 없는 경우 -->
<c:out value="${aaa}" [escapeXml="{true|false}"] />

<!-- 2. 태그 바디가 있는 경우 -->
<c:out value="${aaa}" [escapeXml="{true|false}"] >
	default value(value에 내용이 없을 때 출력될 기본 값)
</c:out>

 

 

 

<c:remove> 태그

이 태그는 변수를 제거할 때 사용된다.

<c:remove var="변수이름" />

이렇게 사용하면 해당 이름의 변수가 사라진다. 그런데 이렇게 선언할 경우 모든 scope에 해당 이름을 가진 변수가 제거되므로 특정 영역의 변수만 제거하고 싶다면 다음과 같이 한다.

<c:remove var="변수이름" scope="request" />

 

 

 

<c:if test="true|false"> 태그

test 안의 내용이 true이냐 false이냐에 따라서 내용을 출력하거나 출력하지 않는다. 따라서 EL 형태를 응용해서, <c:if test="${ 10 > 0 }" > 이렇게 표현한다면 EL은 true/false를 리턴할 것이고 그 값에 따라 JSTL도 동작하게 되는 형태이다.

자바의 if문과 유사하지만, else는 지원하지 않는다.

<!-- 1. 바디 내용이 없는 경우 -->
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />

<!-- 2. 바디 내용이 있는 경우 -->
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]>
    body content
</c:if>

 

예시를 들자면 다음과 같다.

<c:remove var="aaa" />

<c:if test="${empty aaa ? true : false}" var="result">
    empty!<br>
</c:if>

${result}

실행 결과는,

empty!

true

가 된다.

 

test 안에 넣을 부분을 EL을 사용해서 조금 더 구체적으로 활용할 수 있다.

<c:if test="${(!empty param.id) && (!empty param.password) ? true : false}" var="result">
    두 값 모두 존재한다.<br>
</c:if>

${result}

이런 id값과 password 모두가 들어왔는지 체크해서 처리하는 루틴도 고려해볼 수 있다.

 

 

 

<c:choose>, <c:when>, <c:otherwise> 태그

이들 태그는 함께 사용되며, 자바의 if~else if문, switch문과 기능이 유사하다.

<c:choose> 태그 내에는 <c:when> 태그가 여러 개 올 수 있다.

<!-- <c:choose>는 일종의 스위치 문이다.
 처음 일치하는 것만 출력한다. -->
<c:choose>
    <c:when test="${1 > 0}">
        1은 0보다 크다<br>
    </c:when>
    <c:when test="${2 > 1}">
        2은 1보다 크다<br>
    </c:when>
    <c:otherwise>
        대부분 숫자는 0보다 크다<br>
    </c:otherwise>
</c:choose>

좀 더 응용을 해보자.

<body>
    <form action="jstl.jsp">	
        <select name="name">
            <option value="장동건">장동건</option>
            <option value="권상우">권상우</option>
        </select>
        <input type="submit" value="전송">
    </form>
	
    <c:choose>
        <c:when test="${param.name == '장동건'}">
            ${param.name}
        </c:when>
        <c:when test="${param.name == '권상우'}">
            ${param.name}
        </c:when>
        <c:otherwise>
            선택 안했네..
        </c:otherwise>
    </c:choose>
</body>

 

 

 

<c:forEach> 태그

반복문과 관련된 태그로, forEach 태그는 자바 for문과 유사하다. 가장 유용하고 중요한 JSTL 태그 중 하나이다.

https://jerryjerryjerry.tistory.com/59 

<!-- 1. 컬렉션 객체의 크기 만큼 반복 -->
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] 
           [begin="begin"] [end="end"] [step="step"]>
    body content
</c:forEach>

<!-- 2. 지정된 횟수 반복 -->
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
    body content
</c:forEach>

 

 

1부터 10까지 출력하는 예제를 들어보자.

<c:forEach var="임시변수명" begin="1" end="10">
    ${임시변수명}<br>
</c:forEach>

 

이번에는 1, 3, 5, 7 .. 순으로 증가하도록 증가치를 지정해보자.

<c:forEach var="임시변수명" begin="1" end="10" step="2">
    ${임시변수명}<br>
</c:forEach>

 

이번에는 배열의 내용을 순서대로 출력하는 예제를 살펴보자. 

<c:forEach var="배열 요소를 저장할 임시변수 이름" items="${배열이름}">
    ${배열 요소를 저장할 임시변수 이름}<br>
</c:forEach>

 

 

 

<c:forTokens>

문자열에 포함된 토큰을 분리해서 각각의 토큰에 대해 반복 처리를 수행하도록 만드는 기능이다.

기본적으로는 for문과 유사하지만, StringTokenizer 클래스 기능을 제공한다.

자바의 StringTokenizer 클래스는 문자열로부터 특정 구분자(공백, '-' 등)를 기준으로 문자열을 분할하는 기능을 제공하는 클래스이다.

<c:forTokens var="temp" items="aaa bbb ccc" delims=" ">
    ${temp}<br>
</c:forTokens>

그런데 문자열을 분할할 때 여러 개가 가능하다.

<c:forTokens var="temp" items="aaa!bbb@ccc^ddd" delims="!@^">
    ${temp}<br>
</c:forTokens>

결과는 aaa, bbb, ccc, ddd가 분리되어 출력된다.

 

 

 

<날짜와 관련된 태그>

<fmt:formatDate value="<%=new Date() %>" type="both" />

위와 같이 할 경우, 날짜와 시간이 모두 출력되게 된다. type에 date, time 둘 중 하나를 쓰면 하나만 나오게 된다.

 

 

 

<숫자와 관련된 태그>

<fmt:formatNumber value="12345678" groupingUsed="true"/><br>
<fmt:formatNumber value="3.141592" pattern="#.##"/>

위의 경우 세 자리마다 끊어서 쉼표가 출력되고, 아래의 경우 소수점 둘째자리까지만 출력된다.

반응형
저작자표시 (새창열림)

'Programming > Servlet' 카테고리의 다른 글

서블릿(Servlet) 필터(Filter)를 사용하여 한글 처리 문제를 해결하기(어노테이션 방식)  (0) 2020.08.03
서블릿(Servlet) url 매핑기법 2가지(web.xml 방식, 어노테이션 방식)  (0) 2020.07.30
[JSP] JSP Beans(빈즈)에 대해 알아보자  (0) 2019.10.09
[JSP] 표현언어(Expression Language)란?  (0) 2019.10.09
(Servlet/JSP) setCharacterEncoding, setContentType 정리  (4) 2019.10.02
    'Programming/Servlet' 카테고리의 다른 글
    • 서블릿(Servlet) 필터(Filter)를 사용하여 한글 처리 문제를 해결하기(어노테이션 방식)
    • 서블릿(Servlet) url 매핑기법 2가지(web.xml 방식, 어노테이션 방식)
    • [JSP] JSP Beans(빈즈)에 대해 알아보자
    • [JSP] 표현언어(Expression Language)란?
    cbw1030
    cbw1030

    티스토리툴바