본문 바로가기
Programming/Java * Spring

[JSP] EL(Expression Language), JSTL(JSP Standard Tag Library) 정리

by 고막고막 2019. 6. 10.

EL(Expression Language)

*용도: 
자바 빈의 프로퍼티나 맵, 리스트, 배열의 값을 보다 쉽게 꺼내게 해주는 기술. JSP에서는 주로 보관소에 들어 있는 값을 꺼낼 때 사용. EL을 사용하면 액션 태그를 사용하는 것보다 훨씬 더 간단히 보관소에 들어 있는 객체에 접근하여 값을 꺼내거나 메서드를 호출할 수 있다.

*검색범위 지정:
pageScope → JspContext
requestScope   ServletRequest
sessionScope   HttpSession
applicationScope   ServletContext

**EL이 공유공간에 접근할 때 영역(Scope)을 지정하지 않으면
pageScope-> requestScope -> sessionScope -> applicationScope 범위가 작은 공간순으로 접근한다.

* 배열에서 값 꺼내기

<% 
request.setAttribute("scores", new int[]{90,80,70,100}); 
%>
${requestScope.scores[2]}<br>
${scores[2]}<br>


*List 객체에서 값 꺼내기

<%
List<String> nameList = new LinkedList<String>();
nameList.add("홍길동");
nameList.add("일지매");
nameList.add("장길산");
request.setAttribute("nameList", nameList);
%>
${nameList[1] }<br>
${nameList[2] }<br>


* Map 객체에서 값 꺼내기

<%
Map<String, String> map = new HashMap<String, String>();
map.put("s01", "홍길동");
map.put("s02", "일지매");
map.put("s03", "장길산");
request.setAttribute("map", map);
%>
${map.s02}<br>
${map.s01}<br>

JSTL(JSP Standard Tag Library)

* 준비: JSTL 태그 라이브러리 선언이 필요하다

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

* 용도:
EL과 함께 사용되어 JSP에서의 자바코딩을 줄임으로 디자이너 및 퍼블리셔와의 작업을 원활하게 할 수 있다. EL이 가지지 못한 조건문/반복문의 사용이 특히 중요하다. Map, List, 배열을 forEach으로 접근할 수 있으며, if문도 사용 가능, switch~case문 사용도 가능하다.

* 문법: c:out은 value값이 출력되고 null이면 문자열이 출력된다

<c:out value="안녕하세요"/><br>
<c:out value="${null}">반갑습니다</c:out><br>
<c:out value="안녕하세요">반갑습니다</c:out><br>
<c:out value="${null}"/><br>

*  set tag : 공유저장공간을 지정해주지 않으면 jspContext(현재 페이지)에 저장

<h3>값 설정 방식</h3>
<c:set var="username1" value="홍길동"/>
<c:set var="username2">임꺽정</c:set>
${username1}<br>
${username2}<br>

<h3>기본 보관소 - page</h3>
${pageScope.username1}<br>
${requestScope.username1}<br>

<h3>보관소 지정 - scope 속성</h3>
<c:set var="username3" scope="request">일지매</c:set>
${pageScope.username3}<br>
${requestScope.username3}<br>

<h3>기존의 값 덮어씀</h3>
<% 
pageContext.setAttribute("username4", "아이유"); 
%>
기존 값=${username4}<br>
<c:set var="username4" value="하이유"/>
새 값=${username4}<br>

* if tag 

<c:if test="${10 > 20}" var="result1">
10은 20보다 크다<br>
</c:if>
${result1}<br>

<c:if test="${10 < 20}" var="result2">
10은 20보다 작다<br>
</c:if>
${result2}<br>

* choose tag(자바에서의 switch~case문)

<c:set var="userid" value="admin"/>
<c:choose>
	<c:when test="${userid=='hong'}">홍길동님 반갑습니다.</c:when>
	<c:when test="${userid=='leem'}">임꺽정님 반갑습니다.</c:when>
	<c:when test="${userid=='admin'}">관리자 전용 페이지입니다.</c:when>
	<c:otherwise>등록되지 않은 사용자입니다.</c:otherwise>
</c:choose>

* forEach tag :
java.util.collection 구현체(ArrayList, LinkedList, Vector, EnumSet 등), java.util.Iterator 구현체, java.util.Enumeration 구현체, java.util.Map 구현체에서 반복문 사용 가능

<%
request.setAttribute("nameList", new String[]{"혜영", "양희", "강일", "수지", "은진"});
%>
<ul>
<c:forEach var="name" items="${nameList}" begin="1" end="3">
<li>${name}</li>
</c:forEach>
</ul>

<%
ArrayList<String> nameList3 = new ArrayList<String>();
nameList3.add("류혜영");
nameList3.add("하양희");
nameList3.add("서강일");
nameList3.add("이은진");
nameList3.add("한소미");
request.setAttribute("nameList3", nameList3);
%>
<ul>
<c:forEach var="name" items="${nameList3 }">
<li>${name}</li>
</c:forEach>
</ul>