국비 51-2

냐아암·2023년 7월 3일
0

국비

목록 보기
67/114

JSTL

JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를 쉽고, 표기법을 간단히 할 수 있도록 태그화(Tag Library)하여 표준(Standard)으로 제공함

📍 변수 선언(c:set)

  • 변수를 선언하고 값을 초기화하는 태그(초기화는 무조건 수행)

  • c:set 태그로 선언된 변수는 EL을 이용해서 출력할 수 있다.

  • c:set 태그 속성
    1) var : 변수명
    2) value : 대입될 값
    3) scope : 변수 범위(기본값 : page)

    💡 scope 미지정 시 좁은 범위부터 탐색

📍 변수 삭제(c:remove)

  • 지정한 변수(c:set/ setAttribute()추가된 변수 삭제)
  • scope 선택 가능(미작성 시 모든 scope에서 일치하는 변수명 모두 제거)
  • c:remove 속성

📍 조건문(c:if)

  • 조건문만 작성할 수 있는 태그
  • if문만가능하고 else는 불가능(c:else 존재하지 않음)

💡 조건문 - if ~ else if ~ else (c:choose, c:whem. c:otherwise)

📍 c:forEach

  • Java의 for문 + 추가 기능을 가지고 있는 태그

  • 속성

    • var : 현재 반복 횟수에 해당하는 변수 (== int i)

    • begin : 반복 시작 값

    • end : 반복 종료 값

    • step : 반복 시마다 증가할 값(증감식), 미작성 시 기본값 1

    • items : 반복 접근할 객체명(Collection 객체) // 향상된 for문

    • varStatus : 현재 반복에 해당되는 상태 정보
      - 제공되는 값
      1) current : 현재 반복 횟수 또는 현재 접근 중인 객체
      2) index : 현재 객체가 몇 번째 인덱스인지 반환(0부터 시작)
      3) count : 현재 반복문이 몇 바퀴 반복 중인지 반환(1부터 시작)
      4) first : 첫 번째 반복일 경우 true 반환
      5) last: 마지막 반복일 경우 true 반환

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSTL_1</title>
</head>
<body>
    
    <h1>JSTL(Jsp Standard Tag Library)</h1>

    <pre>
        JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를
        쉽고, 표기법을 간단히 할 수 있도록 태그화(Tag Library)하여
        표준(Standard)으로 제공함

        (if, for, scope 변수 선언, 데이터 파싱 등)
    </pre>

    <h3>JSTL 라이브러리 등록 방법</h3>
    <ol>
        <li> https://tomcat.apache.org/download-taglibs.cgi 접속 </li>
        <li> jar files -> impl, EL, Spec 다운로드 </li>
        <li> WEB-INF/lib 폴더에 추가</li>
    
        <!-- webapp 폴더는 서버 구동 시 인터넷에 배포되는 폴더
             -> 인터넷 상에서 수행되어야 되는 코드, 파일 등을
                모두 webapp폴더 내부에 저장함.
        -->
    </ol>

    <hr>

    <h3>JSTL 사용을 위한 선언 방법</h3>

    <pre>
        JSTL을 사용하고자 하는 JSP가 있을 경우
        해당 JSP 최상단에 JSTL 라이브러리를 추가하는 지시자 taglib를 작성해야 한다.
        
        prefix : 접두사. 다른 태그와 구별할 수 있는 namespace
        		(태그 앞에 붙는 태그명)
        		
        url(Uniform Resource Locator) : 인터넷에서 특정 자원 위치 지정(주소)
        uri(Uniform Resource Idenrifier) : 네트워크 상에서 자원을 구별하는 식별자
        									(자원을 구분하는 유일한 주소)
        									
        -> uri에 작성하는 주소는 네트워크 상의 주소가 아님
           다운로드받은 라이브러리 내부 구분 주소
    </pre>
    
    <h3>1. 변수 선언(c:set)</h3>
    <pre>
    	- 변수를 선언하고 값을 초기화하는 태그(초기화는 무조건 수행)
    	
    	- c:set 태그로 선언된 변수는 EL을 이용해서 출력할 수 있다.
    	
    	특징 1 : 변수 타입을 지정하지 않는다.
    	특징 2 : 변수의 범위(scope) 지정할 수 있다.
    	
    			-> c:set은 내장 객체에 속성을 추가하는 태그
    				(page, request, session, application)
    				
    	- c:set 태그 속성
    	1) var : 변수명
    	2) value : 대입될 값
    	3) scope : 변수 범위(기본값 : page)
    </pre>
    
    <!-- <태그명/> : 태그가 시작되자마자 종료 == 내용이 없는 요소 -->
    <c:set var="num" value="100"/> <!-- page -->
    
    <c:set var="num" value="200" scope="request"/>
    
    <!-- scope 미지정 시 좁은 범위부터 탐색(우선순위) -->
    ${ num } + ${ requestScope.num } =${ num + requestScope.num }
    
    <hr>
    
    <h3>2. 변수 삭제(c:remove)</h3>
    
    <pre>
    	- 지정한 변수(c:set/ setAttribute()추가된 변수 삭제)
    	- scope 선택 가능
    	- scope 미작성 시 모든 scope에서 일치하는 변수명 모두 제거
    	
    	- c:remove 속성
    	var : 삭제할 변수명
    	scope : 삭제할 범위(기본값 모든 범위)
    </pre>
    
    <!-- session scope 변수 선언 -->
    <c:set var = "num" value="300" scope="session"/>
    
    <ul>
    	<li>page : ${pageScope.num }
    	<li>request : ${requestScope.num }
    	<li>session : ${sessionScope.num }
    </ul>
    
    request 범위의 num 변수 삭제
    <c:remove var="num" scope="request"/>
    <ul>
    	<li>page : ${pageScope.num }
    	<li>request : ${requestScope.num }
    	<li>session : ${sessionScope.num }
    </ul>
    
    모든 범위의 num 변수 삭제
    <c:remove var="num"/>
    <ul>
    	<li>page : ${pageScope.num }
    	<li>request : ${requestScope.num }
    	<li>session : ${sessionScope.num }
    </ul>
    
    <hr>
    
    <h3>3. 조건문 - if(c:if 태그)</h3>
    
    <pre>
    	- 조건문을 작성할 수 있는 태그
    	- if문만가능하고 else는 불가능(c:else 존재하지 않음)
    	
    	- c:if 속성
    	test : 조건을 작성하는 속성. 단, EL로만 작성할 수 있다.
    </pre>
    
    <c:set var = "temp" value="10"/>
    
    <c:if test="${ temp>20 }" >
    	<!-- test에 작성된 조건이 만족(true)할 때만 화면에 출력됨 -->
    	temp는 20보다 크다.
	</c:if>
	
	<!-- else 구문이 없어서 반대되는 조건을 별도 작성 -->
	<c:if test="${ temp<=20 }" >
    	temp는 20보다 작거나 같다.
	</c:if>
	
	<hr>
	
	<h3>4. 조건문 - if ~ else if ~ else (c:choose, c:whem. c:otherwise)</h3>
	
	<pre>
		c:choose 내부에
		c:when (if/else if),
		c:otherwise(else) 태그를 작성하는 형태
	</pre>
	
	<c:set var="temp2" value="10"/>
	
	<c:choose>
		<c:when test="${temp2>10 }">
			10보다 크다
		</c:when>
		
		<c:when test="${temp2<10 }">
			10보다 작다
		</c:when>
		
		<c:otherwise>
			10과 같다
		</c:otherwise>
	</c:choose>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSTL_2</title>
