Web : Expression Language
표현 언어(Expression Language)란?
- 표현 언어(Expression Language)는 값을 표현하는 데 사용되는 스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 합니다.
- 자바, 백엔드를 다루지 않는 개발자가 JSP에 자바 코드가 나오게 되면 혼란스러울 수 있습니다. 때문에 자바 코드보다 조금 더 간단하게 사용할 수 있는, 즉 프론트엔드 개발자라든가 디자이너가 봐도 크게 이질감이 들지 않게 하기 위해 사용합니다.
표현 언어가 제공하는 기능
- JSP의 스코프(scope)에 맞는 속성 사용
- 집합 객체에 대한 접근 방법 제공
- 수치 연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메소드 호출 기능 제공
- 표현언어만의 기본 객체 제공
표현언어의 표현방법
표현언어의 기본 객체
표현 언어의 기본 객체 사용 예
표현 언어의 데이터 타입
- 불리언 타입 -
true
와false
- 정수타입 -
0~9
로 이루어진 정수 값 음수의 경우-
가 붙음 - 실수타입 -
0~9
로 이루어져 있으며, 소수점.
을 사용할 수 있고,3.24e3
과 같이 지수형으로 표현 가능합니다. - 문자열 타입 - 따옴표
'
또는"
로 둘러싼 문자열. 만약 작은 따옴표'
를 사용해서 표현할 경우 값에 포함된 작은 따옴표는\'
와 같이 \ 기호와 함께 사용해야 합니다. \
기호 자체는\\
로 표시합니다.- 널 타입 -
null
객체 접근 규칙
- 표현 1이나 표현 2가 null이면 null을 반환합니다.
- 표현1이 Map일 경우 표현2를 key로한 값을 반환합니다.
- 표현1이 List나 배열이면 표현2가 정수일 경우 해당 정수 번째 index에 해당하는 값을 반환합니다. 만약 정수가 아닐 경우에는 오류가 발생합니다.
- 표현1이 객체일 경우는 표현2에 해당하는 getter메소드에 해당하는 메소드를 호출한 결과를 반환합니다.
표현 언어의 수치 연산자
+
: 덧셈-
: 뺄셈*
: 곱셈/
또는div
: 나눗셈%
또는mod
: 나머지- 숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환 후 연산자를 수행 :
${"10"+1}
→${10+1}
- 숫자로 변환할 수 없는 객체와 수치 연산자를 함께 사용하면 에러를 발생 :
${"열"+1}
→ 에러 - 수치 연산자에서 사용되는 객체가 null이면 0으로 처리 :
${null + 1}
→${0+1}
비교 연산자
==
또는eq
!=
또는ne
<
또는lt
>
또는gt
<=
또는le
>=
또는ge
- 문자열 비교:
${str == '값'}
str.compareTo("값") == 0
과 동일
논리 연산자
&&
또는and
||
또는or
!
또는not
empty 연산자, 비교선택 연산자
연산자 우선순위
[]
.
()
-
(단일)not
!
empty
*
/
div
%
mod
+
-
<
>
<=
>=
lt
gt
le
ge
==
!=
eq
ne
&&
and
||
or
?
:
표현 언어 비활성화 : JSP에 명시하기
- <%@ page isELIgnored = “true” %>
예제
EL을사용해 Scope값을 출력해줍니다.
// el01.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");
// 4가지의 scope에 값을 넣어줍니다.
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
pageContext.getAttribute("p1") : <%=pageContext.getAttribute("p1") %><br>
<!-- 기존 jsp의 출력방법은 표현식을 사용합니다. -->
pageContext.getAttribute("p1") : ${pageScope.p1}<br>
request.getAttribute("r1") : ${requestScope.r1}<br>
session.getAttribute("s1") : ${sessionScope.s1}<br>
application.getAttribute("a1") : ${applicationScope.a1}<br>
<!-- el을 사용해서 출력하는 방법입니다. -->
pageContext.getAttribute("p1") : ${p1}<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>
<!-- 이름이 겹치지 않으면 이런식으로 속성이름만 주어도 출력이 가능합니다. -->
<!-- 만약 변수이름이 겹친다면 작은 범위의 scope부터 찾아줍니다. 웬만하면 명시적으로 적어주는 것이 좋습니다. -->
</body>
</html>
EL을 사용해 다양한 연산을 수행합니다.
// el02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isELIgnored="true" %>
<!-- 이 지시문을 작성해주면 EL이 전무 무시됩니다. -->
<%
request.setAttribute("k", 10);
request.setAttribute("m", true);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
k : ${k } <br>
k + 5 : ${ k + 5 } <br>
k - 5 : ${ k - 5 } <br>
k * 5 : ${ k * 5 } <br>
k / 5 : ${ k div 5 } <br>
<!-- '/'같은 경우엔 인식을 못할 수도 있기 때문에 'div'를 이용하는게 좋습니다. -->
k : ${k }<br>
m : ${m }<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://www.boostcourse.org/web326/lecture/258517?isDesc=false
댓글남기기