5/14(금) EL(2)

민국·2021년 5월 14일
0

- 커스텀 액션 태그 (Custom Action)

: jsp 페이지에서 바로 사용 불가능 (라이브러리 설치 후 사용하고자 하는 jsp페이지에 연동 해야됨)
커스텀 액션태그는 모든 태그명 앞에 jsp: 이외의 접두어 붙음
제공되고 있는 대표적인 유용한 라이브러리가 있음(jstl)

JSTL이란?

JSP Standard Tag Library의 약자로 JSP에서 사용되는 커스텀 태그로,
공통적으로 사용되는 코드의 집합을 의미
보다 편리하게 사용할 수 있도록 태그화하여 표준으로 제공함

JSTL 선언 방법

JSTL을 사용하고자 하는 해당 jsp 페이지 상단에

taglib 지시어 사용해서 선언해야됨

<표현법> : <%@ taglib prefix="접두어" uri= "라이브러리 파일" %>

1) JSTL Cored Library

: 변수와 조건문, 반복문 등의 로직과 관련된 문법을 제공

(1) 변수

변수 선언 및 초기화 ( c: set var ="변수명" value ="초기값" scope="scope영역"(생략가능))

  • 변수 선언하고 초기값을 대입해두는 기능을 제공
  • 변수 선언시 scope 지정가능 (생략시 기본 scope는 pageScope)
  • 즉, 해당 scope에 setAttribute를 통해 key-value 형태로 값을 담아놓는거라고 생각하면 됨!

유의사항
1) 변수타입은 별도로 선언하지 않음!
2) 초기값은 반드시 지정해야됨
3) c:set을 통해 선언된 변수는 EL을 이용해서 사용 (단, 스크립틀릿에서는 사용 불가)

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:set var="num1" value="10" />
	<c:set var="num2" value="20" scope="request" /> 
    	<%-- 마지막에 /> 꼭 붙여야 됨 아니면 </c:set> 이렇게 --%>
	<!-- request.setAttribute("num2", "20") 이것과 같은 맥락 -->
	
	num1 변수값 : ${ num1 } <br>
	num2 변수값 : ${ num2 } <br>
    
    	<c:set var="result" value="${ num1 + num2 }" scope="session" />
	${ num1 } + ${ num2 } = ${ result } <br><br>
	
	${ pageScope.num1 } <br>
	${ requestScope.num2 } <br>
	${ requestScope.result } <br>
	${ sessionScope.result } <br><br>
</body>
</html>

변수 삭제 (c:remove var = "삭제하고자 하는 변수명" (scope="scope영역" 생략가능))

  • 지정한 변수를 scope에서 찾아서 삭제시켜주는 태그
  • scope 생략시 모든 scope 영역에서 다 찾아서 삭제됨
  • 즉, 해당 scope에 removeAttribute 를 통해 삭제하는거라고 생각하면 됨
	<c:set var="result" value="9999" scope="request" />
	
	삭제 전 result : ${ result } <br><br>
	
	1) 특정 scope 지정해서 삭제 <br>
	<c:remove var="result" scope="request" />
	
	request에서 삭제 후 result : ${ result } <br>
	
	2) 모든 scope에서 삭제 <br>
	<c:remove var="result" />
	
	모두 삭제 후 result : ${ result } <br>

변수 출력(c:out value="출력하고자 하는 값" (excapeXml="true | false" default="기본값" 생략가능))

  • 데이터를 출력하고 할 때 사용되는 태그
	<c:set var="outTest" value="<b>출력테스트</b>" />
	
	<c:out value="${ outTest }" /> <!-- <b>출력테스트</b> 으로 출력 --> 
    <!-- escapeXml의 기본값 == true == 태그 해석 안됨(문자열 취급) -->
	<c:out value="${ outTest }" escapeXml ="false" /> 
    <!-- 태그로서 해석됨 -->
	
	<c:out value="${ result }" /> <br> 
    <!-- 선언되지 않은 변수여서 아예 안뜸 -->
	<c:out value="${ result }" default="현재 답변이 없습니다" /> 
    <!--  default 속성을 통해 기본값으로 뭘 뜨게할지 설정 --> 

