평범한 연구소

[JSP|Servlet] 표현언어(EL) 본문

Pront/Javascript

[JSP|Servlet] 표현언어(EL)

soyeonisgood 2022. 10. 4. 19:33

표현 언어 (Expression Language, EL)

  • 스크립트 요소의 사용 없이 JSP 페이지에 값을 표현할 수 있는 태그 기반의 스크립트 언어
  • JSP의 스크립트 요소(릿, 표현식, 선언부) 를 제외한 나머지 부분에서 사용될 수 있다.
  • JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
    • page, request, session, application에 바인딩된 속성이나 그 속성의 property 값 출력
  • collection 객체에 대한 접근 방법 제공
  • 수치 연산자, 관계 연산자, 논리 연산자 등의 EL 연산자 제공
  • 자바 클래스의 메소드 호출 기능 제공
  • EL 내장 객체 제공

 

EL의 형식 

<!-- 표현 형식 -->
$ { expression }

 

EL 연산 예제 

  • 사칙 연산
    • 문자열의 결합은 '+' 연산자로 불가능. '+=' 연산자 이용.
<p> ${ 3+5 } </p> <!-- 8 : Long 형 -->
<p> ${ "3"+5 } </p> <!-- 8 : Long 형 -->
<p> ${ "3"+"5" } </p> <!-- 8 : Long 형 -->
<p> ${ 10/5 } </p> <!-- 2.0 : Double -->
<p> ${ 13/5 } </p> <!-- 2.6 -->
<p> ${ 13 mod 5 } </p> <!-- 3 -->
<p> ${ 13 % 5 } </p> <!-- 3 -->
<p> EL에서 "A" + "B" 의 결과는 에러. +로 문자열 결합은 불가능 </p>
  • 비교/논리 연산
    • empty는 값이 null, 빈문자열, 길이가 0인 배열 등 → true
<p> 3 == 4 : ${ 3 == 4 }, 3 eq 4 : ${3 eq 4 } </p>
<p> 3 != 4 : ${ 3 != 4 } </p>

<p> 3 &lt; 4 : ${ 3 < 4 }, 3 lt 4 : ${3 lt 4 } </p>
<p> 3 &gt; 4 : ${ 3 > 4 }, 3 gt 4 : ${3 gt 4 } </p>

<p> 3 &lt;= 4 : ${ 3 <= 4 }, 3 le 4 : ${3 le 4 } </p>
<p> 3 &gt;= 4 : ${ 3 >= 4 }, 3 ge 4 : ${3 ge 4 } </p>
<p> empty name : ${empty name} </p> <!-- true -->
<p> ${ 10%2 == 0 ? "짝수":"홀수" }
<p> 논리 연산자 : not, and, or, !, &amp;&amp;, || </p>
  • 기타 연산자
<p> 문자열 결합 : +=, ${"서울" += "경기"} </p>
<p> ; 연산자 : a;b 에서 a는 출력하지 않고 b만 출력</p>
<p> ${1+2; 2+5} </p> <!-- 7 -->
  • 할당 연산자
    • 할당 자체도 출력한다.
<p> ${a=10} ${a} </p> <!-- 결과 10 10 -->
<p> ${a=10; a} </p> <!-- 10 -->

 

EL 내장 객체 

EL 내장객체 타입 설명
pageContext pageContext 현재 페이지를 위한 javax.servlet.PageContext. JSP 페이지의 환경 정보.
Header Map HTTP 요청 헤더를 받아오는데 사용
sessionScope Map 지정된 속성 이름을 session 영역에 설정된 값과 매핑
param Map request 파라미터 값을 얻어오는데 사용하며, 단일 값을 반환. (request.getParameter())

 

EL 내장 객체 사용 예제

<p> pageContext : 현재 페이지의 설정 정보 </p>
<p> Context Path : <%= request.getContextPath() %> </p>  <!-- /study3 -->
<p> Context Path : ${pageContext.request.contextPath } </p>  <!-- /study3 -->
<hr>

<p> header : 요청 헤더 정보 </p>
<p> User-Agent : ${header["user-agent"]} </p> 
	<!-- Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 -->
<hr>

<p> 기타 내장 객체 </p>
<p> EL 에서 session 객체 : sessionScope </p>
  • EL의 param 내장객체를 사용
    • request.setAttribute("vo", dto); 
    • ${ vo.name }
    • ${ param.city }
<!-- ex03.jsp -->
<%
	request.setCharacterEncoding("utf-8");

	User dto = new User("홍길동", 20, "010-1111-1111", null);
	request.setAttribute("vo", dto);
%>

...

<!-- ex03_ok.jsp -->
<h3>EL을 사용하여 출력</h3>
<p>
  ${vo.name}, ${vo.age}, ${vo.tel}, ${vo.subject}
  <!-- 필드 값이 null인 경우 아무것도 출력되지 않는다. -->
</p>

<p>
  ${param.city}
  <!-- 파라미터는 param 이라는 내장 객체를 이용한다. -->
  <!-- request.getParameter("city") 와 유사 -->
</p>

<h3>EL을 사용하지 않은 경우</h3>
<%
	User vv = (User)request.getAttribute("vo");
	String city = request.getParameter("city");
%>
<p>
	<%= vv.getName() %>, <%=vv.getAge() %>, <%=vv.getTel() %>, <%=vv.getSubject() %>
	<!-- 필드 값이 null인 경우 null로 출력 된다. -->
</p>
<p> <%=city%> </p>