[JSP/Servlet] EL(Expression Language)
2019. 3. 1. 16:28ㆍJAVA Back-End
EL (Expression Language)
표현언어(EL)은 값을 표현하는 데 사용하는 스크립트 언어로써 JSP 문법를 보완하는 역할은 합니다.
JSTL과 EL을 사용함으로 기존의 JSP파일에 자바 코드를 작성(<% %>)하면서 생기는 불편함(복잡성, 가독성)을 깔끔하게 해결할 수 있습니다.
EL과 JSTL을 사용하는 이유는 코드를 간결하고 깔끔해져서 유지 보수에도 용이해집니다. 디자이너와 프론트 개발자와 코드를 공유할 때도 훨씬 코드 읽기가 수월해집니다!
EL이 제공하는 기능
- JSP의 scope에 맞는 속성을 사용합니다. (스코프의 변수들을 쉽게 출력할 수 있습니다.)
- 집합 객체 (컬렉션이나 프레임워크에서 제공하는 객체의 값)에 대한 접근 방법 제공
- 변수를 사용할 때 수치 연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메소드 호출 기능 제공
- EL만의 기본 객체 제공
■ EL의 표현법
${ expression }
attribute를 표현하면
JSP : <%= val +1 %>
EL : ${val+1}
parameter는 ${param.val}
■ EL의 문법
${ <exp1>.<exp2> }
- 둘 중 하나가 null값이 있으면 null 반환합니다.
- exp1이 자료구조 Map이면 exp2는 key로 한 값을 반환합니다.
- exp1이 리스트/Array면 exp2가 정수일 경우 해당 정수째 index의 값을 반환합니다.
- 만약 정수가 아니면 오류를 발생합니다.
- exp1이 객체일 경우 exp2에 해당하는 getter메소드에 해당하는 메소드를 호출한 결과를 반환합니다.
■ EL의 연산자
수치연산자
- +
- -
- *
- / (또는 div)
- %(또는 mod)
- 숫자가 아닌 객체와 혼용하면 숫자값으로 변환 후 수행 : ${'10"+1} --> ${10+1}
- 숫자로 변환할 수 없는 객체를 사용하면 에러 발생 : ${"열" + 1} --> Error!
- 객체가 null이 있으면 0으로 처리 : ${null + 10} --> ${0 + 10}
비교연산자
- == 또는 eq
- != 또는 ne
- < 또는 lt
- > 또는 gt
- <= 또는 le
- >= 또는 ge
- ${str == '값'} 은 str.compareTo("값") ==0 과 같습니다. (문자열 비교시)
논리연산자
- && 또는 and
- || 또는 or
- ! 또는 not
■ EL의 기본 객체
EL에서 사용할 수 있는 객체를 소개합니다.
- pageContext : JSP의 page 기본 객체와 동일
- pageScope : 페이지 스코프에 접근. <속성, 값>매핑을 저장한 Map객체
- requestScope : 리퀘스트 스코프에 접근. <속성, 값>매핑을 저장한 Map객체
- sessionScope : 세션 스코프에 접근. <속성, 값>매핑을 저장한 Map객체
- applicationScope : 어플리케이션 스코프에 접근. <속성, 값>매핑을 저장한 Map객체
- param : 파라미터 값을 얻어올 때. (1개 Key에 1개 value) <파라미터이름, 값>매핑을 저장한 Map객체
- paramValues : 파라미터 값을 배열로 얻어올 때 (1개 key에 여러 개의 value) <파라미터이름, 값 배열>매핑을 저장한 Map객체
- header : 헤더 값을 얻어올 때 (1개 key에 1개 value) <헤더이름, 값 >매핑을 저장한 Map객체
- headerValues : 헤더 값을 배열로 얻어올 떄 (1개 key에 여러 개의 value) <헤더이름, 값 배열 >매핑을 저장한 Map객체
- cookie : ${cookie . key값 . value값} 으로 쿠키값 조회 <쿠키 이름, Cookie >매핑을 저장한 Map객체
- initParam : 초기 파라미터 조회. 초기회 파라미터의 <이름, 값 >매핑을 저장한 Map객체
el.jsp 간단한 실습
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
pageContext.setAttribute("p1", "page scope value");
request.setAttribute("r1","request scope value");
session.setAttribute("s1", "session scope value");
application.setAttribute("a1", "application scope value");
%>
<%
request.setAttribute("k", 10);
request.setAttribute("m", true);
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
pageContext.getAttribute("p1"): ${pageScope.p1}<br>
request.getAttribute("r1"): ${requestScope.r1}<br>
session.getAttribute("s1"): ${sessionScope.s1}<br>
application.setAttribute("a1"): ${applicationScope.a1}<br>
<br><br>
이름이 겹치지 않을 경우 그냥 p1,r1,s1,a1이렇게 사용해도 좋습니다.
이름이 겹치거나 어느 객체의 이름인치 명확히 표기하려면 위처럼 표현할 수 있습니다.
<br><br>
pageContext.getAttribute("p1") : ${p1 }<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>
<br><br>
k의 초기값 : ${k} <br>
k + 5 : ${k + 5} <br>
k - 5 : ${k - 5} <br>
k * 5 : ${k * 5} <br>
k / 5 : ${k div 5} <br>
k > 5 : ${ k > 5 } <br>
k < 5 : ${ k < 5 } <br>
k >= 10 : ${ k >= 10 }<br>
k <= 10 : ${ k <= 10 }<br>
m : ${ m }<br>
!m : ${ !m }<br>
</body>
</html>
[참고] https://hunit.tistory.com/203
[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다
'JAVA Back-End' 카테고리의 다른 글
[Servlet]Maven이란? (0) | 2019.03.05 |
---|---|
[JSP/Servlet] JSTL (JSP Standard Tag Library) (0) | 2019.03.02 |
[JSP/Servlet] 스코프(Scope) (0) | 2019.02.27 |
[JSP] redirect 와 forward (1) | 2019.02.26 |
[JSP] JSP 내장객체 (0) | 2019.02.25 |