EL, JSTL

EL과 JSTL은 JSP 사용의 불편함을 감소시키고 가독성을 증가시키기 위해 사용하는 언어/라이브러리 이다.

EL (Expression Language)

EL은 데이터를 표현하기 위한 언어로 JSP 2.0에 추가된 기능이다.

EL 구문

EL 구문은 ${...} 내에 표현식으로 표현한다.
[] 연산자나 .을 이용하여 객체 프로퍼티에 접근할 수 있다.

${userinfo["name"]}
${userinfo.name}

실제 동작은 pageContext의 findAttribute() 메소드와 동일한데 가까운 scope부터 탐색한다.
page -> request -> session -> application

기존 JSP 표현식과 비교하자면 아래와 같다.

<%-- 기존 표현식 --%>
<%= request.getParameter("num") %>
<%= request.getAttribute("userinfo").getZipDto().getAddress() %>

<%-- EL 표현식 --%>
${param.num}
${userinfo.zipDto.address}

EL 연산자

기존의 Java 연산자와 크게 다르지 않다.

산술 연산자+, -, *, / (div), % (mod)
관계 연산자==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
논리 연산자&&(and), ||(or), !(not)
3항 연산자조건? 값1 : 값2
empty 연산자값이 null이거나, 문자열/배열/Map/Collection 비어있으면 true
${10 + 20}
${10 mod 20}
${10 > 11}
${10 lt 11}
${a || b}
${!a}
${empty userinfo}
${not empty param.name}

EL 내장객체

JSPpageContextpageContext 객체를 참조할 때
scopepageScopepage scope에 저장된 객체에 접근
 requestScoperequest scope에 저장된 객체에 접근
 sessionScopesession scope에 저장된 객체에 접근
 applicationScopeapplication scope에 저장된 객체에 접근
요청 매개변수paramgetParameter()를 통해 파라미터값 반환
 paramValuesgetParameterValues()를 통해 파라미터 배열 반환
요청 헤더headergetHeader()를 통해 헤더 정보 반환
 headerValuesgetHeaders()를 통해 헤더 배열 반환
쿠키cookiegetCookies()를 통해 쿠키 정보 반환
초기화 매개변수initParam초기화 파라미터를 추출

JSTL (JSP Standard Tag Library)

JSTL은 XML처리, 조건문, 반복문, 국제화 같은 일을 처리하기 위해 표준화된 태그 라이브러리
스크립틀릿(Scriptlet)을 사용하지 않고 액션을 통해 간단히 처리할 수 있는 방법을 제공한다.

JSTL 태그 종류

libraryprefixfunctionURI
corec변수 지원, 흐름제어, URL 처리http://java.sun.com/jsp/jstl/core
XMLxXML 코어, 흐름제어, XML변환http://java.sun.com/jsp/jstl/xml
formattingfmt지역, 메세지 형식, 숫자 및 날짜 처리http://java.sun.com/jsp/jstl/fmt
databasesqlSQL 지원http://java.sun.com/jsp/jstl/sql
functionfnCollection, String 처리http://java.sun.com/jsp/jstl/functions

JSTL의 사용

JSTL을 사용하기 위해서는 JSP taglib 지시어를 통해 미리 선언을 해두어야 한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL Core Tag

일반적으로 Core Tag가 가장 많이 사용되므로 여기에 대해서만 설명하려고 한다.

  • <c:set>
    변수를 선언한다.
    var는 변수명, value는 속성값. scope는 변수 생존범위로 디폴트는 page다.
<c:set var="num" value="100"/>
<c:set var="num" value="100" scope="request"/>
  • <c:remove>
    변수를 제거한다.
    scope가 없으면 모든 영역의 변수가 제거된다.
<c:remove var="num" scope="request">
  • <c:if>, <c:choose><c:when><c:otherwise>
    조건문으로 가장 자주 사용된다.
    if는 조건 하나, choose,when,otherwise는 여러개라고 생각하면 된다.
    else if는 존재하지 않는다.
<c:if test="${userType eq 'admin'}">
  <jsp:include page="admin.jsp">
</c:if>

<c:choose>
  <c:when test="${userType == 'admin'}">
    관리자 화면
  </c:when>
  <c:when test="${userType == 'member'}">
    회원 사용자 화면
  </c:when>
  <c:otherwise>
    일반 사용자 화면
  </c:otherwise>
</c:choose>
  • <c:forEach>
    반복문이 필요할 때 사용한다.
    var에는 현재 변수명, items에는 컬렉션을 지정, varStatus를 통해 반복상태를 알 수 있다.
<c:forEach var="value" begin="1" end="5" step="1">
  ${value}<br/>
</c:forEach>

<c:forEach var="item" items="${courses}" varStatus="status">
  ${status.count}. ${item.name}<br/>
</c:forEach>
  • <c:catch>
    예외를 처리할 때 사용한다.
    var속성에는 발생한 예외를 담을 page scope 변수를 지정한다.
<c:catch var="ex">
<%
  String str = null;
  out.println(str.length()); // 예외 발생
%>
</c:catch>

<c:if test="${ex != null}">
  예외가 발생했습니다. ${ex.message}
</c:if>

그 외 다른 태그들이 더 있지만 이 정도가 자주 사용되는 것 같다.

Continue reading


© 2021. All rights reserved.

Powered by Hydejack v9.1.5