(2) 조건문 (IF)

: (c:if test="")

  • JAVA의 단일 if문과 비슷한 역할을 수행
  • 조건식 test 속성에 작성 (단, EL구문으로 기술해야 됨)
	<!--  num1:10 num2:20 -->
	- 기존 방식
	<%--
		<% if(num1 > num2) { %>
		<% } %>	
	 --%>
	- EL 방식
	<c:if test="${ num1 gt num2 }">
		<b> num1이 더 큽니다</b> <br>
	</c:if>
	
	<c:if test="${ num le num2 }">
		<b> num2가 더 큽니다</b> <br>
	</c:if>
	<%--
	<c:set var="str" value="안녕하세요" />
	<% if(str.equals("안녕하세요")){ %>
	
	<% } %>
	 --%>
	
	<c:if test="${ str eq '안녕하세요' }">
		<b>일치합니다.</b>
	</c:if>
	<c:if test="${ str ne '안녕하세요' }">
		<b>일치하지 않습니다.</b>
	</c:if>

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

  • JAVA의 if-else, if-elseif 또는 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>

(4) 반복문 - forEach

  • for loop문
    (c:forEach var ="변수명" begin="초기값" end="끝값" (step="반복시증가값"))
  • for each문 (향상된 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>
	  <%-- 
	  <%
	  	String [] colors = { "red", "blue", "yellow"};
	  %>
	  <% for(String s: colors){ %>
	  <% } %>
	  --%>
	  
	  <!-- colors : red, blue, yellow, pink, green -->
     

배열 반복문으로 차곡차곡 담기

	  <%
	  	ArrayList<Person> list = new ArrayList<>();
		list.add(new Person("홍길동", 20, '남'));
		list.add(new Person("김말똥", 20, '여'));
		list.add(new Person("김개똥", 20, '남'));
		
		request.setAttribute("pList", list);
	  %>
	  
	  <table border="1">
	  	<thead>
	  		<tr>
	  			<th>순번</th>
	  			<th>이름</th>
	  			<th>나이</th>
	  			<th>성별</th>
	  			<th>인덱스</th>
	  		</tr>
	  	</thead>
	  	<tbody>
	  		<%-- 
	  		<% for( Person p : list){ %>
	  		
	  		<% } %>
	  		--%>
	  		
	  		<c:forEach var="p" items="${ pList }" varstatus="status">
	  			<tr>
	  				<td>${ status.count }</td> 
                   <!-- 순차적으로 인덱스 접근할 때 마다 status라는 변수명으로 접근해두겠다. 
                   count속성(순번):1부터 -->
	  				<td>${ p.name }</td>
	  				<td>${ p.age }</td>
	  				<td>${ p.gender }</td>
	  				<td>${ status.index }</td> 
                   <!-- index속성(인덱스):0부터 -->
	  			</tr>
	  		</c:forEach>
	  	</tbody>
	  </table>

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>

6. 쿼리스트링

<c:url var ="변수명" value="요청할 url">
<c:param name="키값" value="전달할 값"/>
</c:url>

  • url 경로를 생성하고, 해당 url의 쿼리스트링을 정의할 수 있는 태그
    변수명 = 요청할 url?키값=전달할값&키값=전달할값...
	  <a href="list.do?currentPage=1&num=2">기존방식</a> <br>
  <c:url var="url" value="list.do">
  	<c:param name="currentPage" value="1" />
  	<c:param name="num" value="2" />
  	<!-- url == "list.do?currentPage=1&&num=2" -->
  </c:url>
  
  <a href="${ url }"> c:url 사용방식</a>
profile
새싹개발자

0개의 댓글