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
- [EL의 내장 객체]
<%
// 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
