프로그래밍/Servlet&JPS

12 Servelt & JSP : JSTL _ Core Tage

pupu91 2022. 8. 25. 18:59
반응형

 

JSTL(JSP Standard Tag Library)

JSP에서 사용하는 커스텀 태그

공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공한 것

라이브러리 등록 후 사용 가능 

 

 

 

선언방식(사용하고자 하는 jsp 파일에 선언) 

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

사용 예시 

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

        <c:out value="${ 'java' }"/>

 

 

 

JSTL 태그 종류

Core Tags , Formatting Tage, Function 

 


 

Core Tags 

태그이름  설명 선언방식 종류
Core Tags 변수와 url, 조건문, 반목문 등의
로직과 관련된 JSTL 문법 제공
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:set> ,<c:remove>
<c:out>,<c:if>
<c:choose>, <c:forEach>
<c:forTokens>, <c:url>

 

 

 

1 . <c: set>

변수를 선언하고 그 변수에 초기값을 대입하는 기능
변수 타입은 별도로 선언 하지 않음

초기값은 반드시 기술해야 함

선언한 변수는 EL 식 안에서 사용가능

스크립트릿 요소에서는 사용 불가

 

 

- 변수 선언

선언 방식
<c:set var="변수명" value="초기값/>

scope 속성을 생략하면 기본적으로는 pageScope에 저장 됨
<c:set var="num1" value="100" scope="session"/>
<c:set var="num2" value="200" scope="session"/>

스크립트릿 요소에서 사용 불가
<%int sum = num1 + num2; %>

EL에서 사용 가능
<c:set var="sum" value="${ num1 + num2 }"/>

화면상에 출력
${ num1 } + ${ num2 } = ${ sum }
=> 100 + 200 = 300 로 출력됨

스크립팅 요소에서 선언 된 변수는 EL이나 스크립팅 요소로 사용 가능
EL을 활용하기 위해서는 스크립팅 요소를 value 속성으로 지정한 c:set 태그가 필요
<% int num3 = 10, num4 = 20; %>
${num3} + ${ num4 } =${ num3 + num4 }
=> 값이 없는 걸로 출력

value 속성으로 지정하면 출력 가능
<c:set var="sum2" value="<%= num3 + num4 %>"/>
num3 + num4 = ${sum2}
=> num3 + num4 = 30

 

 

 

 - 배열 또는 컬렉션으로 사용할 문자열 선언

(1) 태그 내부에 벨류 값 입력
<c:set var="colors">
	red, yellow, green, orange, blue, megenta
</c:set>

화면 출력
color 배열 값 확인 : ${ colors } 
=> color 배열 값 확인 : red, yellow, green, orange, blue, megenta


(2) 자바스크립트에서 EL 사용
<script>
	
    window.onload = function(){
    	let colors = '${ colors }'.split(",");
        console.log(colors);
    }
</script>

 

 

2 . <c:remove>

: 변수 삭제 기능 태그 

변수 선언
<c:set var="num1" value="100" scope="session"/> 
<c:set var="num2" value="200" scope="session"/>

화면 출력
num1 변수 값 : ${ num1 }
num2 변수 값 : ${ num2 }
=> num1 변수 값 : 100
   num2 변수 값 : 200

변수 삭제
<c:remove var="num1" scope="session"/>

화면 출력
num1 변수 값 : ${ num1 }
=> num1 변수 값 :

scope 미지정시 모든 scope의 동일 이름의 변수 제거
<c:remove var="num2"/> 

화면 출력
num2 변수 값 : ${ num2 }
=> num2 변수 값 :

 

 

 

 

 

3. <c:out> 

   : 값을 출력할 때 사용하는 태그

     <, >, & 특수 문자를 자동으로 이스케이프 시뭔스로 바꿔 줌

 

출력할 데이터에 포함된 특수 문자를 태그의 일부로 인식시키고 싶을 경우
escapeXml을 false로 지정
<c:out value="<h2>데이터 출력</h2>" escapeXml="false"/><br>
=> 데이터 출력

true로 지정하면 문자로 인식
<c:out value="<h2>데이터 출력</h2>" escapeXml="true"/><br>
=> <h2>데이터 출력<h2>
   웹 브라우저가 해석하지 않고 기술한 대로 화면에 나타남

기본 값은 true임
<c:out value="<h2>데이터 출력</h2>"/>
=> <h2>데이터 출력<h2>

