표현 언어(Expression language)
표현 언어(EL : Expression language)는 값(데이터)을 웹 페이지에 표시 하는데 사용되는 태그입니다.
표현 언어(Expression language)?
JSP 출력에 대한 부분을 쉽게 하기 위해 개발한 tag(태그)입니다.
표현 언어는 표현식보다 사용방법이 간단하고 문법체계가 직관적으로 아주 쉽습니다.
표현언어는 ${}를 사용하여 값을 표현합니다.
값을 표현하는데 사용 하는 스크립트 언어로, JSP의 스크립트 요소를 보완하는 역할을 합니다.
표현 언어가 제공하는 기능입니다.
- JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
- 수치 연산, 관계 연산, 논리 연산자를 제공
- 쿠키, 기본 객체의 속성 등 JSP를 위한 표현 언어의 기본 객체 제공
- 람다식을 이용한 함수 정의와 실행
- 스트림 API를 통한 컬렉션 처리
- 정적 메서드 실행
예 : 표현식(Expression)
<%= expr %>
<%= member.getAddress().getZipcode() %>
예 : 표현 언어(Expression language)
${expr}
${member.address.zipcode}
표현식보다 표현 언어가 더간결해지고 이해하기 쉬워지는 장점이있습니다.
표현 언어로 사용 가능한 데이터 타입입니다.
정수형 : ${10}
실수형 : ${5.6}
문자열형 : ${"홍길동"}
논리형 : ${true}
null : ${null}
표현 언어가 자바와는 다른 특징은 null은 결과 화면에 공백으로 처리되는 점입니다.
EL식에는 연산자가 포함 가능합니다.
종류 | 연산자 |
산술 | +, -, *, / (or div), % (or mod) |
관계형 | ==(or eq), != (or ne), <(or lt), > (or gt), <=(or le) >= (or ge) |
조건 | a? b : c |
논리 | &&( or and), || (or or), ! (or not) |
null 검사 | empty |
JSP 2.1 버전부터는 ${expr} 형식뿐만 아니라 #{expr} 구문을 새롭게 지원하고 있습니다. 둘의 차이는 실제로 EL값을 언제 생성하느냐에 입니다.
${expr} 의 혁식의 EL은 ${expr} 구문을 분석할 때 곧바로 값을 계산합니다.
예를 들자면
<%
Member m = new Member();
m.setName("이름1");
%>
<c:set var ="m" value=<%= m %> />
<c:set var ="name" value="${m.name}" /> <%-- 이 시점에 바로 값 계산 --%>
<% m.setName("이름2"); %>
${name} <%--name의 값은 "이름1" --%>
EL 변수 name의 값으로 ${m.name}을 지정했는데, m.name을 계산한 결과인 (즉, getName()의 결과) "이름1"을 name의 값으로 할당합니다. 따라서, 그 뒤에 m.setName()으로 값을 변경하더라도 name 변수의 값은 변경되지 않습니다.
반면#{expr} 형식은 실제로 값이 사용될 때 값을 계산합니다.(<c:out>태그를 사용할때만 사용 평소에는 사용하지않음)
<%
Member m = new Member();
m.setName("이름1");
%>
<c:set var ="m" value=<%= m %> />
<c:set var ="name" value="#{m.name}" /> <%-- 이 시점에 바로 값을 생성하지 않음 --%>
<% m.setName("이름2"); %>
${name} <%--사용되어질 때 값은 "이름2" --%>
<% m.setName("이름3"); %>
${name} <%--사용되어질 때 값은 "이름3" --%>
표현 언어에서는 requserParameter() 대신 param 객체를 사용합니다.
내장 객체 | 설명 |
param | JSP의 내장 객체인 request의 getParameter()와 동일한 역할인 파리미터의 값을 알려줍니다. |
paramValues | 동일한 이름으로 전달되는 파라미터 값들을 배열 형태로 얻어오는데 사용하는 request의 getParameterValues() 와 동일한 역할을 합니다. |
EL의 기본 객체입니다.
기본 객체
|
설명
|
pageContext
|
JSP의 page 기본 객체와 동일하다. PageContext 객체를 참조할 때 사용한다.
|
pageScope
|
pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
Page 영역에 존재하는 객체를 참조할 때 사용한다.
|
requestScope
|
request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
|
sessionScope
|
session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
|
applicationScope
|
application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
|
param
|
요청 파라미터의 <파라미터이름, 값> 매핑을 저장한 Map 객체.
request.getParameter()에 해당
|
paramValues
|
요청 파라미터의 <파라미터이름, 값배열> 매핑을 저장한 Map 객체.
request.getParameterValues()에 해당
|
header
|
요청 정보의 <헤더이름, 값> 매핑을 저장한 Map 객체.
|
headerValues
|
요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map 객체.
|
cookie
|
<쿠키 이름, Cookie> 매핑을 저장한 Map 객체.
|
initParam
|
초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체.
|
위의 객체들을 사용해서 간단한 EL예제 코드를 작성해 보았습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("name", "홍길동");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL Object</title>
</head>
<body>
요청 URL : ${pageContext.request.requestURI}<br>
<!-- pageContext.getRequest(),getRequestURI()의 값을 출력해줍니다. -->
request의 name 속성 : ${requestScope.name}<br>
<!-- request영역에 저장된 name 속성의 값을 출력해 줍니다. -->
code 파라미터 : ${param.code}
<!-- 이름이 "code"인 요청 파라미터의 값을 출력합니다. code 요청 파라미터가 존재하지 않으면 아무것도 출력x -->
</body>
</html>
출력 값 code의 파라미터 값이 없어 null인데 EL에서는 null값을 공백으로 보여주어서 공백으로 표시된겁니다.
물론 여기서 code에 값을 넣어주면 출력이 됩니다.
'JSP' 카테고리의 다른 글
JSP JDBC 드라이버 (0) | 2022.07.18 |
---|---|
JSP JSTL 연동하기 (0) | 2022.07.15 |
JSP <jsp:useBean> (0) | 2022.07.14 |
JSP javabeans (0) | 2022.07.14 |
JSP 쿠키 (0) | 2022.07.13 |