home
자바
home
🥇

JSTL Core Library

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

1. 변수(속성)

변수 선언 (c:set var="" value="" [scope=""])
변수 선언하고 초기값을 대입해두는 기능을 제공
해당 변수를 어떤 scope에 담아둘껀지 지정가능함 (생략시 기본적으로 pageScope에 담김) → 즉, 해당 scope에 setAttribute를 통해서 key-value 형태로 데이터를 담아놓는 거라고 생각하면됨 → c:set을 통해 선언된 변수는 EL로 접근해서 사용 가능 (단, 스크립팅원소로는 접근 불가)
주의사항
변수 타입을 별도로 지정하지 않음
초기값은 반드시 지정해둬야됨 (즉, 선언과 동시에 초기화)
<c:set var="num1" value="10"/> <!-- page Scope에 담김 --> <c:set var="num2" value="20" scope="request"/> <%-- => request.setAttribute("num2", "20"); 와 같음 --%> num1 변수값 : ${ num1 } <br> num2 변수값 : ${ num2 } <br> <c:set var="result" value="${ num1 + num2 }" scope="session"/> result 변수값 : ${ result } <br><br> <!-- scope를 지정해주면 속도가 더 빨라짐 --> ${ pageScope.num1 } <br> ${ requestScope.num2 } <br> ${ requestScope.result } <br> <%-- request Scope에 존재X => null(X), 빈칸(O) 출력 --%> ${ sessionScope.result } <br><br> <c:set var="result" scope="request"> 9999 <%-- value값 ! --%> </c:set> ${ requestScope.result } <br>
JavaScript
복사
변수 삭제 (c:remove var="제거하고자하는변수명" [scope=""])
해당 변수를 scope에서 찾아서 제거하는 태그
scope 지정 생략 시 모든 scope에서 해당 변수 다 찾아서 제거함 → 즉, 해당 scope에 .removeAttribute를 통해 제거하는 거라고 생각하면 됨
삭제 전 result : ${ result } <br><br> <!-- 30 --> 1) 특정 scope지정해서 삭제 <br> <c:remove var="result" scope="request"/> <!-- 10 --> request 삭제 후 result : ${ result } <br><br> 2) 모든 scope에서 삭제 <br> <c:remove var="result"/> 모두 삭제 후 result : ${ result } <br><br> <!-- 빈칸 --> <hr>
JavaScript
복사
변수(데이터) 출력(c:out value="출력하고자하는값" [default="기본값"] [escapeXml="true|false"])
데이터를 출력하고자 할 때 사용하는 태그
<%-- 출력하고자 하는 값이 존재하지 않을 경우 default="기본값" 출력 --%> <c:out value="${ result }"/> <br> <c:out value="${ result }" default="없음"/> <br><br> <%-- 사용 예시 : 1:1문의에서 답변이 달리지 않았을 경우 default문구 출력하도록 !! --%> <c:set var="outTest" value="<b>출력테스트</b>"/> <c:out value="${ outTest }"/><br> <!-- escapeXml 생략 시 기본값이 true == 태그 해석안됨 (문자열로 취급) --> <c:out value="${ outTest }" escapeXml="false"/> <br> <hr>
JavaScript
복사

2. 조건문 - if (c:if test="조건식")

JAVA의 단일 if문과 비슷한 역할을 하는 태그
조건식은 test 속성에 작성 (*** 단, EL형식으로 기술해야됨 **)
<%-- 기존 방식 <% if(num1 > num2) { %> <% } %> --%> <c:if test="${ num1 > num2 }"> <!-- > 혹은 gt --> <b>num1이 num2보다 큽니다.</b> </c:if> <c:if test="${ num1 <= num2 }"> <!-- <= 혹은 le --> <b>num1이 num2보다 작거나 같습니다.</b> </c:if> <br> <c:set var="str" value="안녕하세요"/> <!-- 기존 방식 --> <%-- <% if(str.equals("안녕하세요")){%> <% } %> --%> <c:if test="${ str eq '안녕하세요' }"> <h4>Hello World</h4> </c:if> <c:if test="${ str ne '안녕하세요' }"> <h4>Bye World</h4> </c:if> <br>
JavaScript
복사

