본문 바로가기

개발/Web

[Java] JSP - JSTL Core Library

< JSTL Core Library >

- JSP에서 사용하는 커스텀 액션 태그

- 공통적으로 사용하는 코드들의 집합을 보다 쉽게 사용할 수 있도록 태그화해서 표준으로 제공하는 라이브러리

 

 

* 라이브러리 다운로드 후  추가 방법
1) http://tomcat.apache.org/download-taglibs.cgi 로 접속 
2) Standard-1.2.5 Jar files 4개 다운로드
3) WEB-INF/lib폴더에 추가

 

*  JSTL 선언 방법
JSTL을 사용하고자 하는 jsp페이지 상단에 taglib지시어를 사용해서 선언함
[ 표현법 ]
<@ taglib prefix="접두어" uri="라이브러리 파일상의 uri주소">

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

 

1. 변수(속성 ==  attribute)


* 변수 선언(<c:set var="변수명" value="리터럴" scope="스코퍼영역지정(생략가능)" />)
- 변수를 선언하고 초기값을 대입해두는 기능을 제공
- 더 나아가서 해당 변수를 어떤 scope영역에 담아둘건지 지정 가능함
  (생략시 pageScope에 담김)
  => 해당 scope영역에 setAttribute라는 메소드를 이용해서 key + value형태로 데이터를 담아둔다라고 생각하면 됨
  => c:set을 통해 선언된 변수는 EL로 접근해서 사용 가능 (스크립팅 원소로는 접근 불가능)
  
* 주의사항
- 변수의 타입을 별도로 지정하지 않음
- 반드시 해당 변수에 담아두고자 하는 값(value속성에 담길 리터럴)을 무조건 셋팅해야 함
   (즉, 선언과 동시에 초기화)

 

<c:set var="num1" value="10" /><!-- pageScope에 담김 == pageContext.setAttribute("num1", 10); -->
<c:set var="num2" value="20" scope="request" /><!-- requestScope에 담김 == request.setAttribute("num2", 10); -->

 

 

* 변수 삭제 (<c:remove var="제거하고자하는 변수명" scope="스코프영역지정(생략가능)" escapeXml="true(기본값, 생략가능)" >)
- 해당 변수를 scope에서 찾아서 제거하는 태그
- scope 지정 생략 시 모든 scope에서 해당 변수를 다 찾아서 제거함
=> 해당 scope에 .removeAttribute("키값"); 메소드를 이용해서 제거하는 것과 같다고 생각하면 됨

1) 특정 scope를 지정해서 삭제 <br>
<c:remove var="result" scope="request" />
result : ${ result }<br>

2) 모든 scope에서 삭제 <br>
<c:remove var="result" />
모든 scope에서 삭제 후 result : ${ result }<br>

 

* 변수 출력 (<c:out value="출력하고자하는 값" default="기본값(생략가능)" />)
- 데이터를 출력하려고 할 때 사용하는 태그
- default : 기본값, value속성에 출력하려는 값이 없을 경우 대체해서 기본값으로 출력할 내용들을 기술(생략 가능)

result를 EL구문으로 출력 : ${ result }<br>
result를 c:out으로 출력 : <c:out value="${ result }" /><br>
result를 c:out으로 출력할건데 default를 지정해서 출력 : <c:out value="${ result }" default="값이 없음" /><br><br>

<!-- escapeXml 테스트 -->
<!-- 테스트를 하기 위한 변수 선언 -->
<c:set var="outTest" value="<b>출력테스트</b>" />

outTest를 c:out으로 출력할건데 : <c:out value="${ outTest }" /><br>
outTest를 c:out으로 출력할건데 escapeXml속성을 false로 지정하고 출력 : <c:out value="${ outTest }" escapeXml="false" /><br>

 

 

2. 조건문 - if(<c:if test="조건식"> 조건이 true일 경우 실행할 내용  </c:if>)


