Home

Jeong-Yoon

16 Mar 2020

Web 01(2)_el

EL (Expression Language)

  • JSP 표현식을 더 간결하게 활용
    • 산술 연산 : +, -, *, /(div), %(mod)
    • 관계 연산 : ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
    • 논리 연산 : &&(and),   (or), !(not)
    • ${ 표현식 } -> 표현식 하나의 단위 (수행 구문)
  • EL 연산 예시
       7 + 3 : <%= 7 + 3 %><br>
       7 + 3 : ${ 7 + 3 } <br>
       7 % 3 : ${ 7 % 3 } <br>
       7 mod 3 : ${ 7 mod 3 } <br>
       7 == 3 : ${ 7 == 3 } <br>
       7 eq 3 : ${ 7 eq 3 } <br>
       7 != 3 : ${ 7 != 3 } <br>
       7 ne 3 : ${ 7 ne 3 } <br>
       (4 == 4) && (7 > 3) : ${ (4 == 4) && (7 > 3) } <br>
       (4 eq 4) and (7 gt 3) : ${ (4 eq 4) and (7 gt 3) } <br>
       empty str : ${ empty str } <br>
       not empty str : ${ not empty str } <br>
       (7 % 3 == 0) ? "3의 배수 입니다." : "3의 배수가 아닙니다." <br>
       결과: ${ (7 % 3 == 0) ? "3의 배수 입니다." : "3의 배수가 아닙니다." }
    
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
...
<%
//	String[] members = { "임영웅", "정동원", "김수찬", "영탁" };
	String[] members = new String[4]; // NULL String[]

	// pageContext 영역에 등록
	pageContext.setAttribute("members", members);
	// 이름: "members", 값: String[] 객체
	
	Map<String, String> employees = new HashMap<>();
	employees.put("e1001", "강동원");
	employees.put("e1002", "정우성");
	
	// Map 객체를 pageContext 영역에 등록
	pageContext.setAttribute("employees", employees);
%>

...

	JSP 표현식 활용<br> <!-- 데이터가 없다면(NULL) NULL이 출력 -->
	1번 회원 : <%= members[0] %><br>
	2번 회원 : <%= members[1] %><br>
	3번 회원 : <%= members[2] %><br>
	4번 회원 : <%= members[3] %><br><br>
	<!-- 스크립틀릿으로 선언한 배열의 데이터를 바로 표현 가능 -->
	
	EL 활용 <br> <!-- 데이터가 없다면(NULL) 출력되지 않는다. -->
	1번 회원: ${ members[0] } <br>
	2번 회원: ${ members[1] } <br>
	3번 회원: ${ members[2] } <br>
	4번 회원: ${ members[3] } <br><br>
	<!-- EL은 영역을 탐색 -->
	<!-- 스크립틀릿으로 선언한 배열을 영역에 등록하지 않으면 사용 불가 (접근X) -->
	
	Map 객체 표현<br>
	<!-- JSP 표현식: 자바 코드로 삽입된 것을 접근한다. -->
	직원(e1001) : <%= employees.get("e1001") %> <br>
	직원(e1002) : <%= employees.get("e1002") %> <br>
	<!-- EL: 영역에 등록된 데이터를 접근 -->
	직원(e1001) : ${ employees.e1001 } <br>
	직원(e1002) : ${ employees.e1002 } <br>

스코프

  • EL의 스코프 탐색 순서(Scope를 지정하지 않았을 경우)
    • pageContext -> request -> session -> application
  • 스코프 지정 방법
    • [EL의 내장 객체]
      pageScope, requestScope, sessionScope, applicationScope
<%
	// pageContext 영역에 등록
	pageContext.setAttribute("msg", "page 영역의 msg");
	
	// request 영역에 등록
	request.setAttribute("msg", "request 영역의 msg");
	
	// JSP 표현식을 활용하기 위해 영역의 데이터를 가져와라
	// -> 영역의 데이터를 자바 변수에 담기 위해.
	String pageMsg = (String)pageContext.getAttribute("msg"); 
	// 기본적으로 어떤 형식이 올 지 모르기 때문에 Object로 반환한다. casting 필요하다.
	String reqMsg = (String)request.getAttribute("msg"); 
	// Type mismatch: cannot convert from Object to String
%>

...
	<!-- EL 표현식 -->
	empty msg : ${ empty msg }<br>
	msg : ${ msg }<br> 
	<!-- 탐색에 의해 pageContext 영역의 msg -->
	request msg : ${ requestScope.msg }<br> 
	<!-- request 영역의 msg -->
	
	<!-- JSP 표현식 -->
	pageContext msg : <%=pageMsg %> <br>
	request msg : <%= reqMsg %> <br>
	request msg : <%= request.getAttribute("msg") %> <br>
  • JSP 방법 : 해당 영역에 있는 Attribute를 간접적으로 가져와 활용.
    EL 방법 : 해당 영역의 Attribute를 직접 접근하여 활용

Til next time,
Jeong-Yoon at 00:00

scribble