JSTL(Java Standard Tag Library)
1.JSTL(Java Standard Tag Library)
:JSTL은 JSP에서 제공하는 태그 라이브러리로 JSP를 반복문,조건문 등 다양한 작업을 더욱 쉽게 처리할 수 있는 기능을 제공한다.
<%@ taglib uri="사용할 태그의 라이브러리 URI" prefix="접두사" %>
JSTL을 사용하기 위해선 위와 같은 태그 라이버리를 적어줘야한다. <%@ taglib%>는 JSP의 지시자 태그이고 URI 속성은 태그 라이브러리의 네임스페이스 이름이다. 네임스페이스 이름은 URI로 되어있다. prefix 속성은 JSTL 태그를 사용할 때 태그 이름 앞에 붙일 접두사다.
- 태그 라이브러리와 URI, 접두사
2.JSTL의 주요 태그
2.1 c:out
: 출력문을 만드는 태그다.
- 예시
1.<c:out value="안녕하세요!"/><br>
2.<c:out value="${null}">반갑습니다.</c:out><br>
3.<c:out value="안녕하세요!">반갑습니다.</c:out><br>
4.<c:out value="${null}"/><br>
실행결과
1.안녕하세요!
2.반갑습니다.
3.안녕하세요!
4.
2.2 c:set
:변수를 선언하는 태그다.
- 문법
<!-- scope 속성은 선택적이며 page로 기본 설정되어 있다. -->
<c:set var="변수명" value="할당된 값" scope="변수의 유효 범위 page|request|session|application" />
- 예시
<c:set var="country" value="Korea" />
<c:set var="intArray" value="<%=new int[] {1,2,3,4,5} %>" />
2.3 c:remove
:보관소에 저장된 값을 제거하는 태그다.
- 문법
<!-- scope 속성은 선택적이며 page로 기본 설정되어 있다. -->
<c:remove var="변수명" scope="page | request | session | application"/>
- 예시
<h3> 보관소에 저장된 값 제거</h3>
<% pageContext.setAttribute("username1", "홍길동"); %>
① ${username1}<br>
<c:remove var="username1"/>
② ${username1}<br>
실행결과
보관소에 저장된 값 제거
①홍길동
②
2.4 c:if
: 조건문을 나타내는 태그다. 조건문 if와 동일하지만, else구문이 없다.
- 문법
<c:if test="조건" var="변수명" scope=" page | request | session | application"> 콘텐츠 </c:if>
- 예시
<c:if test="$(10 > 20)" var="result1">
①10은 20보다 크다.<br>
</c:if>
②${result1}<br>
<c:if test="${10 < 20}" var="result2">
③10은 20보다 크다.<br>
</c:if>
④${result2}<br>
실행결과
② false
③ 10은 20보다 크다.
④ true
간단한 사용예시
<c:set var="login" value="true" />
<c:if test="${!login}"> <p><a href="/login.ok">로그인</a></p></c:if>
<c:if test="${login}"> <p><a href="/logout.ok">로그아웃</a></p></c:if>
2.5 c:choose, c:when, c:otherwise
:자바의 switch, case 등과 같은 기능을 수행한다. 여러가지 조건에 따라 다른 작업을 해야 할 필요가 있을 때 사용한다.
- 문법
<c:choose>
<c:when test="참거짓 값"></c:when>
<c:when test="참거짓 값"></c:when>
...
<c:otherwise></otherwise>
</c:choose>
2.6 c:forEach
:반족적인 작업을 정의하는 태그다.
- 문법
<c:forEach var="변수명" items="목록데이터" begin="시작인덱스" end="종료인덱스"> 콘텐츠 </c:forEach>
item 속성값으로 오는 값들
배열
java.util.Collection 구현체.
java.util.Iterator 구현체
java.util.Enumeration 구현체
java.util.Map 구현체
콤마(,) 구분자로 나열된 문자열.
- 예시
기본예제
<% pageContext.setAttribute("nameList", new String[]{"홍길동", "임꺽정", "일지매"}); %>
<ul>
<c:forEach var="name" items="${nameList}>
<li>${name}</li>
</c:forEach>
</ul>
실행결과
홍길동
임꺽정
일지매
<% pageContext.setAttribute("nameList2", new String[] {"홍길동", "임꺽정", "일지매", "주먹대장", "똘이장군"}); %>
<ul>
<c:forEach var="name" items="${nameList2}" begin="2" end="3">
<li>${name}</li>
</c:forEach>
</ul>
실행결과
일지매
주먹대장
<!-- 정수 범위내의 반복 Syntax -->
<c:forEach var="name" varStatus="name"
begin="expression" end="expression" step="expression">
body content
</c:forEach>
<!-- 컬렉션 범위내의 반복 Syntax -->
<c:forEach var="name" items="expression" varStatus="name"
begin="expression" end="expression " step="expression">
body content
</c:forEach>
<!-- forEach 정수 범위내의 반복 -->
<c:forEach var="i" begin="0" end="10" step="2" varStatus="x">
<p> i = ${i}, i*i = ${i * i} <c:if test="${x.last}">, last = ${i}</c:if> </p>
</c:forEach>
<!-- forEach 컬렉션 범위내의 반복 -->
<%
java.util.List list = new java.util.ArrayList();
java.util.Map map = new java.util.HashMap();
map.put("color","red");
list.add(map);
map = new java.util.HashMap();
map.put("color","blue");
list.add(map);
map = new java.util.HashMap();
map.put("color","green");
list.add(map);
request.setAttribute("list", list);
%>
<c:forEach var="map" items="${list}" varStatus="x">
<p> map(${x.index}) = ${map.color} </p>
</c:forEach>
2.7 c:url
:URL을 생성해주는 기능을 한다. URL을 생성하면서 contextPath를 자동으로 생성한다. 그래서 contextPath가 달라져도 URL을 수정할 필요가 없다.
- contextPath 자동 생성의 의미
url의 주소가 처음에는 </변경전/board/list?bno=이하 생략>이였다. c:url을 사용하지 않으면 contextPath가 변경이될 때 모든 주소를 매번 수정해줘야 했다. 하지만 context 뒤의 정보들을 고정함으로써 이러한 수고를 없앴다.
- c:url 태그를 쓰는 이유
context path를 자동으로 포함시키므로 서버 소스를 수정함에 따른 변화를 자동으로 적용해준다. 클라이언트의 브라우져가 쿠키사용을 금지하면 로그인 유지가 힘들어진다. 이 때 세션을 유지하기위해 링크 뒤에 특정값(sessionId)을 부여해줘서 로그인을 유지해준다.
- 문법
<c:url var="변수이름" value="url경로" var="변수명" scope="영역"/>
- 예시
<c:url value='/board/list?bno=${board.bno}&page=${board.page}%pageSize=${board.pageSize}'/>
출처
MVC아키틱처, 마이바티스, 스프링으로 만드는 실무형 개발자 로드맵 자바 웹 개발 워크북(저자: 엄진영, 출판사:프리렉)
구루비 Dev스터디 JSTL의 이해 및 실습
Comments