- JAVA의 단일 if문과 비슷한 역할을 하는 태그
- 조건식은 test라는 속성에 작성 (조건을 작성할 경우에는 반드시 EL구문으로 작성해야 함)

<c:if test="${ num1 gt num2 }">
    <b>num1이 num2보다 큽니다.</b>
</c:if>

<c:if test="${ num1 le num2 }">
    <b>num1이 num2보다 작거나 같습니다.</b>
</c:if>

 

 

3. 조건문 - choose, when, otherwise


[ 표현법 ]
<c:choose>
    <c:when test="조건1"> ~~ </c:when>
    <c:when test="조건2"> ~~ </c:when>
    ...
    <c:otherwise> ~~ </c:otherwise>  => else블럭 / switch문의 default
</c:choose>

- JAVA의 if-else, switch문과 비슷한 역할을 하는 태그
- 각 조건들을 c:choose의 하위요소로 c:when을 통해서 작성
- c:otherwise에는 조건을 적어주지 않음

<c:choose>
    <c:when test="${ num1 eq 20 }"> <!-- if 블럭 -->
        <b>num1은 20</b>
    </c:when>
    <c:when test="${ num1 eq 10 }"> <!-- else if 블럭 -->
        <b>num1은 10</b>
    </c:when>
    <c:otherwise> <!-- else 블럭 -->
        <b>나는 조건이 없어</b>
    </c:otherwise>
</c:choose>

 

 

4. 반복문 - forEach

 

[ 표현법 ]
- for loop문
<c:forEach var="변수명" begin="초기값" end="끝값" step="증가시킬값(생략가능)">
반복적으로 실행할 코드
</c:forEach>
=> step은 생략 시 기본값이 1

<c:forEach var="i" begin="1" end="10">
    반복 확인 : ${ i } <br>	
</c:forEach>

<c:forEach var="i" begin="1" end="6">
    <h${ i }>태그 안에도 적용이 가능하다.</h${ i }>
</c:forEach>

- 결과 -


- 향상된 for문
<c:forEach var="변수명" items="순차적으로접근할 배열명 또는 컬렉션명">
</c:forEach>

<c:set var="colors">
    green, blue, yellow, red, black, brown
</c:set>

colors 값 : ${ colors } <br>

<ul>
    <c:forEach var="c" items="${ colors }">
        <li style="color:${ c }">${ c }</li>
    </c:forEach>
</ul>

- 결과 -

 

5. 반복문 - forTokens


[ 표현법 ]
<c:forTokens var="각값을 보관할 변수명" items="분리시키고자하는 문자열" delims="구분자">
반복적으로 실행할 구문(출력만)
</c:forTokens>

- 구분자를 통해서 분리된 각각의 문자열에 순차적으로 접근하면서 반복 수행
- JAVA의 split("구분자") 또는 StringTokenizer와 비슷한 역할

<c:set var="dream" value="로또당첨,집사기/퇴근하기-잠자기.주식대박" />

<ul>
    <c:forTokens var="d" items="${ dream }" delims=",/-.">
        <li>${ d }</li>
    </c:forTokens>
</ul>

- 결과 -

 

6. 쿼리스트링 관련 태그


[ 표현법 ]
<c:url var="변수명" value="요청할url">
  <c:param name="키값" value="밸류값" />
  <c:param name="키값" value="밸류값" />
  <c:param name="키값" value="밸류값" />
  <c:param name="키값" value="밸류값" />
  <c:param name="키값" value="밸류값" />
...
</c:url>

- url경로를 생성하고, 쿼리스트링을 정의할 수 있는 태그

<a href="list.do?cPage=1&num=2">기존 방식으로 요청</a>

<!-- c:url -->
<c:url var="query" value="list.do">
    <c:param name="cpage" value="1" />
    <c:param name="num" value="2" />
</c:url>

<a href="${ query }">c:url방식으로 요청</a>