EL로 가져오는 값이 없는 경우 대체할 값 설정
<c:out value="${ param.name }" default="아무개님"/>
=> 아무개님

 

 

 

 

4. <c:if>

  : 조건식 태그

   test 속성에 조건식을 기술

    조건식은 반드시 EL 형식으로 기술

변수 선언
<c:set var="value1" value="9" scope="page"/>
<c:set var="value2" value="3" scope="page"/>

<c:if test="${ value1 >= value2 }">
  <h3>value1이 큽니다 : ${ value1 }</h3>
</c:if>
=> value1이 큽니다 : 9
    
<c:if test="${ value1 < value2 }">
  <h3>value2이 큽니다 : ${ value2 }</h3>
</c:if>
=> test 결과가 false이기 때문에 화면에 보여지지 않음

 

 

 

 

 

5. <c:choose>

  : 자바의 switch 문과 비슷한 역할

    <c:when>, <c:oterwise> 태그와 함께 사용

변수 선언
<c:set var="no" value="${ param.no }"/>

<c:choose>
	<c:when test="${ no == 1 }"> switch의 case
		<h3>안녕하세요</h3>
	</c:when>
	<c:when test="${ no eq 2 }">
		<h3>반갑습니다.</h3>
	</c:when>
	<c:otherwise> switch의 default
		<h3>환영합니다.</h3>
	</c:otherwise>
</c:choose>

=> http://localhost:8000/chap13/views/jstl/testJstlCore?no=1 이면 안녕하세요 출력
   http://localhost:8000/chap13/views/jstl/testJstlCore?no=2 이면 반갑습니다 출력
   아무 조건도 만족하지 못할 경우 환영합니다 출력

 

 

 

 

 

6.<c:forEach> 

   : 자바의 for, for-in문에 해당하는 기능을 제공

속성 기능
items 반복할 객체 명(Collection 객체)
begin 반복이 시작할 요소 번호
end 반복이 끝나는 요소 번호
step 증가값
var 현재 반복 횟수에 해당하는 변수의 이름
varState 현재 반복에 해당하는 객체의 요소

 

- <c:forEach> 사용

<c:forEach begin="1" end="3">
  반복 실행 
</c:forEach>
=> 반복 실행
   반복 실행
   반복 실행

 

출력 화면

 

 

- 변수를 다루고 싶을 때

<c:forEach var="size" begin="1" end="7" step="2">
  <font size="${ size }"> 글자크기 ${ size }</font>
</c:forEach>

출력 화면

 

 

 

 

 

- 배열 또는 컬렉션 연속 처리에 for-each문처럼 사용

: varStatus를 통해 상태를 관리
  current (현재 요소), index (제로 기반 인덱스), count (1 기반 인덱스)

<c:forEach var="color" items="${ colors }" varStatus="st">
	<font color="${ color }">
		${ st.count } : 글자색 ${ color }<br>
		${ st.index }, ${ st.current }<br>
	</font>
</c:forEach>

출력 화면

 

 

 

 

 

7. <c:forTokens>

   : 문자열을 토큰으로 분리 처리 할 때 사용

     items 속성에는 토큰을 포함하는 문자열 지정

     dleims 속성에는 토큰을 분리하는데 사용할 구획 문자 기술

<ul>
	<c:forTokens items="yellow blue pink red green" delims=" " var="color">
		<li>${ color }</li>
		
	</c:forTokens>
</ul>
    
여러 개의 토큰 문자를 가지고 분리 처리 할 수도 있다
<ul>
	<c:forTokens items="yellow-blue*pink/red green" delims="/*- " var="color">
		<li>${ color }</li>		
	</c:forTokens>
</ul>

 

 

 

8.<c:url >

  : url 경로를 생성하고 해당 url의 param 속성을 선언하여 쿼리스트링을 정의 할 수 있음

    해당 태그를 통행 url 경로와 관련 쿼리스트링의 값을 미리 설정하여 이를 제어할 수 있음

값을 링크로 넣음
<c:url var="fmtlink" value="testJstlCorResult.jsp">
	
    링크에 대한 파라미터 설정
	<c:param name="num" value="77"/> 

</c:url>
	
<a href="${ fmtlink }"> 결과 화면 연결~</a>

 

화면에 출력되 해당 링크 클릭

 

<c:url >로 설정한 주소로 변경

 

반응형