* JSTL
   : 커스텀 태그를 표준으로 만든 태그 라이브러리 -> XML 처럼 사용자가 태그를 정의해서 사용 가능
   : <접두어:태그> 형식, 사용 시 태그 라이브러리 정의 필수 <%@ taglib prefix="접두어" uri="uri값" %>

 0. JSTL 태그 종류

라이브러리 하위기능 접두어 uri 값
코어 ★★★ 변수 지원
흐름 제어
URL 처리
c http://java.sun.com/jsp/jstl/core
xml XML 코어
흐름 제어
XML 변환
x http://java.sun.com/jsp/jstl/xml
국제화 ★ 지역
메시지 형식
숫자 및 날짜 형식
fmt http://java.sun.com/jsp/jstl/fmt
데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql
함수 콜렉션 처리
String 처리
fn http://java.sun.com/jsp/jstl/functions


 1. 코어 : 접두어 c (<c:set> <c:remove>)
           : 태그 라이브러리 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

   01. 변수 지원
 ★   - set: 변수 설정 ---> EL 변수 값 설정 (생성, 변경)
         <c:set var="변수명" value="값" [scope="영역"]/>
         <c:set var="변수명" [scope="영역"]> 값 </c:set>

      - remove: 변수 삭제
         <c:remove var="변수명" [scope="영역"/>
         ※ scope 영역을 지정하지 않을 경우, 모든 영역의 "변수명"이 삭제되므로 주의할 것.

      ex. 표현언어로 출력되는 변수

<%
     String str="JSP변수";
     request.setAttribute("st",str);
%>
변수 str1= ${str} <br>     //리퀘스트 객체의 set 태그로 정의된 변수가 아니므로 출력되지 않음
변수 str2= ${st}  <br>     //set 태그로 정의되었기 때문에 출력됨



   02. 흐름 제어
★★  - if: 조건이 true일 경우 바디의 내용을 실행
         <c:if test="조건">
           true일 경우 실행될 내용
         </c:if>
        ※ if는 특정 조건이 참일 경우에만 실행 ---> else가 없으므로, if를 여러번 쓰거나 choose 사용


☆    - choose - when - otherwise : 다중 조건 처리 ---> switch - case - default와 동일한 형식
         <c:choose>
           <c:when test="${member.level=='trial'}">
             실행될 내용1
           </c:when>
           <c:when test="${member.level=='regular'}">
             실행될 내용2
           </c:when>
           <c:otherwise>
             실행될 내용3
           </c:otherwise>
         </c:choose>


★★  - forEach: 콜렉션, Map의 각 항목을 처리
       01. 집합이나 콜렉션 데이터 사용 ★
          <c:forEach var="변수" items="아이템"> --> items의 자료구조 값을 var에 넣어 차례대로 출력
            ... ${변수 사용} ...
          </c:forEach>

       02. 특정 범위값만큼 반복 
          <c:forEach var="변수" begin="변수 시작값" end="변수 끝값" [step="값"]>
            ${변수 사용}
          </c:forEach>

       03. varStatus 속성
          <c:forEach var="item" items="<%=someItemList %>" varStatus="status">
            ${status.index+1} 번째 항목 : ${item.name}
          </c:forEach>

       - forTokens: 구분자로 분리한 각각의 토큰을 처리 ---> 구분자는 여러 개 사용 가능!
          <c:forTokens var="alphabet" items="a,b.c,d;e,f/g,h.i,j;k,l/m,n" delims=",/.;">
            <b>${alphabet}</b>&nbsp;
          </c:forTokens>
          
       +) index: 루프 실행에서 현재 인덱스            count: 루프 실행 횟수           current: 콜렉션 중 현재 루프에서 사용할 객체
           items: 순차적인 자료구조 (배열, list, map) -> 단, request로 공유된 name만 가능!
           begin: 변수 시작값            end: 변수 종료 값             step: 변수 증가치 ( begin:1 end:10 step:2 -> 1,3,5,7,9  )


   03. URL 처리
☆     - import: url을 사용해 다른 자원(내/외부 페이지)의 결과를 삽입
         : 상대 url을 import 시 <jap:include>와 동일한 동작
          <c:import url="URL" [var="변수명"] [scope="영역"] [charEncoding="인코딩세팅"]>
            <c:param name="파라미터명" value="값"/>
            ...
          </c:import>
       - redirect: 지정한 경로로 이동 (새로 페이지를 불러오는 방식)
          <c:redirect url="URL" [context="콘텍스트 경로"]>
            <c:param name="이름" value="값" />
          </c:redirect>
       - url: url 재작성 (절대경로, 상대경로를 알맞게 생성)
         : 웹 컨텍스트 내에서 절대경로 사용 시 컨텍스트 경로 자동 추가
          <c:url value="URL" [var="변수명"] [scope="영역"]>
            <c:param name="이름" value="값" />
          </c:url>

   04. 기타 태그
★   - out: jspWriter의 내용을 처리 후 출력 (보통 EL 쓰는데 병행함)
       - catch: 예외 처리
<c:catch var="err">
  <%=10/0%>
</c:catch>
<h3>오류 : <c:out value="${err}"/></h3>




 2. 국제화 : 접두어 fmt (<c:set> <c:remove>)
           : 태그 라이브러리 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

   01. 숫자 및 날짜
       - formatNumber: 숫자 포맷

★   - formatDate: Date 객체를 포맷 ---> SimpleDataFormat 과 동일한 효과

속성 표현식/EL 타입 설명
value 사용 가능 java.util.Date 포맷할 날짜 및 시간 값
type 사용 가능 String 날짜, 시간, 둘다 할지 여부
dateStyle 사용 가능 String 날짜 포맷팅 스타일
timeStyle 사용 가능 String 시간 포맷팅 스타일
pattern 사용 가능 String 직접 파싱할 때 사용할 양식
var 사용 불가 String 결과 저장할 면수명
scope 사용 불가 String 변수 저장할 영역


 3. 함수 : 접두어 fn 
           : 태그 라이브러리 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 4. 데이터베이스 : 접두어 sql
           : 태그 라이브러리 <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

   - 서버 연결 <sql:setDataSource>
<sql:setDataSource var="conn" driver="oracle.jdbc.driver.OracleDriver" 
                                         url="jdbc:oracle:thin:@localhost:1521:xe"
                                         user="scott" 
                                         password="tiger"/>

   - DML(insert, update, delete)  <sql:update>
<sql:update dataSource="${conn}">   //dataSource="${서버 연결에 쓴 변수명(var)}"으로 서버에 연결
             INSERT INTO test (num, name) VALUES (1, '홍길동')   //바디에 sql문 삽입
</sql:update>

   - select  <sql:query>
<sql:query var="rs" dataSource="${conn}">   //var=resultSet 역할 ---> items="${rs.rows}" 처럼 사용
             SELECT * FROM test 
</sql:query>

   - parameter 값 입력  <sql:param>  
<sql:query var="rs" dataSource="${conn}">
             SELECT * FROM test WHERE name=?
             <sql:param>홍길동</sql:param>   //파라미터값 필요한 태그의 sql문 아래에 차례대로 삽입
</sql:query>

 

 

+ Recent posts