[java][JAVA WEB] [JSP] JSTL 사용 방법 - 주요 태그 문법 정리 . 

 

[JSP] JSTL 사용 방법 - 주요 태그 문법 정리

.

JSTL을 사용하려면 라이브러리가 필요하다. 라이브러리 다운로드 및 프로젝트 세팅은 이 포스트를 참고한다.

 

태그 라이브러리 선언

자바에서 import문을 선언하듯 JSP에서도 JSTL 확장 태그를 사용하려면 taglib 지시자로 라이버리를 선언해야 한다.

JSP 지시자 태그 <%@ taglib %>를 사용해서 다음과 같이 선언한다.

 

<%@ taglib prefix="접두사" uri="URI" %>

 

uri : 태그 라이브러리의 네임 스페이스 URI 식별자

prefix : JSTL 태그를 사용할때 태그 이름 앞에 붙일 접두사

 

다음은 태그 라이브러리 별 표준 선언문이다.

 

태그 라이브러리 선언문
Core <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
I18N <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Database <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
Functions <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

prefix를 꼭 저렇게 지정해야하는건 아니지만 JSTL에서 제안하는 표준 접두사이므로 똑같이 사용하는게 좋다.

 

태그 라이브러리 별 태그 정리

태그 라이브러리 기능 태그 - 부모태그(자식태그)
Core(기본) 변수 remove, set
흐름 제어 choose(when, otherwise)
forEach
forTokens
if
URL 관리 import(param)
redirect(param)
url(param)
기타 catch, out
XML 기본 out, parse, set
흐름 제어 choose(when, otherwise)
forEach
if
변환 transform(param)
I18N(국제화) 로케일 setLocale, requestEncoding
메시지 포맷 bundle
message(param)
setBundle
Database 데이터 소스 설정 setDataSource
SQL query(dateParam, param)
transaction
update(dateParam, param)
Functions(기타 함수) 집합의 원소 개수 length
문자열 처리 toUpperCase
toLowerCase
substring
substringAfter
substringBefore
trim
replace
indexOf
startsWith
endsWith
contains
containsIgnoreCase
split
join
escapeXml

 

<c:out> 태그

출력문을 만드는 태그이다.

 

<c:out value="출력값" default="기본값" />
<c:out value="출력값">기본값</c:out>

 

value에 EL 표현식을 쓸 수 있다.

value 값이 null이면 기본값이 출력되고 기본값이 없으면 빈 문자열이 출력된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:out value="Hello World" /><br>
<c:out value="${null}">JSTL</c:out><br>
<c:out value="Hello">World</c:out><br>
<c:out value="${null}" />
</body>
</html>
cs

 

 

실행 결과

 

 

<c:set> 태그

변수를 다룰때 사용한다.

이 태그로 생성한 변수는 JSP의 로컬 변수가 아니라 서블릿 보관소(JspContext, ServletRequest, HttpSession, ServletContext)에 저장된다.

 

<c:set var="변수명" value="값" scope="page(기본값)|request|session|application" />
<c:set var="변수명" scope="page(기본값)|request|session|application">값</c:set>

scope의 기본값은 page이다. 따라서 scope를 생략하면 JspContext에 저장된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%--<c:set> 기본 사용 방법--%>
<c:set var="username1" value="김연아" />
<c:set var="username2">박지성</c:set>
${username1}<br>
${username2}<br>
${pageScope.username1}<br>
${pageScope.username2}<br>
<p></p>
 
<%--보관소 지정(ServletRequest)--%>
<c:set var="username3" scope="request">마일리 사이러스</c:set>
${pageScope.username3}<br>
${requestScope.username3}<br>
<p></p>
 
<%--기존 값 덮어씀--%>
<% pageContext.setAttribute("username4""마고 로비"); %>
기존 username4 : ${username4}<br>
<c:set var="username4" value="레오나르도 디카프리오" />
변경 username4 : ${username4}<br>
cs

 

 

실행 결과

 

 

scope를 생략하면 기본적으로 JspContext(page)에 저장됨을 알 수 있다.

scope="request"와 같이 scope를 명시적으로 지정할수도 있다.

<c:set>으로 이미 존재하는 변수에 값을 할당할 경우 기존 값을 덮어쓴다.

 

