2020년 12월 23일 - 2

업데이트:


JSTL(JavaServer Pages Standard Tag Library)란?

자바 서버 페이지 표준 태그 라이브러리는 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다. JSTL은 JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법을 제공한다.1


  • 프로젝트 구성
    20201223_18

사전 설정(라이브러리 등록)

톰캣 다운로드
👆🏼 이미지 클릭 시 공식홈페이지로 이동

  • 파일 다운로드
    20201223_19

  • WEB-INF > lib에 저장
    20201223_20


index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL / JSTL</title>
</head>
<body>
	<h3>JSTP : 자바서버 페이지 표준 태그 라이브러리</h3>
	<hr>
	
	<h3>JSTL</h3>	
	<ul>
		<li><a href="views/03_jstl/01_jstl.jsp">01.JSTL - core(기초)</a></li>
		<li><a href="views/03_jstl/02_jstl_core_if.jsp">02.JSTL - core(if)</a></li>
		<li><a href="views/03_jstl/03_jstl_core_choose.jsp">03.JSTL - core(choose)</a></li>
		<li><a href="views/03_jstl/04_jstl_core_forEach.jsp">04.JSTL - core(forEach-1)</a></li>
		<li><a href="views/03_jstl/05_jstl_core_forEach2.jsp">05.JSTL - core(forEach-2)</a></li>
		<li><a href="views/03_jstl/06_jstl_core_forTokens.jsp">06.JSTL - core(forTokens)</a></li>
		<li><a href="views/03_jstl/07_jstl_core_url.jsp">07.JSTL - core(url)</a></li>
		<li><a href="views/03_jstl/08_jstl_core_redirect.jsp">08.JSTL - core(redirect)</a></li>
		
		<li><a href="views/03_jstl/09_jstl_fmt.jsp">09.JSTL - fmt</a></li>
		
		<li><a href="views/03_jstl/10_jstl_fn.jsp">10.JSTL - fn</a></li>
	</ul>
</body>
</html>



views(01_jstl.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<h2>JSTL이란?</h2>
	Jsp Standard Tag Library<br>
	JSP에서 사용하는 커스텀 태그로, <br>
	공통으로 사용하는 코드의 집합을 사용하기 쉽게<br> 
	태그화하여 표준으로 제공한 것을 말한다.

    <form action="01_jstl_core_basic.jsp">
		첫번째 수 : <input type="text" name="num1" /><br/>
		두번째 수 : <input type="text" name="num2" /><br/>
		<button type="submit">확인</button> 
	</form>
</body>
</html>



views(01_jstl_core_basic.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>    
<!-- 위의 구문을 작성하면 "c"를 사용할 수 있다 -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag</title>
</head>
<body>
	<h3>라이브러리 등록 방법</h3>
	1) https://tomcat.apache.org/download-taglibs.cgi 접속<br>
	2) Standard-1.2.5 -> jar files -> 3개  다운로드<br>
	3) WebContent/WEB-INF/lib 에 추가<br>
	
	<hr>
	
	<h3>JSTL 선언 방법</h3>
	<pre>
	JSTL을 사용 하고자하는 JSP 페이지의 상단
	 	page 지시자 아래에 taglib 지시자를 사용.
	 	
		&lt;%@ taglib prefix="사용하고자 하는 접두사" uri="tld 파일상의 uri"  %> 
		
		prefix : 접두사. 다른 태그와 구별할 수 있는 namespace를 제공함.
		uri : 실제 웹상주소가 아니라, 태그라이브러리를 나타내는 식별자임. 
			tlb파일상의 uri값을 가리키며,
			이 지시자를 통해 작성한 태그이름과 매칭되는 자바코드를 찾음. <br />

		* tld(Tag Library Descriptor) 파일 : 커스텀 태그 정보를 갖고 있는 라이브러리 파일.
		* uri : (Uniform Resource Identifier) : 자원을 나타내는 유일한 주소
	
	</pre>
	
	<hr>
	
	<h3>JSTL core Library</h3>
	
	
	<p>
		<h4>1. 변수의 선언 - &lt;c:set> </h4>
	
		<pre>
		
		- 변수를 선언하고 초기값을 대입하는 기능을 가진 태그
		- 변수를 선언할 때 scope를 지정할 수 있음. (기본값 page)
		
		- 사용법
		1) 변수 타입을 별도로 선언하지 않는다.
		2) c:set 태그
		3) c:set으로 선언된 변수는 EL 구문에서는 사용할 수 있지만
		   scriptlet 내에서는 사용할 수 없다.
		</pre>
		
		<c:set var="car" value="람보르기니" />
		
		<h3>${ car }</h3>
		<!-- 전달된 파라미터 두 개를 c:set을 이용하여 변수에 저장 -->
		<c:set var="n1" value="${ param.num1 }" />
		<c:set var="n2" value="${ param.num2 }" scope="request"/>
		<c:set var="result" value="${n1 * n2 }" scope="session" />
		
		${n1} * ${n2} = ${result} <br>
		${pageScope.n1} * ${requestScope.n2} = ${sessionScope.result} <br><%!  %>
		<!-- 정확하게 변수를 사용하는 방법  -->
		
	</p>	
	
	<hr>
	
	<p>
		<h4> 2. 변수의 삭제 - &lt;c:remove> </h4>
		
		<c:set var="result" value="9999" scope="request" />
		[삭제전] <br>
		request : ${ requestScope.result } <br>
		session : ${ sessionScope.result } <br>
		
		1)모든 스코프에서 삭제<br>
		<%-- <c:remove var="result" /> --%>
		
		2) 특정 스코프에서 삭제 <br>
		<c:remove var="result" scope="request" /> <!-- request만 삭제된다. -->
		[삭제후] <br>
		request : ${ requestScope.result } <br>
		session : ${ sessionScope.result } <br>
	</p>	   
	
	<hr>
	<p>
		<h4> 3. 변수의 출력 - &lt;c:out> </h4>
			&lt;c:out> 태그는 데이터를 출력할 때 사용하는 태그<br>
			&lt;, >, & 특수 문자를 자동으로 이스케이프 시퀀스(escape sequance)로 바꿔줌.<br>
		
		<pre>
		* 특수 문자 이스케이프 시퀀스(escape sequance)
		< &lt;
		> &gt;
		& &amp;
		</pre>
		
		<c:out value="<h4>c:out 테스트 중입니다.</h4>"/>
		<c:out value="<h4>c:out 테스트 중입니다.</h4>" escapeXml="false"/>
	</p>
