Java Category/JSP

[JSP] JSTL(JSP Standard Tag Library)

ReBugs 2024. 1. 10.

실행환경

  • windows 11 pro
  • IntelliJ : 23.3.2
  • Apache Tomcat : 9.0
  • JDK : 17.0.9

 

라이브러리 추가

JSTL이란 JSP Standard Tag Library를 뜻한다.

먼저 JSTL JAR 파일을 받아야 한다.

아래의 링크에서 다운로드를 진행해야 한다.

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

 

빨간색으로 표시된 부분을 클릭해서 jar 파일을 다운로드 받자.

 

인텔리제이로 돌아와서 Project Structure를 클릭한다.

 

modules - 해당 프로젝트 선택 후 오른쪽에 보이는 +(Add) 버튼을 클릭한다.

이후 JARs or Dircetories.. 버튼을 눌러서 아까 다운로드 받은 JAR 파일을 추가해준다.

 

apply - ok를 누른다.

 

JSTL 라이브러리

라이브러리 기능 접두어
코어 일반 프로그램 언어에서 제공하는 변수선언, 조건/제어/반복문등의 기능을 제공한다. c
포맷팅 숫자,날짜,시간을 포맷팅 하는 기능과 국제화, 다국어 지원 기능을 제공한다. fmt
함수 문자열을 처리하는 함수를 제공한다.  fn
데이터베이스 데이터베이스의 데이터를 입력/수정/삭제/조회하는 기능을 제공한다. sql
XML처리 XML 문서를 처리할 때 필요한 기능을 제공한다. x
<!--아래의 코드는 JSP에서 코어 태그라이브러리를 사용할 때 작성해야 한다.-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 

JSTL 문법

연산자 예제 결과내용
c:url url 호출 
<c:url value="test.jsp"/>
<c:url value="/test.jsp" context="/other"/>
c:out 객체를 화면에 출력 
<c:out value="${data}"/>
<c:out value="${data}" default="값없음"/>
c:set  저장영역에 객체를 저장 
<!-- scope : page, request, session, application -->
<c:set scope="request" var="data" value="my_testValue" />
c:forEach  반복문 제어
<c:forEach var="NOTICE" items="${NOTICE_LIS}" varStatus="status">
<c:out value="${NOTICE.COLUMN}"/>
</c:forEach>
 
<!-- 0123456 -->
<c:forEach var="S" begin="0" end="6">
<c:out value="${S}"/>
</c:forEach>
 
<!-- 036 -->
<c:forEach var="S" begin="0" end="6" step="3">
<c:out value="${S}"/>
</c:forEach>
c:remove  저장영역에서 객체를 삭제  <c:remove scope="request" var="data" />
c:if  조건문 제어
<c:if test="${empty data}">
data 값이 비어있으면 실행
</c:if>
c:choose
c:when
c:otherwise 
복합조건문 제어
<c:choose>
<c:when test="${data == 'A'}">data 값이 A이면 실행</c:when>
<c:when test="${data == 'B'}">data 값이 B이면 실행</c:when>
<c:when test="${data == 'C'}">data 값이 C이면 실행</c:when>
<c:otherwise>data 값이 A, B, C값이 아닐 경우 실행</c:otherwise>
</c:choose>
c:import!  다른 JSP 화면을 현재 화면에 출력 <c:import! url="test.jsp"/>
c:redirect  경로 이동 <c:redirect url="주소"/>

 

status 상태 속성 제어

< c:foreach items=”${RESULT}” var=”RESULT” varStatus=”status”>
 
    ${status.current}<br/> <!– 현재 아이템 –>
    ${status.index}<br/>   <!– 0부터의 순서 –>
    ${status.count}<br/>   <!– 1부터의 순서 –>
    ${status.first}<br/>   <!– 현재 루프가 처음인지 반환 –>
    ${status.last}<br/>    <!– 현재 루프가 마지막인지 반환 –>
    ${status.begin}<br/>   <!– 시작값 –>
    ${status.end}<br/>     <!– 끝값 –>
    ${status.step}<br/>    <!– 증가값 –>
 
< /c:forEach>

 

JSTL for문

인덱스로 접근

<c:forEach var="i" begin="1" end="5" step="1" varStatus="status">
    번호 : ${status.count}
    이름 : ${item[i].name}
    직업 : ${item[i].job}
    급여 : ${item[i].salary}
</c:forEach>

 

begin과 end로 접근

<c:forEach var="item" items="${list}" begin=0 end=5 step=1 varStatus="status">
    번호 : ${status.count}
    이름 : ${item.name}
    직업 : ${item.job}
    급여 : ${item.salary}
</c:forEach>

 

일반적인 접근

<c:forEach var="item" items="${list}" varStatus="status">
    번호 : ${status.count}
    이름 : ${item.name}
    직업 : ${item.job}
    급여 : ${item.salary}
</c:forEach>

 

JSTL break문 구현

<c:set var="doneLoop" value="false" /> 
<c:forEach var="entity" items="${_STORE}" varStatus="status">
    <c:if test="${status.count % 6 eq 1}">
        <c:set var="doneLoop" value="false" />
    </c:if>
    <c:if test="${not doneLoop}"> 
        <span><input type="checkbox" id="store_id" name="store_id" value="<c:out value="${entity.STORE_ID}"/>" <c:out value="${entity.USE_YN}"/>><c:out value="${entity.STORE_NM}"/></span>
        <c:if test="${status.count % 6 eq 0}"> 
            <c:set var="doneLoop" value="true"/> 
        </c:if>
    </c:if>
</c:forEach>

 

reference : https://yunamom.tistory.com/179

댓글