<c:set>을 이용한 객체의 프로퍼티 값 설정

<c:set target="대상 객체" property="설정할 프로퍼티" value="프로퍼티 값" />

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%!
    public static class MyMember {
        int no;
        String name;
 
        public int getNo() {
            return no;
        }
 
        public void setNo(int no) {
            this.no = no;
        }
 
        public String getName() {
            return name;
        }
 
        public void setName(String name) {
            this.name = name;
        }
    }
%>
<%
    MyMember member = new MyMember();
    member.setNo(100);
    member.setName("김연아");
    pageContext.setAttribute("member", member);
%>
${member.name}<br>
<c:set target="${member}" property="name" value="박지성" />
${member.name}<br>
cs

 

 

 

실행 결과

 

 

Innter class MyMember의 인스턴스 member를 생성하고 member의 name을 <c:set> 태그를 사용해서 변경하는 코드이다.

<c:set>으로 객체의 프로퍼티 값을 설정할때는 setter()의 리턴 타입이 반드시 void여야 한다.

그렇지 않으면 다음과 같은 예외가 발생한다.

 

 

 

 

<c:remove> 태그

보관소에 저장된 값을 제거한다.

 

<c:remove var="변수명" scope="page(기본값) | request | session | application" />

 

<c:set>과 마찬가지로 scope 속성으로 보관소를 명시할 수 있고 보관소의 기본값은 page이다.

 

1
2
3
4
<% pageContext.setAttribute("username1""봉준호"); %>
${username1}<br>
<c:remove var="username1" />
${username1}<br>
cs

 

 

실행 결과

 

<c:remove> 사용 후 JspContext에서 username1의 값을 삭제해서 값이 출력되지 않는다.

 

<c:if> 태그

<c:if test="조건식" var="변수명" scope="page(기본값) | request | session | application">내용</c:if>

test의 조건식이 true이면 '내용'이 실행된다.

var, scope 속성은 test 결과를 저장할때 사용한다.

 

1
2
3
4
5
6
7
8
9
<c:if test="${10 > 20}" var="result1">
    10은 20보다 크다.<br>
</c:if>
result1 : ${result1}<br>
 
<c:if test="${10 < 20}" var="result2">
    20은 10보다 크다.<br>
</c:if>
result2 : ${result2}
cs

 

 

실행 결과

 

${10 > 20}은 false이므로 '10은 20보다 크다'는 출력되지 않는다.

${10 < 20}은 true이므로 '20은 10보다 크다'가 출력되었다.

 

<c:choose> 태그

자바의 switch-case와 같은 기능을 수행한다.

여러 조건에 따라 다른 작업을 할 필요가 있을때 사용한다.

 

<c:choose>
    <c:when test="조건식"></c:when>
    <c:when test="조건식"></c:when>
    ...
    <c:otherwise></c:when>
</c:choose>

<c:when> 태그는 한 개 이상 존재해야하며 <c:otherwise> 태그는 0개 혹은 1개가 올 수 있다.

<c:when>의 조건에 일치하지 않으면 <c:otherwise>가 실행된다.

 

1
2
3
4
5
6
7
8
9
<c:set var="userid" value="hello123" />
<c:choose>
    <c:when test="${userid == 'admin'}">
        관리자 페이지
    </c:when>
    <c:otherwise>
        ${userid}님 반갑습니다.
    </c:otherwise>
</c:choose>
cs

 

 

실행 결과

 

 

<c:forEach> 태그

반복 작업에 사용한다. 특히 목록에서 값을 꺼내서 처리할때 사용한다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

<c:forEach var="변수명" items="목록 데이터" begin="시작 인덱스" end="종료 인덱스">콘텐츠</c:forEach>

 

items에는 다음을 지정할 수 있다.

  • 배열
  • java.util.Collection 구현체(ArrayList, LinkedList, EnumSet, ...)
  • java.util.Iterator 구현체
  • java.util.Enumeration 구현체
  • java.util.Map 구현체
  • 콤마(,) 구분자로 나열된 문자열

 

var는 반복문을 돌면서 items에서 꺼낸 항목 값을 가리키는 참조 변수이다.

 

