[Web:] 자바 표현언어 EL(Expression Language)
EL은 JSP 문서로 된 뷰 페이지에서만 쓰는 "출력 전용 언어"라고 보면 된다.
Spring을 할 때도 사용하기 때문에 꼭 알고있어야 한다!
무조건 객체가 공유되어야 사용할 수 있음
${ 공유속성명 } 또는 ${ 객체명.필드명 } 또는 ${ 공유속성명.맵키 } 형식으로 작성
>> 자동으로 getAttribute() 메소드가 호출되어 공유 인스턴스를 출력
${공유속성명.맵키} 형식으로 공유 인스턴스(Map)의 값을 반환받아 출력
==> getAttribute() 메소드와 get() 메소드가 자동 호출
만약 공유 인스턴스가 존재하지 않을 경우 JS는 null을 출력하지만, EL은 아무것도 출력하지 않는다.
>> NullpointException이 절대 발생하지 않음
객체(클래스의 인스턴스)가 갖고 있는 필드값을 가져오기 위해서는 점 연산자(.) 활용
car라는 이름으로 공유된 인스턴스가 값을 저장하는 게 아니라 점 연산자를 이용해 필드값을 출력하도록
포워드 이동을 할 시에
EL을 사용하지 않으면 getter() 메소드를 이용해 <%=>
EL을 사용하면 ${ 객체.객체.필드명 } 형식으로 이용 가능
그런대 대괄호 [ ] 를 써야 할 때가 있다. Array 또는 List를 쓸 때
EL 내장객체 - Scope Attribute
- 공유 인스턴스(page scope) = ${pageName}
- 공유 인스턴스(request scope) = ${requestName}
- 공유 인스턴스(session scope) = ${sessionName}
- 공유 인스턴스(application scope) = ${applicationName}
EL 표현식에서 공유 속성명을 사용할 경우 공유 인스턴스를 순차적으로 검색하여 출력
검색순서 : page >> request >> session >> application
EL 표현식에서 내장객체를 이용하여 공유 범위에 대한 명식적으로 표현하여 공유 인스턴스를 출력
=> pageScope, requestScope, sessionScope, pageScope
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("first", 20);
request.setAttribute("second", 10);
request.setAttribute("num", 15);
Object object=null;
request.setAttribute("object", object);
String string="";
request.setAttribute("string", string);
String[] array={}; /* empty array : 비어있는 배열 ** 자바는 []를 쓰지만 여기선 {} */
request.setAttribute("array", array);
List<String> list = new ArrayList<String>();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>EL 연산자 - 산술연산자, 관계연산자, 조건연산자</h1>
<ul>
<!-- 산술연산자 -->
<li>first = ${first }</li>
<li>second = ${second }</li>
<li>first * second = ${first * second }</li>
<li>first / second = ${first / second }</li><!-- 결과가 정수가 아닌 실수로 출력됨 -->
<li>first div second = ${first div second }</li><!-- 나누기는 div라는 연산자 키워드로도 표현 가능 -->
<li>first % second = ${first % second }</li>
<li>first mod second = ${first mod second }</li><!-- 퍼센티지는 mod라는 연산자 키워드로도 표현 가능 -->
<li>first + second = ${first + second }</li>
<li>first - second = ${first - second }</li>
<!-- 관계연산자 ** boolean 값 반환 -->
<li>first > second = ${first > second }</li>
<li>first gt second = ${first gt second }</li>
<li>first < second = ${first < second }</li>
<li>first lt second = ${first lt second }</li>
<li>first >= second = ${first >= second }</li>
<li>first ge second = ${first ge second }</li>
<li>first <= second = ${first <= second }</li>
<li>first le second = ${first le second }</li>
<li>first == second = ${first == second }</li>
<li>first eq second = ${first eq second }</li>
<li>first != second = ${first != second }</li>
<li>first ne second = ${first ne second }</li>
<!-- 조건연산자 -->
<li>num = ${num }</li>
<li>first > num && second < num = ${first > num && second < num} </li>
<li>first > num && second < num = ${first > num && second < num} </li>
<li>first < num || second > num = ${first < num || second > num} </li>
<!-- empty 연산자 : 공유 인스턴스가 없거나 비어있는 경우 true 제공하는 연산자 -->
<li>object Empty = ${empty(object) }</li>
<li>string Empty = ${empty(string) }</li>
<li>array Empty = ${empty(array) }</li>
<li>list Empty = ${empty(list) }</li>
</ul>
</body>
</html>
참고한 글
- https://kutar37.tistory.com/41