본문 바로가기
jsp

JSTL(JSP Standard Tag Library)

by 신방동불주먹 2022. 12. 2.

JSP 표준 태그 라이브러리 (JSTL)

  • 3대 지시자 중 태그 라이브러리를 이용할 수 있음.
  • 보통 core, formatting만 사용
  • get 값으로 http://127.0.0.1:8080/jstl/ifTag.jsp?name=bk

    이렇게 넘어 들어오면 JSTL에서는
    ${param.name} 
    으로 받을수 있다.

 

param 은 파라미터값으로 넘어온 데이터를 뜻하고
name 은 그 데이터중 name이라는 이름을 갖는 데이터의 값을 가져오겠다는 뜻

${param.name} 는
request.getParameter("name") 과 같다.

 

 

<라이브러리 다운로드>

 

 

1. jstl 라이브러리 다운로드, lib에 추가

 

 

 

 

2. jsp에서 jstl 사용하기 위한 taglib 지시어 추가

*prefix="c" -> jstl 사용 시 태그 앞에 붙일 접두어. <c:태그명/ > 형태로 사용

 

 

 

<코어(Core) 태그> 

 

- 변수선언, 조건문, 반복문 등 

 

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

 

<c:set>

 

EL에서 사용할 변수나 자바빈즈 생성

JSP의 setAttribute() 메서드와 같은 역할

기본 페이지 영역에 저장 된다

 

<c:set var="directVar" value="100" />

 

연산가능

 

<c:set var="elVar" value="${ directVar mod 5}" />

 

표현식으로 사용 가능

 

<c:set var="expVar" value="<%= new Date() %>" />

 

<출력>

directVar : ${ pageScope.directVar } <br>
	expVar : ${ directVar } <br>
	betweenVar : ${ expVar } <br>
	betweenVar : ${ betweenVar } <br>

 

<저장 영역 설정>

<scope : 기본은 page 영역, 원하는 영역으로 설정 가능>

<c:set var="personVar1" value='<%= new Person("홍길동",10) %>' scope="request" />
	${requestScope.personVar1.name }<br>
	${personVar1.age }<br> <!-- 지금은 requst객체에만 있으니까 굳이 영역 특정 없이도 나와 -->

 

<c:remove>

변수삭제

c:remove 변수명

scope 미설정 시 모든 영역의 해당 변수가 삭제됨

<c:remove var="personVar1" scope="request" />
		${requestScope.personVar1.name }<br>
		${personVar1.age }<br>

 

 

 

<c:if>

java와 if 와 동일하나 else가 별도로 없어 조건 나열형태 작성 불가

var 속성에 저장된 결과 값으로 else비슷하게는 가능

 

<h4>문자열 비교와 else구문 흉내내기</h4>
	<c:if test="${ string eq 'Java' }" var="result2">
		문자열은 Java입니다. <br />
	</c:if>
	<c:if test="${not result2}">
		'Java'가 아닙니다. <br />
	</c:if>

 

 

 

 

-속성

test: if 문에서 사용할 조건 지정

var : 조건의 결과를 저장할 변수명

scope : 변수가 저장될 영역

 

	<c:set var="number" value="100" />
	<c:set var="string" value="JSP" />

 

 

예1) 짝수/홀수 판단하기

	<c:if test="${number mod 2 eq 0 }" var="result">
		${number }는 짝수입니다. <br />
	</c:if>
	result : ${result } <br/>

 

<주의>

  • EL이 아닌 정수를 저장하면 false
	<c:if test="100" var="result3">
		EL이 아닌 정수를 지정하면 false
	</c:if>
	result3 : ${result3 } <br />

 

 

  • EL양쪽에 빈 공백이 있는 경우 false
<c:if test=" ${ true } " var="result5">
		EL양쪽에 빈 공백이 있는 경우 false <br />
	</c:if>

 

  • 대소문자 구분 없이 "tRuE"인 경우 true

 

	<c:if test="tRue" var="result4">
		대소문자 구분 없이 "tRuE"인 경우 true <br />
	</c:if>

 

 

<c:choose>,<c:when>,<c:otherwise>

다중조건 판단

when은 여러번, otherwise는 한번만 사용할 수 있다

하위 태그 함께 사용 :

- 조건 1, 2, ... : <c:when>

- 모든 조건을 만족하지 않을때 : <c:otherwise>

 

예) choose 태그로 홀짝 판단

 

	<c:choose>
		<c:when test="${number mod 2 eq 0}">
			${number}는 짝수입니다.
		</c:when>
		<c:otherwise>
			${number}는 홀수 입니다.
		</c:otherwise>
	</c:choose>

 

 

예2) 평균 점수 출력 (암기)

 

	<h4>국, 영, 수 점수를 입력하면 평균을 내어 학점 출력</h4>
	<form> <!-- 점수 입력 폼 method="get" action= "현재 주소창의 url값" -->
		국어 : <input type="text" name="kor" /> <br/>
		영어 : <input type="text" name="eng" /> <br/> 
		수학 : <input type="text" name="math" /> <br/> 
		<input type="submit" value="학점 구하기" /> <br/> 
	</form>
	
	<c:if test="${not (empty param.kor or empty param.eng or empty param.math) }"> <!-- 비어있지 않다면 (세개 값중 하나라도 비어있다면) -->
	<c:set var="avg" value="${(param.kor +param.eng + param.math) /3 }" />
	<c:choose>
		<c:when test="${avg >= 90}"> A학점</c:when>
		<c:when test="${avg >= 80}"> B학점</c:when>
		<c:when test="${avg ge 70}"> C학점</c:when>
		<c:when test="${avg ge 60}"> D학점</c:when>
		<c:otherwise>F학점</c:otherwise>
	</c:choose>
	입니다
	</c:if>

 

 

 

<c:forEach>

반복 태그

1) 시작과 종료를 지정하는 일반 for

2) 배열이나 컬렉션을 순회하는 향상된 for

 

속성

  • var : 변수명 지정
  • items : 반복위한 객체 지정. 배열, 컬렉션 등
  • begin : 시작값 지정
  • end : 종료갑 지정
  • step : 증가값 지정
  • varStatus : 루프의 현재 상태 알려주는 변수 이름 지정

 

 

 

1) 일반 for 문 예시

 

<h4>일반 for문 형태의 forEach 태그</h4>
<c:forEach begin="1" end="3" step="1" var="i">
		<p>반복 ${i} 입니다</p>
	</c:forEach>

 

결과)

'jsp' 카테고리의 다른 글

파일 업로드/ 다운로드  (0) 2022.12.05
jsp_model1 게시판  (0) 2022.12.03
표현언어(EL:Express Language)  (0) 2022.12.02
페이징  (0) 2022.12.01
한글 깨짐 방지 필터 설정  (0) 2022.11.29