3. 조건문 - Choose (c:choose, c:when, c:otherwise)

JAVA의 if-else, if-else if문 또는 switch문과 비슷한 역할을 하는 태그
각 조건들을 c:choose의 하위요소로 c:when을 통해서 작성 (else 또는 default문 같은건 c:otherwise로!)
<%-- 기존방식 <% if(num1 == 20) { %> <% }else if(num1 == 10){ %> <% }else{ %> <% } %> --%> <c:choose> <c:when test="${ num1 eq 20 }"> <b>처음 뵙겠습니다.</b> </c:when> <c:when test="${ num1 eq 10 }"> <b>다시 봐서 반갑습니다.</b> </c:when> <c:otherwise> <b>안녕하세요</b> </c:otherwise> </c:choose> <!-- *주의 : choose 구역 안에 다른 텍스트 작성하면 오류남!! 주석 써도 오류남!! -->
JavaScript
복사

4. 반복문 - forEach

for loop문 - (c:forEach var="변수명" begin="초기값" end="끝값" [step="반복시증가값"])
향상된 for문 - (c:forEach var="변수명" items="순차적으로접근할객체(배열또는컬렉션)" [varStatus="현재접근된요소의 상태값을 보관할 변수명"])
<%-- 기존방식 <% for(int i=1; i<=10; i++){%> <%} %> --%> <c:forEach var="i" begin="1" end="10" step="2"> 반복확인 : ${ i } <br> </c:forEach> <c:forEach var="i" begin="1" end="6"> <h${i}>태그안에서도 적용 가능함</h${i}> </c:forEach> <c:set var="colors"> red,yellow,green,pink </c:set> colors값 : ${ colors } <br> <ul> <c:forEach var="c" items="${ colors }"> <li style="color:${c}">${ c }</li> </c:forEach> </ul> <% ArrayList<Person> list = new ArrayList<>(); list.add(new Person("홍길동", 20, "남자")); list.add(new Person("김말순", 30, "여자")); list.add(new Person("김개똥", 40, "남자")); request.setAttribute("pList", list); // 여기까지의 코드는 이 페이지가 응답되기 전의 Servlet에서 할 코드 %> <table border="1"> <thead> <tr> <th>번호</th> <th>이름</th> <th>나이</th> <th>성별</th> </tr> </thead> <tbody> <%-- 기존 방식 <% if(pList.isEmpty()){ %> <% }else{ %> <% for(Person p : pList){ %> <% } %> <% } %> --%> <c:choose> <c:when test="${ empty pList }"> <tr> <td colspan="3">조회된 사람이 없습니다.</td> </tr> </c:when> <c:otherwise> <c:forEach var="p" items="${ pList }" varStatus="status"> <tr> <td>${ status.count }</td> <!-- index속성:0부터 시작 / count속성:1부터 시작 --> <td>${ p.name }</td> <td>${ p.age }</td> <td>${ p.gender }</td> </tr> </c:forEach> </c:otherwise> </c:choose> </tbody> </table> <br>
JavaScript
복사

5. 반복문 - forTokens

(c:forTokens var="변수명" items="분리시키고자하는문자열" delims="구분자")
구분자를 통해서 분리된 각각의 문자열에 순차적으로 접근하면서 반복 수행
JAVA의 split("구분자") 또는 StringTokenizer와 비슷한 기능 처리
<c:set var="device" value="컴퓨터,핸드폰,TV.에이컨/냉장고.세탁기"/> <ul> <c:forTokens var="d" items="${ device }" delims=",./"> <li>${ d }</li> </c:forTokens> </ul>
JavaScript
복사

6. 쿼리스트링관련 - url, param

url 경로를 생성하고, 쿼리스트링을 정의할 수 있는 태그
c:url var="변수명" value="요청할 url" c:param name="키값" value="전달할값"/ c:param name="키값" value="전달할값"/ /c:url <a href="list.do?cPage=1&num=2">기존방식</a> <c:url var="ttt" value="list.do"> <c:param name="cPage" value="1"/> <c:param name="num" value="2"/> </c:url> <a href="${ ttt }">c:url 이용한 방식</a>
JavaScript
복사