JSTL (23.07.03)

·2023년 7월 3일
0

Server

목록 보기
5/35
post-thumbnail

📝 JSTL(Jsp Standard Tag Library)

JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를 쉽고,
표기법을 간단히 할 수 있도록 태그화(Tag Library) 하여 표준(Standard)으로 제공함
(if, for, scope 변수 선언, 데이터 파싱 등)

📌 JSTL 라이브러리 등록 방법

  1. https://tomcat.apache.org/download-taglibs.cgi 접속
  2. jar files -> impl, EL, Spec 다운로드
  3. WEB-INF/lib 폴더에 추가
  • webapp 폴더는 서버 구동 시 인터넷에 배포되는 폴더
    -> 인터넷 상에서 수행되어야 되는 코드, 파일 등을 모두 webapp 폴더 내부에 저장함

📌 JSTL 사용을 위한 선언 방법

JSTL을 사용하고자 하는 JSP가 있을 경우 해당 JSP 최상단에 JSTL 라이브러리를 추가하는 지시자 taglib를 작성해야 한다.

prefix : 접두사 - 다른 태그와 구별할 수 있는 namespace(태그 앞에 붙는 태그명)

url(Uniform Resource Locator)

인터넷에서 특정 자원 위치 지정(주소)

uri(Uniform Resource Identifier)

네트워크 상에서 자원을 구별하는 식별자 (자원을 구분하는 유일한 주소)
-> uri에 작성하는 주소는 네트워크 상의 주소가 아닌 다운로드받은 라이브러리 내부 구분 주소

💡 예시

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

📌 변수 선언 (c:set)

변수를 선언하고 값을 초기화하는 태그(초기화는 무조건 수행)
-> c:set 태그로 선언된 변수는 EL을 이용해서 출력할 수 있음

💡 특징

  1. 변수 타입을 지정하지 않음
  2. 변수의 범위(scope)를 지정할 수 있음
    -> c:set은 내장 객체에 속성을 추가하는 태그 (page, request, session, application)

💡 c:set 태그 속성

var

변수명

value

대입될 값

scope

변수 범위 (기본값 : page)

🔎 코드로 살펴보기

  • jstl_1.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 lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSTL_1</title>
</head>
<body>

	<!-- <태그명 /> : 태그가 시작되자마자 종료 == 내용이 없는 요소 -->
	<c:set var="num" value="100"/> <!-- page  -->
	<c:set var="num" value="200" scope="request"/>
	
	<!-- scope 미지정 시 좁은 범위부터 탐색(우선순위) -->
	${ num } + ${ requestScope.num } = ${ num + requestScope.num }
.
.
.

🔎 출력 화면


📌 변수 삭제 (c:remove)

지정한 변수(c:set / setAttribute() 추가된 변수) 삭제

  • scope 선택 가능
  • scope 미작성 시 모든 scope에서 일치하는 변수명 모두 제거됨

💡 c:remove 속성

var

삭제할 변수명

scope

삭제할 범위 (기본값 모든 범위)

🔎 코드로 살펴보기

	<!-- session scope 변수 선언 -->
	<c:set var="num" value="300" scope="session" />
	
	<ul>
		<li>page : ${ pageScope.num } </li>
		<li>request : ${ requestScope.num } </li>
		<li>session : ${ sessionScope.num } </li>
	</ul>
	
	request 범위의 num 변수 삭제
	<c:remove var="num" scope="request" />
	
	<ul>
		<li>page : ${ pageScope.num } </li>
		<li>request : ${ requestScope.num } </li>
		<li>session : ${ sessionScope.num } </li>
	</ul>
	
	모든 범위의 num 변수 삭제
	<c:remove var="num" />
	
	<ul>
		<li>page : ${ pageScope.num } </li>
		<li>request : ${ requestScope.num } </li>
		<li>session : ${ sessionScope.num } </li>
	</ul>

🔎 출력 화면


📌 조건문 - if (c:if 태그)

조건문을 작성할 수 있는 태그
-> if문만 가능하고 else는 불가능함 (c:else 존재하지 않음)

💡 c:if 속성

test

조건을 작성하는 속성
-> 단, EL로만 작성할 수 있다.

🔎 코드로 살펴보기

	<c:set var="temp" value="10"/>
	
	<c:if test="${ temp > 20 }">
		<!-- test에 작성된 조건이 만족(true)할 때만 화면에 출력됨 -->
		temp는 20보다 크다
	</c:if>
	
	<!-- else 구문이 없어 반대되는 조건을 별도 작성 -->
	<c:if test="${ temp <= 20 }">
		temp는 20보다 작거나 같다
	</c:if>

