JSTL(Jsp Standard Tag Library)

김덕근·2023년 3월 21일
0

JSP

목록 보기
4/6

JSTL(Jsp Standard Tag Library)

JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를 표기법을 간단히 태그화 하여 표준으로 제공하는 것.

(if, for, 배열/컬렉션 길이, 문자열 치환, 숫자 데이터 형식 변경, 데이터 파싱, scope 변수 선언 등)


Apache Tomcat® > Taglibs >

webapp/WEB-INF/lib 폴더에 추가

Impl:
taglibs-standard-impl-1.2.5.jar (pgp, sha512)
Spec:
taglibs-standard-spec-1.2.5.jar (pgp, sha512)
EL:
taglibs-standard-jstlel-1.2.5.jar (pgp, sha512)
ojdbc11-21.7.0.0.jar (DB 연결 라이브러리)

(.jsp)

JSTL 사용을 위한 선언 방법
JSP 파일 최상단에 추가하고자 하는 JSTL taglib를 추가

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

prefix : 접두사
uri(Uniform Resource Identifier) : 자원을 구분하는 식별자(주소 형태)


1. 변수 선언 (c:set 태그)

  • 변수를 선언하고 값을 초기화 하는 태그
    (원하는 scope의 내장 객체에 값 세팅)

  • c:set 속성
    1) var : 변수명 (setAttribute의 key값)
    2) value : 대입될 값
    3) scope : 내장 객체 범위 (기본값 : page)

2. 변수 삭제(c:remove)

  • c:set / setAttribute() 로 추가된 값 제거

  • c:remove 속성
    1) var : 삭제할 변수명(key)
    2) scope : 삭제할 내장 객체 범위(기본값 : 모든 범위)

    	<c:set var="test" value="page" scope="page"/>
    	<c:set var="test" value="request" scope="request"/>
    	<c:set var="test" value="session" scope="session"/>
    	<c:set var="test" value="application" scope="application"/>
    	
    	<!-- 모든 범위 삭제 -->
    	<%-- <c:remove var="test"/> --%>
    	<c:remove var="test" scope="request"/>
    	
    	${pageScope.test} / ${requestScope.test}
    	/ ${sessionScope.test} / ${applicationScope.test}

3. 조건문 - if (c:if 태그)

  • 단독 if문(else 없음)
  • 주의 사항 *
    1) test 속성 값 작성은 무조건 EL 구문이여야만 한다.
    2) test 속성값 "" 안에는 공백이 존재해서는 안된다.
   <%-- scriptlet 작성법 --%>
	<% if(1 == 1) { %>
		출력됩니다.
	<% } %>
	
   	<%-- JSTL 작성법 --%>
   	<c:if test="${1 == 1}">
   		JSTL 작성법
   	</c:if>
    
    
    session 범위에 세팅된 test의 값이 "session"인 경우
    <%--
    	- 문자열 비교시 (==) 비교연산자 사용 가능
    	- 문자열임을 표기하는 리터럴 == ''(홑따옴표) / ""(쌍따옴표)
    	
     --%>
     <c:if test='${ sessionScope.test == "session" }'>
     	<h4>sessionScope.test == 'session'</h4>
     </c:if>

4. 조건문 - if ~ else if ~ else

( c:choose, c:when, c:otherwise )

	c:choose : when, otherwise를 감싸는 태그
				(현재 태그 내부에 if~else if~else를 작성하겠다)
	
	c:when : if/ else if를 나타내는 태그
			속성은 test 밖에 없음. (조건 작성 속성)
			
	c:otherwise : else를 나타내는 태그
				아무런 속성도 존재하지 않음.
                
                
<c:set var="temp2" value="150"/>

<c:choose>
	<c:when test="${temp2 > 100}">
		100보다 크다
	</c:when>
	<c:when test="${temp2 < 100}">
		100보다 작다
	</c:when>
	<c:otherwise>
		100과 같다.
	</c:otherwise>
</c:choose>

5. 반복문(c: forEach 태그)

	- 일반 for + 추가 기능
		
- 속성
1) var   : 현재 반복 횟수에 해당하는 변수 (int i)
2) begin : 반복 시 var 시작 값
3) end   : 반복이 종료될 var 값
4) step  : 반복 시 마다 var의 증가 값 (기본값 1)
		
5) items : 반복 접근한 객체(배열, 컬렉션 객체)
		
6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언
			
	varStatus="변수명"
	-> c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다.
		
	* varStatus에서 제공되는 값
	- current : 현재 반복 횟수(현재 var 값) 
			      		또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)
			      		
	- index : 현재 인덱스값 반환 (0부터 시작)
			
	- count : 현재 몇바퀴째인지 반복 횟수 반환 (1부터 시작)
			
	- first : 첫 번째 반복이면 true, 아니면 false
			
	- last : 마지막 반복이면 true, 아니면 false

<h3>일반 for문 + varStatus</h3>

<table border="1">
	<c:forEach var="n" begin="1" end="10" varStatus="vs">
		<c:choose>
		<%-- choose 내부에 무조건 JSP 주석만 작성 가능 --%>
			<%-- 첫번째 반복일 경우 --%>
			<c:when test="${vs.first}">
				<tr>
					<th class="first">${n}</th>
					<td class="first">${n}번 게시글 입니다.</td>
				</tr>
			</c:when>
			<%-- 마지막 반복일 경우 --%>
			<c:when test="${vs.last}">
				<tr>
					<th class="last">${n}</th>
					<td class="last">${n}번 게시글 입니다.</td>
				</tr>
			</c:when>
			
			<c:otherwise>
				<tr>
					<th>${n}</th>
					<td>${n}번 게시글 입니다.</td>
				</tr>
			</c:otherwise>
			
		</c:choose>
	</c:forEach>	
</table>

c:forEach 향상된 for문 처럼 사용하기
param.lang : 파라미터중에 lang의 값을 얻어와 출력
단, lang 이름의 파라미터가 여러개면 첫번째만 얻어옴

paramValues.lang : lang이라는 이름의 파라미터를 모두 얻어와 배열로 반환

<c:choose>
	<%-- 아무것도 체크하지 않은 경우 --%>
	<c:when test="${empty paramValues.lang}">
		<h1 style="color:orangered;">체크된 값이 없습니다.</h1>
	</c:when>
	
	<c:otherwise>
		<ul>
			<c:forEach var="chk" items="${paramValues.lang}" varStatus="vs">
				<li>
					index : ${vs.index} <br>
					count : ${vs.count} <br>
					current : ${vs.current} <br>
					first : ${vs.first} <br>
					last : ${vs.last} <br>
					체크된 값 : ${chk}
				</li>
			</c:forEach>
		</ul>
	</c:otherwise>
</c:choose>

객체배열 / 컬렉션 반복 접근하기

<table border="1">
	<c:forEach var="person" items="${requestScope.pList}">
		<tr>
			<th>${person.name}</th>
			<td>${person.age}</td>
			<td>${person.address}</td>
		</tr>
	</c:forEach>

</table>
profile
안녕하세요!

0개의 댓글