EL / JSTL 정리
JSP파일에 자바형식의 코드를 사용하면 불편한 점을 한방에 해결할 수 있는 EL (Expression Language) 과 JSTL (Jsp Standard Tag Library)를 이용해 코드를 간결하게 사용하는 방법에 대해 포스팅하도록 하겠습니다.
EL의 개념은 해석 그대로 표현 언어를 이해하고 속성 값들을 편리하게 출력하기 위해 제공된 언어이며, JSTL은 표준 액션태그로 처리하기 힘든 부분을 담당합니다.
JSP 2.0버전에서 새로 추가된 스크립트 언어인 EL(Expression Language)은 <%= abc %>를 ${abc}
로 간단하게 사용할 수 있게 하였고, JSTL의 Core에서 c를 이용해 <%= if%>문을 <c:if>
, <%=for%>문을 <c:forEach>
로 대체하여 사용합니다. 그럼 따로따로 살펴보도록 하겠습니다. 둘을 같이 묶어서 포스팅하는 이유는 제 게시판 프로젝트에 같이 사용되기 때문입니다.
EL (Expression Language)
▼ 사용목적
<%= %> , out.println()과 같은 자바코드를
더 이상 사용하지 않고 좀더 간편하게 출력을 지원하기 위한 도구.
배열이나 컬렉션에서도 사용되고, JavaBean의 프로퍼티에서도 사용됩니다.
▼ 문법
Attribute형식에서는 <%= cnt + 1 %>를 쓰지 않고 ${cnt + 1}로 쓰고
Parameter형식에서는 ${param.abc}으로 씁니다.
여기서 cnt는 자바에서는 변수 이름이고, EL 식에서는 Attribute의 이름으로 해석되는데요.
값을 찾을때 Attribute는 작은 Scope에서 큰 Scope로 찾습니다.
(page → request → session → application)
[ attribute란? : 메소드를 통해 저장되고 관리되는 데이터 ] |
---|
PageContext / Request에서 사용될때 |
setAttribute(“key”, value) → 값을 넣는다. |
getAttribute(“key”) → 값을 가져온다. |
removeAttribue(“key”) → 값을 지운다. |
session에서 사용될때 |
set / get / remove 동일하고 추가로++ |
invalidate( ) → 값을 전부 지운다. |
EL
Expression Language (표현언어)
JSP의 새로운 스크립트 언어
기존의 표현식(<%=표현식%>을 대체하는 역할
대체방식
<%=표현식%> > $ {표현언어}데이터를 저장할 수 있는 4개 영역에서 사용할 수 있다.
- pageContext
- request
- session
- application
각 영역의 우선순위
pageContext > request > session > application각 영역의 스코프 키워드
- pageContext: pageScope
- request: requestScope
- session: sessionScope
- application: applicationScope
저장이 “속성”으로 된 경우 다음과 같이 사용한다
- pageContext.setAttribute(“name”, “에밀리”) > ${name} > ${pageScope.name}
- request.setAttribute(“age”, 25) > $ {age} > $ {requestScope.age}
request에 파라미터로 저장된 경우 다음과 같이 사용
문자열<input type="text" name="id" />
-> ${param.id} // parameter의 줄임말
배열<input type="checkbox" name="hobbies" />
-> ${paramValues.honbbies[0]}
<input type="checkbox" name="hobbies" />
-> ${paramValues.honbbies[1]}
EL 연산자
+
-
*
- /, div : 나누기
- %, mod : 나머지
>
, gt(greater than) : 크다>=
, ge(greater equal) : 크거나 같다<
, lt(less than) : 작다- <=, le(less equal) : 작거나 같다
- ==, eq(equal) : 같다
- !=, ne(not equal) : 같지 않다
- and : 그리고
- or : 또는
- not : 부정
- empty : 비어 있다
1. JSTL이란?
일반적으로 알고있는 JSTL이란 JSTL + EL의 조합을 말한다.
HTML 코드 내에 java 코드인 스크립틀릿 <%= student %>
를 ${student}
로, <%=if %>
문을 <c:if>
, <%=for%>
문을 <c:forEach>
로 대체하여 사용한다.
예전에는 스크립틀릿을 많이 사용했지만 가독성이 떨어지고, 뷰와 비즈니스로직의 분리로 인해 현재는 JSTL을 많이 사용하는 추세다. JSTL과 EL은 보통 함께 사용하는데 그 이유와 각각의 개념, 각각의 차이와 문법을 정리해보도록 하자.
2. JSTL
JSTL의 정식 명칭은 자바서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library)이고 줄여서 JSTL이라 부른다.
위키피디아를 참조하자면, JSTL은 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다. JSTL은 XML 데이터 처리와 조건문, 반복문, 국제화와 지역화와 같은 일을 처리하기 위한 JSP 태그 라이브러리를 추가하여 JSP 사양을 확장했다.
JSTL은 JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법을 제공한다. 표준화된 태그 셋을 사용하여 자바 코드가 들락거리는 것보다 더 코드의 유지보수와 응용 소프트웨어 코드와 사용자 인터페이스 간의 관심사의 분리로 이어지게 한다.
JSTL의 사용법
JSTL은 라이브러리이기 때문에 사용하기전에 core를 header에 추가해주어야 한다.
<% @taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
사용방법은 다음과 같다.
<c:if test=""></c:if>
<c:forEach items=""></c:forEach>
JSTL core의 태그들
태그명 | 설명 |
---|---|
<c:set> | 변수명에 값을 할당 |
<c:out> | 값을 출력 |
<c:if> | 조건식에 해당하는 블럭과 사용될 scope설정 |
<c:choose> | 다른 언어의 switch와 비슷 |
<c:when> | switch문의 case에 해당 |
<c:otherwise> | switch문의 default에 해당 |
<c:forEach> | 다른언어의 loop문 items 속성에 배열을 할당할 수 있음 |