본문 바로가기
JSP

JSP EL

by 요리하다그만둠 2022. 7. 15.

표현 언어(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