⭐️ JSTL이란 ?
JSTL은 JSP Standard Tag Library의 줄임말이다.
JSP에서 자주 사용하는 기능들을 태그 형태로 제공하는
표준 라이브러리(커스텀 액션태그)이다.
자바 코드를 직접 사용하지 않고도 반복문, 조건문, 포멧처리 등등
쉽게 수행할 수 있다.
태그로 작성이 되어있기 때문에 코드 가독성이 높아진다.
⭐️ JSTL 라이브러리 추가 및 등록
1.
maven repository 사이트 접속
2.
Jakarta Standard Tag Library Implementation ,
Jakarta Standard Tag Library API 다운로드
해당 라이브러리의 jar 파일을 다운로드 한다.
3.
2개 파일을 WEB-INF 안에있는 lib 폴더에 등록
⭐️ JSTL core 라이브러리 등록
JSTL을 사용하고자 하는 해당 JSP페이지 상단에
taglib 지시어를 사용해서 선언한다.
[ taglib 선언 ]
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
JSTL의 core라이브러리를 가져와 사용할 것이다.
core 라이브러리는 변수와 조건문, 반복문과 같은 로직과 관련된 문법을 제공한다.
⭐️ JSTL 태그
[ JSTL 태그 종류 ]
태그이름 | 설명 |
<c:set /> | 변수의 선언 및 제거 |
<c:remove /> | |
<c:out /> | 변수의 출력 |
<c:catch /> | 예외 처리 |
<c:if /> | 조건문 (else는 없다) |
<c:choose /> | Switch문과 비슷 |
<c:when /> | |
<c:otherwise /> | |
<c:forEach /> | 반복문 |
<c:forTokens /> | 구분자로 분할하여 반복문 |
<c:url /> | URL 생성 |
<c:param /> | 파라미터 추가 |
<c:import /> | 페이지 첨부 |
<c:redirect /> | URL 이동 |
위와 같은 태그들이 존재한다. core 라이브러리를 사용해보자
🔥 JSTL 사용법
🏷️ <c: set /> 태그
변수 선언과 동시에 초기화 가능.
<c:set var="변수명" value="값" [scope="저장객체"] />
변수 선언하고 초기값을 대입하는 기능을 제공한다.
해당 변수를 어떤 scope에 담아둘지 결정 가능.
-> 기본적으로 scope가 page이기 때문에 c:set으로 선언한 변수는
EL로 빠르게 가져올 수 있다 ‼️
[ 사용 예시 ]
<c:set var="num1" value="10"/>
<c:set var="num2" value="20" scope="request"/>
num1 : ${num1}
num2 : ${num2}
[ 결과 ]
🏷️ <c: remove/> 태그
변수 삭제를 함.
<c:remove var="제거하고싶은 변수명" [scope="저장객체"] />
해당 scope영역에 해당 변수를 찾아서 제거하는 태그
scope 지정 생략시 모든 scope에서 해당 변수를 "전부" 찾아서 제거한다.
=> 해당 scope에 .removeAttribute()를 통해 제거하는 것과 동일.
[ 사용 예시 ]
<c:set var="result" value="${num1 + num2}" scope="session"/>
삭제 전 : ${result} <br>
<c:remove var="result" scope="request"/>
request 영역에서 삭제 후 : ${result} <br><br>
<c:remove var="result"/>
모든 scope에서 삭제 후 : ${result} <br><br>
[ 결과 ]
🏷️ <c: out/> 태그
변수를 출력할때 사용.
<c:out value="출력하고자 하는 값" [default= 기본값"] [escapeXml="true | false"] />
[ 사용 예시 ]
<c:out value="${result}"/> <br>
<c:out value="${result}" default="없음"/> <br>
<c:set var="outTest" value="<b>출력 테스트</b>"/> <br>
<c:out value="${outTest}" escapeXml="true"/> <br>
<c:out value="${outTest}" escapeXml="false"/> <br>
[ 결과 ]
처음 result는 값이 없으므로 출력 x -> EL구문은 값이 없으면 화면에 띄우지 않음.
escapeXml은 Html 태그를 포함하여 출력하냐 , 적용해서 출력하냐 설정.
🏷️ <c: if/> 태그
java의 if문과 비슷한 역할을 하는 태그이다.
조건식은 test속성에 작성 (단 , EL구문으로 기술해야 함)
<c:if test="조건식"/>
[ 사용 예시 ]
<c:if test="${num1 > num2}">
<b>num1이 num2보다 큽니다.</b>--%>
</c:if>
<c:if test="${num1 < num2}">
<b>num2이 num1보다 큽니다.</b>--%>
</c:if>
<c:set var="str" value="안녕~?"/>
<c:if test="${str eq '안녕~?'}">
<h4>그래 안녕!</h4>
</c:if>
[ 결과 ]
eq -> equals()를 의미
🏷️ <c: choose/> 태그
choose는 else-if 와 비슷한 구문.
c:choose , c:when , c:otherwise로 구성.
[ 사용 예시 ]
<c:choose>
<c:when test="${num1 > 30}">
<h5>num1은 30보다 크다</h5>
</c:when>
<c:when test="${num1 > 20}">
<h5>num1은 20보다 크다</h5>
</c:when>
<c:when test="${num1 > 10}">
<h5>num1은 10보다 크다</h5>
</c:when>
<c:otherwise>
<h5>모든 조건이 맞지 않다.</h5>
</c:otherwise>
</c:choose>
[ 결과 ]
현재 page cope의 num1은 10이기때문에 otherwise가 실행된다.
🏷️ <c: forEach/> 태그
반복문과 동일함.
for loop문
<c:forEach var="변수명" begin="초기값" end"끝값" [step="반복시 증가값"] />
향상된 for문
<c:forEach var="변수명" items="순차적으로 접근할 객체( 배열 / 컬랙션 )"
[varStatus = "현재 접근된 요소의 상태값"]
[ 사용 예시 ]
<c:forEach var="i" begin="1" end="10" step="2">
반복확인 : ${i} <br>
</c:forEach>
<c:forEach var="i" begin="1" end="5">
<h${i}>태그안에서 사용 :</h${i}>
</c:forEach>
<%-- ============= --%>
<c:set var="colors" value="red,yellow,green,pink"/>
colors : ${colors} <br>
<ul>
<c:forEach var="c" items="${colors}">
<li style="color : ${c}">${c}</li>
</c:forEach>
</ul>
[ 결과 ]
🏷️ <c: forTokens/> 태그
주로 구분자를 넣는 반복문에 사용
<c:forTokens var="변수명" items="분리하고싶은 문자열" delims="구분자" />
구분자를 통해서 분리된 각각의 문자열에 순차적으로 접근하면서 반복을 수행
-> Java의 문자열. split("구분자")와 유사하다.
[ 사용 예시 ]
<c:set var="device" value="컴퓨터,노트북/TV,핸드폰,냉장고/세탁기"/>
<ol>
<c:forTokens var="d" items="${device}" delims=",/">
<li>${d}</li>
</c:forTokens>
</ol>
[ 결과 ]
delims의 구분자는 "./," 이나 "/.,"이런식으로 순서가 섞여있어도 구분하는 기준은
안에 있는 구분자 하나하나를 구분해서 나누어 준다.
🏷️ <c: url/> 태그
url 경로를 생성하고, 쿼리스트링을 정의해둘 수 있는 태그
<c:url var="변수명" value="요청URL">
<c:param name="키" value="값"/>
<c:param name="키" value="값"/>
<c:param name="키" value="값"/>
</c:url>
[ 사용 예시 ]
<a href="list.do?color=black&item=5">기존방식 요청</a>
<c:url var="listUrl" value="list.do">
<c:param name="color" value="black"/>
<c:param name="item" value="15"/>
</c:url>
<a href="${listUrl}">c:url이용방식</a>
[ 결과 ]
JSTL을 사용함으로써 좀더 쉽게 html과 java문법간의 이질적인
느낌이 많이 사라졌다.
여러 문법을 통해 jsp를 잘 만들어보자.
'Server > JSP - TomCat - Servlet' 카테고리의 다른 글
JSP 포워딩(Forwarding)과 리다이렉트(Redirect)의 차이 (1) | 2025.02.27 |
---|---|
session.removeAttribute()와 session.invalidate() 차이 (2) | 2025.02.26 |
JSP Scope에 대하여 (0) | 2025.02.23 |
Servlet에대하여 (0) | 2025.02.21 |
IntelliJ 와 Tomcat 연결 (2) | 2025.02.20 |