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
'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 |