⌨️Server (JSTL)

Jieun·2023년 3월 22일
0

📝 Server 중 EL, 내장객체, JSTL 수업
#230321

📌 JSTL(Jsp Standard Tag Library)

JSP에서 자주 사용되거나 공통적으로 사용되는 Java코드를
표기법을 간단히 태그화하여 표준으로 제공하는 것.

(if, for, 배열/컬렉션 길이, 문자열 치환, 숫자 데이터 형식 변경,
데이터 파싱, scope 변수 선언 등)


✔️ JSTL 라이브러리 등록 방법

1. https://tomcat.apache.org/download-taglibs.cgi 접속

2. 홈페이지 하단 Jar Files -> Impl, Spec, EL 다운로드

3. webapp/WEB-INF/lib 폴더에 추가하기


🏷️ JSTL 사용을 위한 선언방법

.JSP 파일 최상단에 추가하고자 하는 JSTL taglib을 추가
안넣으면 오류뜸

JSP파일 지시자

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

JSTL파일 지시자

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


🏷️ 1. 변수 선언 (c:set 태그)

변수를 선언하고 값을 초기화 하는 태그
(원하는 scope의 내장 객체에 값 세팅)

c:set 속성

1) var : 변수명(setAttribute의 key값)
2) value : 대입될 값
3) scope : 내장 객체 범위 (기본값 : page)

jsp파일 예시

<%-- scriptlet 작성법 예시--%>
<% pageContext.setAttribute("num1", 10); %>
<!-- pageContext 객체를 갖는 page-->
    
<%-- scriptlet 작성법 --%>
<c:set var="num2" value="20"/>
<!--기본값 객체는 page -->

    
${ num1 } / ${num2} 
<!-- 10 / 20 -->
    
<!-- request scope에 num2 세팅  -->
<c:set var="num2" value="300" scope ="request"/>
  
${num2}
<!-- 그냥 num2값이니까 page 우선순위로 20출력 -->

${requestScope.num2 }
<!-- requestScope.num2값이라고 찍어서 말했으니까 300출력 -->

    
<c:set var="temp" value="임시 값" scope="session"/>
>temp : ${temp}
<!-- 눈에보이는것처럼 temp:임시값 -->

결과값


🏷️ 2. 변수 삭제 ( c:remove )

c:set / setAttribute()로 추가된 값 제거

c:remove 속성

1) var : 삭제할 변수명 (key)
2) scope : 삭제할 내장 객체 범위( 기본값 : 모든 범위 )

jsp파일 예시

<c:remove var="temp"/>
temp 삭제 : ${temp} <br>
<!-- temp값 삭제하라고해서 공백임-->
    	
<c:set var="test" value="page" scope="page" />
<c:set var="test" value="request" scope="request" />
<c:set var="test" value="session" scope="session" />
<c:set var="test" value="application" scope="application" />

    	
<!-- 모든 범위 삭제 -->
<%--<c:remove var="test"/> --%>

    	
<!-- request만 삭제하기  -->
<c:remove var="test" scope="request"/>

${pageScope.test} / ${requestScope.test}
/ ${sessionScope.test} / ${applicationScope.test}
<!-- request는 삭제해서 결과값부분에 공백임-->

결과


🏷️ 3. 조건문 - if ( c:if 태그 )

단독 if문 (else 없음)

주의 사항

1) test 속성값 작성은 무조건 EL 구문이여야만 한다.

2) test 속성값 "" 안에는 공백이 존재해서는 안된다.


jsp파일 예시

<%-- sciptlet 작성법 --%>
<% if (1 == 1) { %>
	출력됩니다.
 	<% } %>
 	
<%-- JSTL 작성법 --%>
<c:if test="${1==1}">
	JSTL 작성법
</c:if>

결과