</head>
<body>

    <h1>c:forEach 태그</h1>

    <pre>
        - Java의 for문 + 추가 기능을 가지고 있는 태그 

        - 속성

        var : 현재 반복 횟수에 해당하는 변수 (== int i)
        begin : 반복 시작 값
        end : 반복 종료 값
        step : 반복 시마다 증가할 값(증감식), 미작성 시 기본값 1

        items : 반복 접근할 객체명(Collection 객체) // 향상된 for문

        varStatus : 현재 반복에 해당되는 상태 정보
        - 제공되는 값
            1) current : 현재 반복 횟수 또는 현재 접근 중인 객체
            2) index : 현재 객체가 몇 번째 인덱스인지 반환(0부터 시작)
            3) count : 현재 반복문이 몇 바퀴 반복 중인지 반환(1부터 시작)
            4) first : 첫 번째 반복일 경우 true 반환
            5) last: 마지막 반복일 경우 true 반환

    </pre>
    
    <hr>
    
    <h3>일반 for문 형식으로 사용</h3>
    
    <c:forEach var="i" begin="1" end="6" step="1">
    	<h${i}>${i}번째 반복 중 입니다.</h${i}>
    </c:forEach>
    
    <table border=1>
    	<c:forEach var="i" begin="1" end="10" step="1">
    		<tr>
    			<th>${i}</th>
    			<td>${i}번째 게시글입니다.</td>
    		</tr>
    	</c:forEach>
    </table>
    
    <hr>
    
    <h3>향상된 for문 형식으로 사용</h3>
    
    <form action="forResult.jsp" method="get">
    	  <input type="checkbox" name="lang" value="java"> java <br>
	      <input type="checkbox" name="lang" value="sql"> sql <br>
	      <input type="checkbox" name="lang" value="jdbc"> jdbc <br>
	      <input type="checkbox" name="lang" value="html"> html <br>
	      <input type="checkbox" name="lang" value="css"> css <br>
	      <input type="checkbox" name="lang" value="javascript"> javascript <br>
	      <input type="checkbox" name="lang" value="jQuery"> jQuery <br>
	      <input type="checkbox" name="lang" value="servlet"> servlet <br>
	      <input type="checkbox" name="lang" value="jsp"> jsp <br>
	   
	      <button>제출</button>
    </form>
    
</body>
</html>
profile
개발 일지

0개의 댓글