본문 바로가기
JSTL & EL & Action Tag/JSTL

JSTL (core)

by pms93 2022. 10. 12.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 
	JSTL(JavaServer Pages Standard Tag Library)
	 - sciptlet, expression의 사용 빈도가 잦아지게 되면서 생기는 가독성 문제를 해결하기 위한 표현식 tag
	 - 별도의 jar를 lib폴더 내에 넣어줌으로서 사용 가능.
	 - tag의 종류를 custom tag라고 하며 5가지의 종류가 존재한다.
	 - 각 태그마다 경로를 입력하여 사용할 수 있지만, 사용의 편리함을 위해 미리 Library를 import하여 사용한다.
	
	* 기본기능(core)
	 : 변수 선언과 코드 흐름의 제어가 가능하며, 서버로 page이동 요청또한 가능하다.
	
	* 형식화(format)
	 : encoding과 같다.
	
	* 데이터베이스(sql)
	 : DB의 data를 INSERT, UPDATE, DELETE 할 수 있다.
	 
	* xml처리(xml)
	 : xml문서를 처리할 때 필요한 기능 제공
	
	* 함수처리(functions)
	 : 문자열을 처리하는 함수  제공
	 
	--> core, format 두 종류가 많이 사용된다.
	
 --%>
 
 <%-- 
 	JSTL core기능을 사용하기 위한 준비작업
 	 - uri경로 지정 (Ctrl + spacebar를 통해 자동완성으로 입력 가능)
 	
 	* prefix
 	 - 경로를 지정한 custom tag의 사용 명칭(변수명과 동일한 개념)을 정한다.
 	 - core tag는 통상적으로 'c'로 많이 사용하는편
 	
 	core tag의 종류
 	 - <c:set />
 	  : 변수 선언과 동일하다.
 	  
 	  : ex) <c:set var = "data" value = "JSTL TSET" />
 	     - 위 선언을 통해 data라는 변수를 "JSTL TEST"문자열로 초기화 한다.
 	  
 	 - <c:out />
 	  : System.out.print, Expression(<%=%>)과 동일
 	  : ex) <c:out value = "JSTL TEST" />
 	  : ex) <c:set var = "data" value = "JSTL DATA !!" />
 	        <c:out value = "${ data }" />
 	  
 	 - <c:if test = "" />
 	  : test 내에 논리연산자(true, false)의 값을 통해 코드의 흐름 제어 가능
 	  : ex) <c:set var = "name" value = "김변수" />
 	        <c:if test = "${ name == '김변수' }">
 	        	<%= name과 문자열 '김변수'가 동일할 경우 실행될 문장 =>
 	        </c:if>
 	        
 	 - <c:forEach var = "" begin = "" end = "" step = "" />
 	  : java의 for문과 동일
 	  : var = 초기식, begin, end = 조건식, step = 증감식을 표기
 	  : forEach에 선언된 var는 java의 for문과 동일하게 지역변이므로 코드의 흐름이 탈출하면 함께 소멸
 	  
 	 - <c:choose />, <c:when />, <c:otherwise />
 	  : java의 if, else if, else 혹은 switch case문과 동일하다.
 	  : ex) 하단 ex6번 참조
 	  : 정확하진 않으나 choose 내에 set을 통한 변수 선언은 불가능한듯 하다. (시도해봤으나 되지 않는다.)
 	  
 	 - <c:url />
 	  : 사용하고자 하는 경로를 변수처럼 담아 사용할 수 있다.
 	  : ex) <c:url var = "root" value = "/" />
 	     : root에 최상위 경로(webContext path)가 담긴다.
 	  : ex) <c:url var = "jstl" value = "/jstl" />
 	     : /webContext path/jspl   
 	  
 	 - <c:set scope = "" />
 	  : c:set에 scope를 명시함으로서 내장객체에 바로 data 저장이 가능하다.
 	  : ex) <c:set var = "data" value = "JSTL SCOPE !!" scope = "session" />
 	  : !! scope를 지정하지 않으면 default value = pageContext !!
      
     - <c:import>와 <%@ include %>의 차이
	 - import
 	    : 매서드처럼 가서 실행 후 가져오고 가서 실행 후 가져오는식으로 가져온다.
 	    : import된 파일 내의 변수는 사용할 수 없다.
 	    : return을 통해 코드의 흐름 제어가 불가능하다. (JSTL의 core tag(choose, when, otherwise)를 통해 가능)
 	    : 
 	    
	 - include 
	    : 파일의 내용을 그대로 가져와서 실행(가지고 온 후에 그대로 실행)
 --%>
 
 
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<h4> ex1 </h4>
<c:set var = "string" value = "JSTL TEST !!" />
<c:out value = "${ string }" /> <br><br>