session 범위에 세팅된 test의 값이 "session"인 경우

  • 문자열 비교시 (==) 비교연산자 사용 가능
  • 문자열임을 표기하는 리터럴 == ''(홑따옴표) / "" (쌍따옴표)
  
 <!--위에 선언한 구문 -->
 <c:set var="test" value="page" scope="page" />
 <c:set var="test" value="request" scope="request" />
 <c:set var="test" value="session" scope="session" />
 <c:set var="test" value="application" scope="application" />
  
 		 	
 <c:if test='${ sessionScope.test == "session"}'>
 <h4>sessionScope.test == 'session'</h4>
 </c:if>
 <!--test라는 변수가 sessionScope의 값이 session이면 <h4> 구문을 출력하세요 --> 
 <!-- 위 내용 결과는 True이기 때문에 출력됨-->
  
  
 <c:if test='${ sessionScope.test != "session"}'>
 <h4>sessionScope.test != 'session'</h4>
 </c:if>
 <!--test라는 변수가 sessionScope의 값이 session이 아니면 <h4> 구문을 출력하세요 --> 
 <!-- 위 내용 결과는 False이기 때문에 출력되지 않음-->

결과



🏷️ 4. 조건문 - if ~ else if ~ else ( c: choose, c:when, c:otherwise )

c:choose 태그 : when, otherwise를 감싸는 태그
(현재 태그 내부에 if~else if~else 를 작성하겠다)

c:when 태그 : if / else if 를 나타내는 태그
속성은 test 밖에 없음. (조건 작성 속성)

c:otherwise 태그 : else를 나타내는 태그
아무런 속성도 존재하지 않음

jsp파일 예시

 <c:set var="temp2" value="150" />
    
    <c:choose>
    	<c:when test="${temp2 > 100}">
    		100보다 크다
    	</c:when>
    	<c:when test="${temp2 < 100}">
    		100보다 작다
    	</c:when>
    	
    	<c:otherwise>
    		100과 같다.
    	</c:otherwise>
    </c:choose>
  

결과


🏷️ 5. 반복문 ( c:forEach 태그 )

일단 for + 추가 기능

반복문 속성

1) var : 현재 반복 횟수에 해당하는 변수 (int i)
2) begin : 반복 시 var 시작 값
3) end : 반복이 종료될 var 값
4) step : 반복 시 마다 var의 증가 값 (기본값 1)
5) items : 반복 접근한 객체(배열, 컬렉션 객체)
6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언

varStatus="변수명"
c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다.

varStatus에서 제공되는 값

  • current : 현재 반복 횟수(현재 var 값)
    또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)
  • index : 현재 인덱스값 반환 (0부터 시작)
  • count : 현재 몇바퀴째인지 반복 횟수 반환 (1부터 시작)
  • first : 첫 번째 반복이면 true, 아니면 false
  • last : 마지막 반복이면 true, 아니면 false

예시1 : 일반 for문 형식으로 사용

<c:forEach var="i" begin="1" end="6" step="1">
   		<!-- int i= 1; i<=6; i++ 와 같은 구문 -->
		<h${i}>현재 i값 : ${i} </h${i}>
</c:forEach>

일반 for문 결과

예시2 : 일반 for문 + varStatus 형식 사용

<table border="1">
   	<c:forEach var="n" begin="1" end="10" varStatus="vs"> 
   			
   		<c:choose>
   			<%-- choose 내부에는 무조건 JSP 주석만 작성 --%>
   			<%-- 첫번째 반복일 경우 --%>
   			<c:when test="${vs.first}">
   				<tr>
   					<th class="first"> ${n}</th>
   					<td class="first"> ${n}번 게시글 입니다. </td>
   				</tr>
   			</c:when>
   				
   			<%-- 마지막일 경우 --%>
   			<c:when test="${vs.last}">
   				<tr>
   					<th class="last">${n} </th>
   					<td class="last">${n}번 게시글 입니다. </td>
   				</tr>
   			</c:when>
   				
   			<c:otherwise>
   				<tr>
   					<th> ${n} </th>
   					<td> ${n}번 게시글 입니다. </td>
   				</tr>
   			</c:otherwise>
   		</c:choose>
              
   	</c:forEach>
</table>

일반 for문 + varStatus 형식 결과

예시3 : 향상된 for문 형식으로 사용

<form action="forEach" 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>

향상된 for문 형식 결과

      
profile
👩‍💼👩‍💼➡️➡️➡️👩‍💻👩‍💻 생산자의 삶을 살기 위해 개발공부중

0개의 댓글