</body>
</html>



결과

  • 초기화면
    20201223_21

  • 20201223_22

  • 20201223_23

  • 20201223_24




views(02_jstl_core_if.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(if)</title>
</head>
<body>
	<h3>&lt;c:if> 태그 </h3>
	- Java의 if 문과 비슷한 역할을 하는 태그.<br>
	- &lt;c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
		이 때 조건식은 반드시 EL 형식으로 기술

    <form action="02_jstl_core_ifEnd.jsp">
		첫번째 수 : <input type="text" name="num1" /><br/>
		두번째 수 : <input type="text" name="num2" /><br/>
		<button type="submit">확인</button> 
	</form>
</body>
</html>



views(02_jstl_core_ifEnd.jsp)

<%@ 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>JSTL - core tag(if)</title>
</head>
<body>
	<h3>&lt;c:if> 태그 </h3>
	- Java의 if 문과 비슷한 역할을 하는 태그.<br>
	- &lt;c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
		이 때 조건식은 반드시 EL 형식으로 기술
	 
	 
	<hr> 
	
	<c:set var="n1" value="${ param.num1 }" />
	<c:set var="n2" value="${ param.num2 }" />
	
	<%-- input 태그의 (파라미터) 문자열의 형태를 띄고 있으므로
		 문자열 크기 비교가 일어남
	 --%>
	<c:if test="${n1 > n2}">
		${n1}은 ${n2} 보다 더 큽니다. -> 문자열 비교 
	</c:if>
	 <br>
     <!-- n1, n2 형변환이 필요함 -->
	<c:if test="${Integer.parseInt(n1) > Integer.parseInt(n2)}">
		${n1}은 ${n2} 보다 더 큽니다. -> 숫자 비교
	</c:if>
	<br>
	<c:if test="${Integer.parseInt(n1) < Integer.parseInt(n2)}">
		${n1}은 ${n2} 보다 더 작다. -> 숫자 비교
	</c:if>
	<br>
	<c:if test="${Integer.parseInt(n1) == Integer.parseInt(n2)}">
		${n1}과 ${n2}는 같습니다. -> 숫자 비교
	</c:if>
</body>
</html>



결과

  • 초기화면
    20201223_21

  • 20201223_25

  • 20201223_26




views(03_jstl_core_choose.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(choose)</title>
</head>
<body>
	<h3>&lt;c:choose> 태그
   - Java의 if-else if-else, switch 문과 비슷한 역할을 하는 태그.
   - &lt;c:when>, &lt;c:otherwise> 태그와 함께 사용되는데,
   각각 switch 문의 case, default 절과 비슷한 역할을 함.
   
	 <form name="genderFrm" action="03_jstl_core_chooseEnd.jsp">
        <h2>경품뽑기</h2>
       		숫자를 입력하세요 : <input type="number" name="num1"><br>
        <button type="submit">확인</button> 
    </form>
</body>
</html>



views(03_jstl_core_chooseEnd.jsp)

<%@ 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>JSTL - core tag(choose)</title>
</head>
<body>
   <h3>&lt;c:choose> 태그 </h3>
   
   <c:choose>
   
   <c:when test="${Integer.parseInt(param.num1) == 1}">
      김현혜를 뽑으셨습니다.
   </c:when>
   
   <c:when test="${Integer.parseInt(param.num1) == 2}">
      신주희를 뽑으셨습니다.
   </c:when>
   
   <c:when test="${Integer.parseInt(param.num1) == 3}">
      이한솔을 뽑으셨습니다.
   </c:when>
   
   <c:when test="${Integer.parseInt(param.num1) < 0}">
      잘못 입력하셨습니다.
   </c:when>
   
   <c:otherwise>
      꽝입니다.
   </c:otherwise>
   </c:choose>      
</body>
</html>



결과

  • 초기화면
    20201223_21

  • 20201223_25

  • 20201223_26




views(04_jstl_core_forEach.jsp)

<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
	<h3>&lt;c:forEach> 태그 </h3>
	- Java의 for문에 해당하는 기능을 제공하는 태그
	- forEach는 여러가지 속성이 사용됨
	<pre>
	var : 현재 반복 횟수에 해당하는 변수의 이름
	begin : 반복이 시작할 요소 번호 (0 … n)
	end : 반복이 끝나는 요소 번호
	step : 반복 시 증가할 수
	items : 반복할 객체 명 (Collection 객체)
	varStatus : 현재 반복에 해당하는 객체의 요소
	</pre>
	
	<h3>기본 사용법</h3>
	<c:forEach var="i" begin="1" end="6">
		<h<c:out value="${i}" />>c:out으로 반복문 사용</h<c:out value="${i}" />>
		<h${i}>EL로 반복문 사용 </h${i}>
		<p>-------------------------------------------</p>
	</c:forEach>
	
	
	<hr>
	
	<h3>step 속성</h3>
	step속성의 값은 0보다 작거나 같을 수 없음.
	
	<c:forEach var="i" begin="1" end="6" step="2">	
			<h${i}>건너뛰기 ${i}</h${i}>
	</c:forEach>
	
	
	<hr>
	<!-- step은 음수 사용 불가능 -->
	<h3>역순</h3>
	<c:forEach var="k" begin="1" end="6">	
		<h${7-k}>역순 ${7-k}</h${7-k}>
	</c:forEach>
</body>
</html>



views(05_jstl_core_forEach2.jsp)

<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
<!--  
	EL 3.0 버전 이상을 지원하는 was에서만 EL컬렉션객체 사용 가능
	톰캣 8.0부터 EL 3.0을 지원함.
-->
<c:set var="myList" value='${["A","B","C","D","E"]}' scope="request" />

<c:set var="mySet" value='${{"A","B","C","B","A"}}' scope="request" />

<c:set var="myMap" value='${{"name":"홍길동", "job":"학생", "age":20}}' scope="request" />
<!-- Map객체의 키값은 문자열로 전달함. -->

<jsp:forward page="05_jstl_core_forEach2End.jsp"/>
<!-- 현재 페이지에서 선언된 요청 정보(request scope)를 page 속성에 작성된 주소로 위임하겠다. -->
</body>
</html>



views(05_jstl_core_forEach2End.jsp)

<%@ 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>JSTL - core tag(forEach)</title>
</head>
<body>
	<h2>컬렉션 객체 선언 및 출력</h2>

	<h3>varStatus 속성</h3>
	
	varStatus는 다음과 같은 속성을 가지고 있음
	<pre>
	current : 현재 반복 횟수 또는 현재 반복 접근한 값
	index : 반복 라운드의 제로 기반(zero-based) 인덱스 (0 … n)
	count : 반복 라운드의 1 기반(one-based) 인덱스 (1 … n) 
	first : 현재 라운드가 반복을 통한 첫 번째임을 의미 
	last  :현재 라운드가 반복을 통한 마지막 번째임을 의미 
	</pre>
	
	<hr>
	
	<h3>List</h3>
	<c:forEach var="item" items="${myList}" varStatus="vs">
		현재 값 : ${ vs.current } <br>
		index : ${ vs.index } <br>
		count : ${ vs.count } <br>
		first : ${ vs.first } <br>
		last : ${ vs.last } <br>
		-------------------------------------------<br>
	</c:forEach>
	
	<hr>
	
	<h3>Set</h3>
	<c:forEach var="item" items="${ mySet }" varStatus="vs">
		${item}
		<c:if test="${!vs.last}">
			,
		</c:if> 
	</c:forEach>
	
	<hr>
	
	<h3>Map</h3>
	<c:forEach var="item" items="${myMap}">
		${item.key} = ${item.value} <br>
	</c:forEach>
	<hr>
</body>
</html>



결과

  • 초기화면
    20201223_21


  • 05_jstl_core_forEach2.jsp
  • 20201223_27

  • 20201223_28

  • 20201223_29


  • 05_jstl_core_forEach2End.jsp
  • 20201223_30

  • 20201223_31

  • 20201223_32










  1. 출처 - 위키백과 

태그: , , , ,

카테고리:

업데이트:

댓글남기기