[JSP] EL & JSTL

보람·2023년 3월 26일
0

JSP

목록 보기
14/17

1. EL문

  • JSP페이지 내에 자바코드와 HTML코드가 섞여있으면 가독성이 떨어짐
  • EL문과 JSTL문을 사용해 HTML과 같은 태그로만 구성된 일관된 소스코드를 볼 수 있음

(1) EL

1) EL문이란?

  • Expression Language
  • 값을 간결하고 간편하게 출력할 수 있도록 해주는 언어
  • <%= %>, out.println()과 같은 자바코드를 더 이상 사용하지 않고 좀 더 간편하게 출력을 지원하기 위한 도구
  • EL구문
	${...}

2) 저장범위

  • 값을 찾을 때는 작은 scope에서 큰 scope로
  • page > request > session > application
- page scope : 하나의 JSP 페이지에서만 사용
- request scope : 하나의 요청(request)에서만 사용할 수 있는 영역
- session  scope : 하나의 웹 브라우저에서 사용할 수 있는 영역
- application  scope : 웹 어플리케이션 영역

💡 예시

	<!-- request의 result를 가져오고 싶을 때 -->
	${requestScope.result } 입니다.<br>

3) EL 표현식

  • pageContext : JSP 내장객체의 pageContext
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param
	${param.num }<br>
  • paramValues : 같은 이름으로 전달된 질의 문자열의 이름과 값들을 저장하고 있는 map객체
  • header
  • headervalue
  • cookie
  • initparam

4) EL연산자

  • 산술연산자
   +, -, * , /(div), %(mode)
  • 논리연산자
	&&(and), ||(or), !(not)
  • 비교연산자
	==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)

💡 예시

	주소 : http://localhost:8081/el_test.jsp?num=5

	${param.num gt 3 } // true
  • empty연산자 : 값이 null이거나 공백문자인지를 판단하는 연산자
    ${empty ""} -> true
    ${empty null} -> true
    ${empty data} -> 값이 없으면 true, 값이 있으면 data

💡 예시

	주소 : http://localhost:8081/el_test.jsp?num=5
    
	<!-- 파라미터 num의 값이 empty? true/false -->	
	${empty param.num }<br> 
	${not empty param.num }<br> 
	${empty param.num?'값이 비어있습니다':param.num }<br>	

👍 결과

5) EL 예시

request.setAttribute("cnt",30);

- 위의 값 꺼내기

 -> EL문 미사용 : request.getAttribute("cnt"); 	
 -> EL문 사용 : 	 ${cnt}

List list = new ArrayList<>{"1", "test", ...};
request.setAttribute("list",list)

- 위의 값 꺼내기

 -> EL문 미사용 : (List)request.getAttribute("list").get(0)
 -> EL문 사용 : 	 ${list[0]}

2. JSTL

  • JSP Standard Tab Library
  • 연산이나 조건문, 반복문을 편하게 처리
  • jsp페이지 내에서 자바코드를 사용하지 않고도 로직을 구현할 수 있도록 효율적인 방법을 제공

(1) JSTL 사용하기

1) 라이브러리 필요

① 해당 사이트에서 1.1.2 검색 후 ZIP파일 다운

JSTL 라이브러리 다운

② 다운 받은 폴더 > lib > 파일 2개 복사

③ 이클립스에서 build path 잡아주기

2) jsp 파일 상단에 jstl 사용 선언

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

- 접두사 c를 사용해서 jstl 사용 할 것
  • jstl 함수 사용용
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

- 접두사 fn을 사용해서 jstl 함수 사용 할 것

(2) JSTL core 태그

  • c:set : 변수만들 때
	<c:set />
   ** 💡 예시**
	<c:set var="userid" value="apple" scope="page"/>
    <c:set var = "userid" value="${param.userid }"/>
  • c:out : 값 출력할 때 (잘 사용 x -> el문 사용)
	<c:out></c:out>
   ** 💡 예시**
	<c:out value="${userid }"/>
  • c:choose : switch문 -> 내부에 c:when, c:otherwise
	<c:choose></c:choose>
  • c:when : case문
	<c:when></c:when>
  • c:otherwise : default
	<c:otherwise></c:otherwise>
   ** 💡 예시**
	<c:set var="num" value="100"/>
	<c:choose>
		<c:when test="${num gt 50 }">
			이 수는 50보다 큽니다.
		</c:when>
		<c:when test="${num gt 30 }">
			이 수는 30보다 큽니다.
		</c:when>
		<c:when test="${num gt 10 }">
			이 수는 10보다 큽니다.
		</c:when>
		<c:otherwise>
			이 수는 그 외의 숫자 입니다.
		</c:otherwise>
	</c:choose>
  • c:forEach : for문
	<c:forEach></c:forEach>
   ** 💡 예시**
	<c:set var="arData" value="<%=new int[]{10, 20, 30, 40, 50} %>"/>
    
	<c:forEach var="i" begin="0" end="4" step="1">
		${arData[i] }
	</c:forEach>
    
<!-- 같은  변형 --!>

	<c:forEach var="data" items="${arData }">
		${data }
	</c:forEach>
  • c:if : if문
	<c:if></c:if>
   ** 💡 예시**
	<c:if test="${num gt 50 }">
		<script>
			alert("이 수는 50보다 크다");
		</script>
	</c:if>

(3) JSTL function

💡 예시

	<%
		HashMap<String, String > map = new HashMap<>();
		map.put("1","1");
		map.put("2","2");
		map.put("3","3");
		map.put("4","4");
		map.put("5","5");
	%>
	
	<c:set var="map" value="<%=map %>"/>
	<c:set var="str1" value="jstlfn"/>
	
	<br>length(map)			: ${fn:length(map) }
	<br>length(str1)		: ${fn:length(str1) }
	<br>toUpperCase(str1)	: ${fn:toUpperCase(str1) }
	<br>toLowerCase(str1)	: ${fn:toLowerCase(str1) }
	<br>substring(str1)		: ${fn:substring(str1, 1, 3) }
	

👍 결과

profile
안녕하세요, 한보람입니다.

0개의 댓글