🔎 출력 화면


📌 조건문 - if ~ else if ~ else (c:choose, c:when, c:otherwise)

c:choose 내부에 c:when (if / else if), c:otherwise (else) 태그를 작성하는 형태


🔎 코드로 살펴보기

	<c:set var="temp2" value="10" />
	
	<c:choose>
		<c:when test="${ temp2 > 10 }">
			10보다 크다
		</c:when>
		
		<c:when test="${ temp < 10 }">
			10보다 작다
		</c:when>
		
		<c:otherwise>
			10과 같다
		</c:otherwise>
	</c:choose>
</body>
</html>

🔎 출력 화면


📌 c:forEach 태그

Java의 for문 + 추가 기능을 가지고 있는 태그

💡 속성

var

현재 반복 횟수에 해당하는 변수 (== int i)

begin

반복 시작 값

end

반복 종료 값

step

반복 시마다 증가할 값 (증감식), 미작성 시 기본값 1

items

반복 접근할 객체명(Collection 객체) // 향상된 for문

varStatus

현재 반복에 해당되는 상태 정보

💡 제공되는 값

current

현재 반복 횟수 또는 현재 접근 중인 객체

index

현재 객체가 몇 번째 인덱스인지 반환 (0부터 시작)

count

현재 반복문이 몇 바퀴 반복 중인지 반환 (1부터 시작)

first

첫 번째 반복일 경우 true 반환

last

마지막 반복일 경우 true 반환

🔎 코드로 살펴보기

  • jstl_2.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 lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSTL_2</title>
</head>
<body>

	<h3>일반 for문 형식으로 사용</h3>    
	
	<c:forEach var="i" begin="1" end="6" step="1">
		
		<h${i}> ${i}번째 반복 중입니다.. </h${i}>
			
	</c:forEach>
	
	<table border=1>
		<c:forEach var="i" begin="1" end="10" step="1">
			<tr>
				<th>${i}</th>
				<td>${i}번째 게시글입니다.</td>
			</tr>
		
		</c:forEach>
	</table>

	<hr>
	
	<h3>향상된 for문 형식으로 사용</h3>
	
	<form action="forResult.jsp" method="get">
        
	  <input type="checkbox" name="lang" value="java"> java <br>
      <input type="checkbox" name="lang" value="sql"> sql <br>
      <input type="checkbox" name="lang" value="jdbc"> jdbc <br>
      <input type="checkbox" name="lang" value="html"> html <br>
      <input type="checkbox" name="lang" value="css"> css <br>
      <input type="checkbox" name="lang" value="javascript"> javascript <br>
      <input type="checkbox" name="lang" value="jQuery"> jQuery <br>
      <input type="checkbox" name="lang" value="servlet"> servlet <br>
      <input type="checkbox" name="lang" value="jsp"> jsp <br>
   
      <button>제출</button>

	</form>
	
</body>
</html>
  • forResult.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>c:forEach 향상된 for문처럼 사용하기</title>
</head>
<body>

	<h3>EL로 파라미터 얻어오는 방법</h3>
	1. \${ param.name속성값 }
	
	-> 단일 파라미터를 얻어와 출력하는 용도
	-> 복수 파라미터에 사용하는 경우 맨 앞(0번 인덱스) 값만 얻어옴 <br><br>
	
	${ param.lang }
	
	<br><br>
	
	2. \${ paramValues.lang[인덱스] } <br><br>
	
	${ paramValues.lang[0] } <br>
	${ paramValues.lang[1] } <br>
	${ paramValues.lang[2] } <br>
	
	<hr>
	
	<h3>향상된 for문 사용</h3>
	
	<ul>
		<c:forEach var="str" items="${paramValues.lang}" varStatus="vs">
			<li>
				${str} / ${vs.index} / ${vs.count} / ${vs.current} <br>

				<c:if test="${vs.first}">
					<!-- 첫 번째 반복인 경우 -->
					<span style="color:red;">첫 번째</span>
				</c:if>
				
				<c:if test="${vs.last}">
					<!-- 마지막 반복인 경우 -->
					<span style="color:blue;">마지막</span>
				</c:if>
			</li>
		</c:forEach>
	</ul>

</body>
</html>

🔎 출력 화면

일반 for문 형식으로 사용

향상된 for문 형식으로 사용

  • '제출' 버튼을 눌렀을 때
profile
풀스택 개발자 기록집 📁

0개의 댓글