2022. 6. 29. 11:48ㆍJAVA/Servlet&JSP
1. 코어 태그
코어 태그 라이브러리는 if-else나 변수의 지정 등과 같이 논리적인 처리를 위해 사용되는 스크립트 코드를 대체하기 위한 태그를 제공합니다.
코어 태그 라이브러리
기능 분류 | 태그 | 설명 |
변수지원 | set | JSP에서 사용될 변수를 설정 |
remove | 설정한 변수를 제거 | |
흐름제어 | if | 조건에 따라 내부 코드를 수행 |
choose | 다중 조건을 처리할 때 사용 | |
forEach | 컬렉션이나 Map의 각 항목을 처리할 때 사용함 | |
forTokens | 구분자로 분리된 각각의 토큰을 처리할 때 사용됨 | |
URL 처리 | import | URL을 사용하여 다른 자원의 결과를 삽입 |
redirect | 지정한 경로로 리다이렉트 | |
url | URL을 재작성 | |
기타 태그 | catch | 예외 처리에 사용됨 |
out | JspWriter에 내용을 알맞게 처리한 후 출력함 |
코어 태그 라이브러리 정의
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
위 정의에서 prefix 속성에 명시된 "c"값은 코어 태그 라이브러리를 호출할때 사용할 접두어를 의미합니다.
1.1 변수 지원 태그
변수지원 태그는 JSTL이 지원하는 태그에서 사용할 수 있는 변수를 설정하기 위해 사용됩니다.
- set 태그
- remove 태그
set 태그 형식
<c:set var="varName" value="someValue" scope="session"/>
- var : 값을 지정할 변수의 이름
- value : 변수의 값을 지정합니다. 표현식이나 EL을 사용하여 값을 지정할 수 있습니다.
- scope : 변수를 저장할 영역을 지정합니다. 값은 page, request, session, application 중의 하나가 옵니다.
remove 태그 형식
<c:remove var="varName" scope="request"/>
다음 예제는 set 태그를 사용하여 변수에 이름을 저장하고 출력하는 예제입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>set태그와 remove태그</title>
</head>
<body>
<c:set var="name" value="김용환" scope="request"/>
<p>제 이름은 ${name}입니다</p>
<c:remove var="name" scope="request"/>
<p>제 이름은 ${name}입니다</p>
</body>
</html>
위 실행결과를 통하여 name이라는 변수에 이름을 저장하고 출력하였습니다. 그리고 remove 태그를 사용하여 name 변수를 제거하고 다시 출력하니 이름 부분이 공백이 나온것을 볼 수 있습니다.
1.2 흐름 제어 태그
- if 태그
- choose 태그
- forEach 태그
- forTokens 태그
1.2.1 if 태그
if 태그는 이름에서 알 수 있듯이 자바 언어의 if 블록과 비슷한 기능을 제공합니다. 중첩된 if-else 블록과 같은 효과를 낼수는 없지만 단순한 if 블록을 쉽게 대체할 수 있기 때문에 많이 사용되는 JSTL 태그중의 하나입니다.
<c:if test="조건">
...
</c:if>
if 태그에 사용될 수 있는 속성
- test : 필수 속성으로 속성값으로 EL 비교식을 가집니다.
- var : 조건 결과를 저장할 변수를 지정합니다.
- scope : 조건 결과를 저장할 변수의 저장 scope를 지정합니다.
<c:if test="${name eq '김용환'}" var="result" scope="session">
</c:if>
test 속성에 사용될 비교 연산자
eq(==) : 문자열 또는 숫자가 같으면 참입니다. null 또는 빈 문자열 인지도 확인할 수 있습니다.
<c:if test="${name == '홍길동'}">
<c:if test="${name eq '홍길동'}">
<c:if test="${name == null}">
<c:if test="${name eq null}">
<c:if test="${num == 5}">
<c:if test="${num eq 5}">
ne(!=) : 문자열 또는 숫자가 다르면 참입니다.
<c:if test="${name != '홍길동'}">
<c:if test="${name ne '홍길동'}">
<c:if test="${num != 5}">
<c:if test="${num ne 5}">
empty : List 또는 배열이 비어있거나, 문자열이 null 또는 빈 문자열이면 참을 반환합니다. 숫자 0은 eq(==)로 비교해야 합니다.
<c:if test="${empty name}">
not empty : List 또는 배열이 비어 있지 않을 경우, 문자열이 값이 있을 경우 참을 반환합니다.
<c:if test="${not empty name}">
논리연산자
비교연산자의 조합으로 논리 연산을 할 수 있는 논리연산자입니다.
and(&&) : 모두 참일때 참이 됩니다.
<c:if test="${a > b and c < d}">
<c:if test="${a > b && c < d}">
or(||) : 둘중 하나라도 참이면 참이 됩니다.
<c:if test="${a > b or c < d}">
<c:if test="${a > b || c < d}">
not(!) : 논리 연산자 결과를 반전시킵니다.
<c:if test="${not a == ''}">
<c:if test="${! a == ''}">
다음은 비교연산자와 비교 연산자를 사용한 예제입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>if 태그</title>
</head>
<body>
<c:set var="name" value="김용환" scope="request"/>
<!-- eq(==) -->
<c:if test="${name eq '김용환'}">
<p>name eq '김용환' = true</p>
</c:if>
<c:if test="${name == '김용환'}">
<p>name == '김용환' = true</p>
</c:if>
<!-- ne(!=) -->
<c:if test="${name ne '홍길동'}">
<p>name ne '홍길동' = true</p>
</c:if>
<c:if test="${name != '홍길동'}">
<p>name != '홍길동' = true</p>
</c:if>
<!-- empty -->
<c:if test="${empty name}">
<p>empty name = true</p>
</c:if>
<!-- not empty -->
<c:if test="${not empty name}">
<p>not empty name = true</p>
</c:if>
<!-- and(&&) -->
<c:if test="${1 > 0 and 2 > 1}">
<p>1 > 0 and 2 > 1 = true</p>
</c:if>
<c:if test="${1 > 0 && 2 > 1}">
<p>1 > 0 and 2 > 1 = true</p>
</c:if>
<!-- or(||) -->
<c:if test="${1 > 0 or 2 < 1}">
<p>1 > 0 or 2 < 1 = true</p>
</c:if>
<c:if test="${1 > 0 || 2 < 1}">
<p>1 > 0 or 2 < 1 = true</p>
</c:if>
<!-- not(!) -->
<c:if test="${not (1 < 0)}">
<p>!(1 < 0) = true</p>
</c:if>
<c:if test="${!(1 < 0)}">
<p>!(1 < 0) = true</p>
</c:if>
</body>
</html>
1.2.2 choose 태그
choose 태그는 자바의 switch 구문과 if-else 블록을 혼합한 형태로서 다수의 조건문을 하나의 블록에서 수행하고자 할때 사용됩니다.
<c:choose>
<c:when test="${member.level == 'trial'}">
...
</c:when>
<c:when test="${member.level == 'regular'}">
...
</c:when>
<c:when test="${member.level == 'provider'}">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
각각의 when 태그는 test 속성의 결과값이 true일 경우 내부 블록을 수행합니다. 만약 모든 when 태그가 false인경우 otherwise 태그가 수행됩니다.
다음 예제는 choose 태그를 사용한 예제입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Choose 태그</title>
</head>
<body>
<c:choose>
<c:when test="${param.name == 'bk'}">
<p>당신의 이름은 ${param.name}입니다.</p>
</c:when>
<c:when test="${param.age >= 18}">
<p>당신은 18세 이상입니다.</p>
</c:when>
<c:otherwise>
<p>당신은 'bk'가 아니고 18세 이상이 아닙니다.</p>
</c:otherwise>
</c:choose>
</body>
</html>
1.2.3 forEach 태그
forEach 태그는 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용할 수 있는 태그로서, 자바의 for, do-while 등을 대신해서 사용할 수 있는 태그입니다.
<c:forEach var="변수" items="아이템">
<p>${변수}</p>
</c:forEach>
begin, end 속성을 사용한 forEach 태그
- begin : 반복문의 시작 범위
- end : 반복문의 종료 범위
<c:forEach var="i" begin="1" end="10">
${i} 사용
</c:forEach>
step 속성을 사용한 forEach 태그
- step : 반복문이 반복 될 때마다 var 속성의 값을 step 속성값만큼 증가시킴
<c:forEach var="i" begin="1" end="10" step="2">
${i}
</c:forEach>
변수 i는 1, 3, 5 , 7, 9의 값을 가지게 될 것입니다.
items, begin, end 속성을 함께 사용한 forEach 태그
items 속성과 함께 begin, end 속성을 사용하면 참조할 변수의 개수를 제한할 수 있습니다. 예를 들어 items="정수형 배열", begin = "2", end ="4"라면 해당 forEach 태그는 정수형 배열의 2번 인덱스부터 4번 인덱스까지만 값을 참고합니다.
<c:forEach var="i" items="${intArray}" begin="2" end="4">
${i}
</c:forEach>
해시맵을 참조하는 forEach 태그
<%
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("김용환", 30);
map.put("홍길동", 50);
map.put("이성룡", 70);
%>
<c:set var="map" value="<%=map%>"/>
<c:forEach var="i" items="${map}">
${i.key} = ${i.value}<br>
</c:forEach>
1.2.4 forTokens 태그
forTokens 태그는 java.util.StringTokenizer 클래스와 같은 기능을 제공하는 태그입니다.
<c:forTokens var="token" items="문자열" delims="구분자">
${token}
</c:forTokens>
다음은 forTokens 태그를 사용한 예제입니다.
<!-- 콤마를 구분자로 사용한 forTokens 태그 -->
<c:forTokens var="token" items="빨강색, 주황색, 노란색, 초록색, 파랑색, 남색, 보라색" delims=",">
${token}
</c:forTokens>
References
source code : https://github.com/yonghwankim-dev/JSP2.0
JSP 2.0 프로그래밍 기초부터 중급까지
JSTL - <c:if>, <c:choose> 태그 사용법
'JAVA > Servlet&JSP' 카테고리의 다른 글
[JSP] 15. JSTL(JSP Standard Tag Library) #2 코어 태그(import, url, redirect, out, catch) (0) | 2022.06.29 |
---|---|
[JSP] 15. JSTL(JSP Standard Tag Library) #1 JSTL이란 무엇인가? (0) | 2022.06.29 |
[Java][Servlet] Servlet & JSP의 MVC 패턴 (0) | 2022.05.23 |
[Tomcat] Tomcat, JSP, Servlet 개념 및 구조 (0) | 2022.05.23 |
[JSP] 14. 표현 언어(Expression Language) (0) | 2022.04.28 |