<c:forEach> - 배열

다음은 items에 배열을 지정한 forEach 예이다.

 

1
2
3
4
5
6
<% pageContext.setAttribute("numList"new String[]{"1""2""3""4""5"}); %>
<ul>
    <c:forEach var="num" items="${numList}">
        <li>${num}</li>
    </c:forEach>
</ul>
cs

 

 

실행 결과

 

 

다음과 같이 시작 인덱스와 종료 인덱스를 지정할 수 있다.

 

1
2
3
4
5
6
<% pageContext.setAttribute("numList"new String[]{"1""2""3""4""5"}); %>
<ul>
    <c:forEach var="num" items="${numList}" begin="1" end="3">
        <li>${num}</li>
    </c:forEach>
</ul>
cs

 

 

실행 결과

 

 

<c:forEach> - ArrayList

다음은 items에 ArrayList를 지정한 forEach 예이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%
    List<String> fruits = new ArrayList<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("pineapple");
    fruits.add("kiwi");
    fruits.add("melon");
    pageContext.setAttribute("fruits", fruits);
%>
<ul>
    <c:forEach var="fruit" items="${fruits}">
        <li>${fruit}</li>
    </c:forEach>
</ul>
cs

 

 

실행 결과

 

 

<c:forEach> - 문자열

다음은 콤마(,)로 연결된 문자열에 대한 forEach 예제이다.

 

1
2
3
4
5
6
<% pageContext.setAttribute("maleActors""리버 피닉스, 장동윤, 차인표, 남궁민, 공유"); %>
<ul>
    <c:forEach var="name" items="${maleActors}">
        <li>${name}</li>
    </c:forEach>
</ul>
cs

 

 

실행 결과

 

 

<c:forEach> - 횟수 반복

items 지정 없이 begin과 end 속성을 사용해서 일정 횟수 반복할 수 있다.

 

1
2
3
4
5
<ul>
    <c:forEach var="no" begin="1" end="10">
        <li>forEach 예제 ${no}</li>
    </c:forEach>
</ul>
cs

 

 

실행 결과

 

 

<c:forTokens> 태그

문자열을 delimiter(구분자)로 분리해서 반복문을 돌리는데 사용한다.

 

<c:forTokens var="변수명" items="문자열" delims="구분자">콘텐츠</c:forTokens>

 

1
2
3
4
5
6
<% pageContext.setAttribute("tokens""v1=20&v2=20&op=+"); %>
<ul>
    <c:forTokens var="item" items="${tokens}" delims="&">
        <li>${item}</li>
    </c:forTokens>
</ul>
cs

 

 

실행 결과

 

 

<c:url> 태그

URL을 만들때 사용한다.

이 태그를 사용하면 매개변수를 포함한 URL을 쉽게 만들 수 있다.

 

<c:url var="변수명" value="url">
    <c:param name="파라미터명" value="값" />
    <c:param name="파라미터명" value="값" />
    <c:param name="파라미터명" value="값" />
</c:url>

 

1
2
3
4
5
6
<c:url var="calcUrl" value="http://localhost:8080/calc">
    <c:param name="v1" value="10" />
    <c:param name="v2" value="20" />
    <c:param name="op" value="+" />
</c:url>
${calcUrl}
cs

 

 

실행 결과

 

 

<c:import> 태그

url 속성에 콘텐츠가 있는 주소를 지정하면 해당 주소로 요청하고 응답 결과를 받아서 반환한다.

 

<c:import url="url" var="변수명" scope="page(기본값) | request | session | application" />

 

다음은 url에 로또 800회차 당첨 결과를 JSON으로 반환받은 결과를 출력하는 예제이다.

1
2
3
<textarea rows="10" cols="80">
    <c:import url="https://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=800" />
</textarea>
cs

 

 

실행 결과

 

 

var, scope 속성을 사용해서 보관소에 저장했다가 출력할 수 있다.

 

1
2
3
4
<c:import var="lottoResult" url="https://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo=800" />
<textarea rows="10" cols="80">
    ${lottoResult}
</textarea>
cs

 

실행 결과는 위와 동일하다.

이렇게 보관소에 저장해두면 필요할때마다 가져와서 쓰거나 결과 데이터를 변환하는 등의 작업을 할 수 있다.

 

