[JSP] EL(Expression Language)

2022. 12. 23. 13:54· BackEnd/JSP & Servlet
목차
  1. References

1. EL(Expression Language)란?

EL(Expression Language)는 값을 표현하는 데 사용되는 스크립트 언어로 JSP의 기본 문법을 보완하는데 사용한다. JSP에 자바 언어를 작성하게 되면 디자이너나 프론트를 담당하는 사람들에게는 이질감이 들 수 있다. 이러한 단점을 보완하기위해 EL이 등장하게 된다. EL을 사용하면  application scope, session scope 등의 변수들을 쉽게 출력할 수 있으며 수치 연산, 관계 연산, 논리 연산자도 제공한다. 또한 자바 클래스에서 메소드를 호출하는 기능도 제공하며 EL만의 기본 객체도 제공한다. EL은  "${expr}"과 같이 "${}"를 사용하여 표현한다.

2. EL의 기본 객체

EL에서 제공하는 기본 객체는 다음과 같다.

기본 객체 설명
pageContext JSP의 page 기본 객체와 동일하다.
pageScope pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
requestScope request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
sessionScope session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
applicationScope application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
param 요청 파라미터의 <파라미터이름, 값> 매핑을 저장한 Map 객체
paramValues 요청 파라미터의 <파라미터이름, 값배열> 매핑을 저장한 Map 객체
header 요청 정보의 <헤더이름, 값> 매핑을 저장한 Map 객체
headerValues 요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map 객체
cookie <쿠키 이름, Cookie> 매핑을 저장한 Map 객체
initParam 초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체

아래는 기본 객체 사용의 몇 가지 예시 코드다.

<body>
    요청 URI: ${pageContext.request.requestURI} <br> <%-- pageContext.getRequest().getRequestURI()와 동일 --%>
    request의 name속성: ${requestScope.name} <br> <%-- request.getAttribute("name")과 동일 --%>
</body>

3. EL의 객체 접근 규칙

EL에서 객체에 접근하기 위해서는 "${<표현1>.<표현2>}"와 같은 형식으로 사용하면 된다. 만약 표현1이 Map 객체인 경우 표현2를 key로한 값을 반환하며 List나 배열인 경우 표현2가 정수면 해당 인덱스의 해당하는 값을 반환한다. 또한 표현1이 객체인 경우 표현2에 해당하는 getter메소드를 호출한 결과를 반환한다.

4. 기타

  • 산술 연산자로는 +, -, *, /(또는 div), %(또는 mod)를 사용한다.
  • 비교 연산자로는 ==(또는 eq), !=(또는 ne), <(또는 lt), >(또는 gt), <=(또는 le), >=(또는 ge)를 사용한다.
  • 논리 연산자로는 &&(and), ||(or), !(not)를 사용한다.
  • empty 연산자라는 것이 존재하며 "empty <값>"의 형태로 사용한다. 만약 값이 null, 빈 문자열, 길이가 0인 배열, 빈 Map, 빈 Collection이라면 true를 반환한다.
  • 비교 선택 연산자는 "<수식>?<값1>:<값2>" 형태로 사용하고 수식이 true라면 값1을 반환하고 false라면 값2를 리턴한다.
  • EL을 비활성화 하려면 "<%@ page isELIgnored="true"%>"를 명시하면 된다.

5. 예제 코드1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 아래 코드는 출력과는 상관 없기 때문에 body부분에 작성하지 않은 것이다. --%>
<%
	pageContext.setAttribute("pageValue", "This is Page Scope's value");
	request.setAttribute("requestValue", "This is Request Scope's value");
	session.setAttribute("sessionValue", "This is Session Scope's value");
	application.setAttribute("applicationValue", "This is Application Scope's value");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

pageContext.getAttribute("pageValue") : <%=pageContext.getAttribute("pageValue") %> <br>
pageContext.getAttribute("pageValue") : ${pageScope.pageValue} <br>
<br>
request.getAttribute("requestValue") : <%=request.getAttribute("requestValue") %> <br>
request.getAttribute("requestValue") : ${requestScope.requestValue} <br>
<br>
session.getAttribute("sessionValue") : <%=session.getAttribute("sessionValue") %> <br>
session.getAttribute("sessionValue") : ${sessionScope.sessionValue} <br>
<br>
application.getAttribute("applicationValue") : <%=application.getAttribute("applicationValue") %> <br>
application.getAttribute("applicationValue") : ${applicationScope.applicationValue} <br>

</body>
</html>

위에서 body 부분을 보면 EL을 사용하여 각 scope에 존재하는 변수를 출력하는 것을 볼 수 있다.

6. 예제 코드2

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 
	request.setAttribute("value", 10);
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

value : ${requestScope.value } <br>
value + 5 : ${requestScope.value + 5 } <br>
value - 5 : ${requestScope.value - 5 } <br>
value * 5 : ${requestScope.value * 5 } <br>
value / 5 : ${requestScope.value div 5 } <br>

value > 5 : ${requestScope.value gt 5 } <br>
value < 5 : ${requestScope.value lt 5 } <br>
value <= 5 : ${requestScope.value ge 5 } <br>
value >= 5 : ${requestScope.value le 5 } <br>

</body>
</html>

위처럼 산술 연산 및 비교 연산도 가능하다.


References

https://www.boostcourse.org/web326/joinLectures/28762

저작자표시

'BackEnd > JSP & Servlet' 카테고리의 다른 글

Servlet이란?  (0) 2023.01.24
[JSP] JSTL(JSP Standard Tag Library)  (0) 2022.12.24
Servlet과 JSP 연동  (0) 2022.12.23
Forward란?  (0) 2022.12.22
Redirect란?  (0) 2022.12.22
  1. References
'BackEnd/JSP & Servlet' 카테고리의 다른 글
  • Servlet이란?
  • [JSP] JSTL(JSP Standard Tag Library)
  • Servlet과 JSP 연동
  • Forward란?
코딩마루
코딩마루
코딩마루
Nam's Study Note
코딩마루
전체
오늘
어제
  • 분류 전체보기 (169)
    • BackEnd (88)
      • JSP & Servlet (12)
      • Java (12)
      • JDBC (5)
      • Spring (55)
      • Spring Security (3)
      • AWS (6)
      • Docker (0)
    • FrontEnd (4)
      • HTML (4)
    • Algorithm (23)
      • Brute Force (2)
      • Greedy (2)
      • Graph (2)
      • Dynamic Programming (4)
      • Divide and Conquer (1)
      • Data Structure (11)
    • AI (4)
      • NLP (4)
    • DB (29)
      • Oracle (13)
      • MySQL (15)
    • Data (8)
      • Crawling (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
코딩마루
[JSP] EL(Expression Language)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.