<h4> ex2 </h4>
<c:out value = "JSTL TEST2 !!" /> <br><br>


<h4> ex3 </h4>
<% String data1 = "자바 변수의 데이터"; %>
<c:out value = "<%= data1 %>" /> <br><br>


<h4> ex4 </h4>
<% String name = "김변수"; %>
<c:set var = "name" value = "<%= name %>" />
<c:if test = "${ name == '김변수' }">
	<%= "이름은 김변수가 맞습니다." %>
</c:if>
<br><br>


<h4> ex5 </h4>
<% String[] names = {"김변수", "김상수", "김객체"}; %>
<c:set var = "names" value = "<%= names %>" />
forEach를 사용하지 않은 이름목록 출력 : ${ names[0] } ${ names[1] } ${ names[2] } <br><br>
<%-- 위처럼 forEach를 사용하지 않고 index를 통해서도 출력은 가능하다. --%>

forEach를 사용한 이름 목록 출력1 :
<c:forEach var = "cnt" begin = "0" end = "2" step = "1" >
${ names[cnt] }
</c:forEach> 
<br><br>

forEach를 사용한 이름 목록 출력2 :
<c:forEach var = "cnt" begin = "0" end = "<%= names.length %>" step = "1">
${ names[cnt] }
</c:forEach>
<br><br>

<!-- items Attribute를 통한 향상 for문 -->
forEach(items)를 사용한 이름 목록 출력3 :
<c:forEach var = "nameItem" items = "${ names }">
	${ nameItem }
</c:forEach>
<br><br>


<h4> ex6_1 </h4>
<% String id = "admin"; %>
<c:set var = "id" value = "<%= id %>" />
<c:choose>
	<c:when test = "${ id == 'admin' }">
		<c:out value = "id는 admin입니다." />
	</c:when>
	
	<c:when test = "${ id == 'admin2' }">
		<%= "아이디는 admin2입니다." %>
	</c:when>
	
	<c:otherwise>
		<c:out value = "if문의 else 혹은 switch case의 default와 같은 부문" />
	</c:otherwise>
</c:choose>
<br><br>


<h4> ex6_2 </h4>
내장객체를 통한 이름 목록 출력 : 
<% pageContext.setAttribute("names", new String[]{"김변수", "김상수", "김객체"}); %>
<c:forEach var = "cnt" begin = "0" end = "2" step = "1">
	<c:out value = "${ names[cnt] }" />
</c:forEach>
<br><br>


<h4> ex7 </h4>
<c:url var = "root" value = "/" />
webContext root : ${ root } <br>

<c:url var = "jstl" value = "/jstl" />
jstl Path : ${ jstl }
<br><br>


<h4> ex8 </h4>
<c:set var = "data" value = "pageContext" scope = "page" />
<c:set var = "data" value = "request" scope = "request" />
<c:set var = "data" value = "session" scope = "session" />
<c:set var = "data" value = "application" scope = "application" />

<c:out value = "${ pageScope.data }" /> <br>
<c:out value = "${ requestScope.data }" /> <br>
<c:out value = "${ sessionScope.data }" /> <br>
<c:out value = "${ applicationScope.data }" />

'JSTL & EL & Action Tag > JSTL' 카테고리의 다른 글

JSTL (format_result)  (0) 2022.10.12
JSTL (format_form)  (0) 2022.10.12