<c:redirect> 태그

리다이렉트 처리를 할때 사용한다. 내부적으로 HttpServletResponse의 sendRedirect()를 호출한다.

 

<c:redirect url="url" />

 

<fmt:parseDate> 태그

날짜 형식으로 작성된 문자열로 java.util.Date 객체를 생성한다.

그리고 지정된 보관소에 저장한다.

 

<fmt:parseDate var="변수명" value="날짜 형식 문자열" pattern="패턴" scope="page(기본값) | request | session | application" />

 

1
<fmt:parseDate var="date1" value="2020-02-15" pattern="yyyy-MM-dd" />
cs

 

<fmt:formatDate> 태그

날짜 객체로부터 원하는 형식으로 날짜를 표현하고자 할때 사용한다.

 

<fmt:formatDate value="java.util.Date 객체 지정" pattern="패턴" />

 

1
2
<fmt:parseDate var="date1" value="2020-02-15" pattern="yyyy-MM-dd" />
<fmt:formatDate value="${date1}" pattern="MM/dd/yy" />
cs

 

 

실행 결과

 

 

[출처] https://atoz-develop.tistory.com/entry/JSP-JSTL-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%A3%BC%EC%9A%94-%ED%83%9C%EA%B7%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
186 [Java Web programming] Spring boot(백엔드)와 React.js(프론트엔드)의 만남 - 프론트엔드 졸리운_곰 2021.08.29 138
185 [java][spring][mybatis] [MyBatis] resultType에 넣을 수 있는 값 정리 졸리운_곰 2021.08.17 341
184 [Java Spring web programming][자바 웹 개발] 10+ Free Open Source Projects Using Spring Boot file 졸리운_곰 2021.08.12 76
183 [java 웹 프로그래밍] Spring boot - Thymeleaf 기본 문법 졸리운_곰 2021.08.11 61
182 [Java 웹 프로그래밍] Tutorial: Thymeleaf + Spring file 졸리운_곰 2021.08.10 46
181 [java][spring boot][gradle] GitHub에서 스프링 부트 & Gradle 프로젝트 Import 하기! file 졸리운_곰 2021.08.05 116
180 [java, spring] Get HTTP POST Body in Spring Boot with @RequestBody 졸리운_곰 2021.06.18 55
179 [Java, jsp, jstl] [JSTL] Functions Tag - fn:contains() 사용하기 졸리운_곰 2021.06.09 80
178 [Java, jsp, jstl] [JSTL] List 갯수(size) 구하기 졸리운_곰 2021.06.02 237
177 [java, jsp, jstl] JSTL에서 변수두개사용하기 : jsp jstl list<> 두개를 졸리운_곰 2021.06.02 187
176 [Java Web, JSTL] 반복문 <c:forEach>, <c:forTokens> 졸리운_곰 2021.05.27 66
175 [Java Web] 조건문 <c:if>, <c:choose>, <c:when>, <c:otherwise> 졸리운_곰 2021.05.26 157
174 [java, web dev] forEach를 이용해서 JSTL로 출력하기 졸리운_곰 2021.05.24 102
173 [Java, Web dev] JSTL문법 <c:forEach> c:tag를 이용한 리스트 출력 file 졸리운_곰 2021.05.24 99
172 [Java][Web][Spring] vo 여러개 전달하기. LIST<VO> vo를 list 로 넘기기 / 받기 졸리운_곰 2021.05.20 1974
171 [java web dev, spring, freemaker] freemarker (개념, jsp와 차이, 문법, spring과 연동 설정, 예제) file 졸리운_곰 2021.05.17 72
170 [java web spring] [Spring] web.xml - Filter url 제외시키기 졸리운_곰 2021.05.14 200
169 [Java Web Srping mvc] Spring MVC - home.jsp의 동작원리 file 졸리운_곰 2021.05.14 65
168 [java, web, jsp] Servlet/JSP에서 Ajax 사용 file 졸리운_곰 2021.05.13 478
» [java][JAVA WEB] [JSP] JSTL 사용 방법 - 주요 태그 문법 정리 . file 졸리운_곰 2021.04.22 87
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED