<h3>2. EL의 연산자에 대해서 배워 보자!</h3>
<a href="/action/operation.do">02_EL의 연산자</a>
ELOperationServlet 생성
url mapping: /operation.do
02_elOperation.jsp 생성
💻 공통 ELOperationServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 연산자 공부를 위한 테스트 데이터들
request.setAttribute("big", 10);
request.setAttribute("small", 3);
request.setAttribute("sOne", "안녕"); // 상수풀 영역에 들어감
request.setAttribute("sTwo", new String("안녕"));
request.setAttribute("pOne", new Person("홍길동", 20, "남자"));
request.setAttribute("pTwo", null);
ArrayList<String> list1 = new ArrayList<>();
request.setAttribute("lOne", list1);
ArrayList<String> list2 = new ArrayList<>();
list2.add("ㅋㅋ...");
list2.add("ㅠㅠ...");
request.setAttribute("lTwo", list2);
// 응답화면 포워딩
request.getRequestDispatcher("views/1_EL/02_elOperation.jsp").forward(request, response);
}
1. 산술 연산
👉🏻 나눗셈: div, 나머지: mod
👉🏻 자바에서의 +, -, *, /, %도 사용 가능
✔️ 산술연산을 하고 싶다면 EL구문 내부에서 연산자를 써야 함 따로 쓰면 연산이 안 되고 키값만 불러옴!
✔️나눗셈의 경우 소수점이 붙은 계산값이 나옴
💻 02_elOperation.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>EL 연산</h2>
<h3>1. 산술 연산</h3>
<p>
* 기존 방식 <br>
10 + 3 = <%= (int)request.getAttribute("big") + (int)request.getAttribute("small") %>
</p>
<p>
* EL 연산 <br>
10 + 3 = ${ big + small } <br>
10 + 3 = ${ big } + ${ small } <br> <!-- '10 + 3'으로 출력됨 -->
<!--
산술연산을 하고 싶다면 EL구문 내부에서 연산자를 써야 함
따로 쓰면 연산이 안 되고 키값만 불러옴!
-->
10 - 3 = ${ big - small } <br>
10 * 3 = ${ big * small } <br>
10 / 3 = ${ big / small } 또는 ${ big div small } <br> <!-- 3.3333333333333335 소수점이 붙은 계산값이 나옴 -->
10 % 3 = ${ big % small } 또는 ${ big mod small }
</p>
</body>
</html>
2. 숫자간 대소 비교 연산
👉🏻 lt, gt, le, ge
👉🏻 자바에서의 <, >, <=, >=도 사용 가능
대소 비교 표현법 (EL에서 두 가지 모두 사용 가능)
<
lt
>
gt
<=
le
>=
ge
💻 02_elOperation.jsp
<h3>2. 숫자간 대소비교 연산</h3>
<p>
* 기존 방식 <br>
10 > 3 : <%= (int)request.getAttribute("big") > (int)request.getAttribute("small") %>
</p>
<p>
* EL 연산 <br>
10 > 3 : ${ big > small } 또는 ${ big gt small } <br>
10 < 3 : ${ big < small } 또는 ${ big lt small } <br>
10 >= 3 : ${ big >= small } 또는 ${ big ge small } <br>
10 <= 3 : ${ big <= small } 또는 ${ big le small }
</p>
3. 동등 비교 연산
👉🏻 eq: equal /ne: not equal
👉🏻 문자열 리터럴에 쌍따옴표/홑따옴표 모두 가능
👉🏻 자바에서의 ==, !=도 사용 가능
동등 비교 연산 표현법 (EL에서 두 가지 모두 사용 가능)
==
eq
!=
ne
✔️ 기존 방식에서는 문자열 비교를 == 가 아닌 .equals로 해야 했음 (==을 쓰면 주소값 비교)
✔️ EL 연산에서는 == 역시 문자열 비교로 나타나며, 문자열을 쌍따옴표/홑따옴표 어느 것으로 감싸든 동등 비교 가능함
💻 02_elOperation.jsp
<h3>3. 동등 비교 연산</h3>
<p>
* 기존 방식 <br>
10 과 3이 일치합니까? : <%= (int)request.getAttribute("big") == (int)request.getAttribute("small") %> <br>
sOne과 sTwo가 일치합니까? (주소값 비교): <%= request.getAttribute("sOne") == request.getAttribute("sTwo") %> <br>
<!-- 문자열 비교를 ==으로 하게 되면 내용물이 아닌 주소값을 비교함 -->
sOne과 sTwo가 일치합니까? (내용물 비교): <%= ((String)request.getAttribute("sOne")).equals((String)request.getAttribute("sTwo")) %>
</p>
<p>
* EL 연산 <br>
10과 3이 일치합니까? : ${ big == small } 또는 ${ big eq small } <br>
big에 담긴 값이 10과 일치합니까? : ${ big == 10 } 또는 ${ big eq 10 } <br>
sOne과 sTwo가 일치합니까? : ${ sOne == sTwo } 또는 ${ sOne eq sTwo } <br>
<!-- EL에서의 == 비교는 자바에서의 equals 메소드와 같은 동작을 함 (내용물 비교를 수행) -->
sOne과 sTwo가 일치하지 않습니까? : ${ sOne != sTwo } 또는 ${ sOne ne sTwo } <br>
<!-- ne : not equals -->
sOne에 담긴 값이 "안녕"과 일치합니까? : ${ sOne == "안녕" } 또는 ${ sOne eq "안녕" }
또는 ${ sOne == '안녕' } 또는 ${ sOne eq '안녕' } <br>
<!-- EL에서의 문자열 리터럴 제시 시 쌍따옴표, 홑따옴표 관계없이 동등비교가 가능함 -->
</p>
4. 객체가 null인지 또는 리스트가 비어 있는지 체크하는 연산
👉🏻 empty: 텅 비어 있다 (null) / !empty: 텅 비어 있지 않다 (not null)
👉🏻 자바와 같이 ==, !=를 null과 비교하는 것도 가능
💻 02_elOperation.jsp
<h3>4. 객체가 null인지 또는 리스트가 비어 있는지 체크하는 연산</h3>
<p>
* EL 연산 <br>
pTwo가 null입니까? : ${ pTwo == null } 또는 ${ pTwo eq null } 또는 ${ empty pTwo } <br>
pOne이 null입니까? : ${ pOne == null } 또는 ${ pOne eq null } 또는 ${ empty pOne } <br>
pOne이 null이 아닙니까? : ${ pOne != null } 또는 ${ pOne ne null } 또는 ${ !empty pOne } <br>
lOne이 텅 비어 있습니까? : ${ empty lOne } <br>
lTwo가 텅 비어 있습니까? : ${ empty lTwo } <br>
</p>
5. 논리 연산자
👉🏻 and, or 사용 가능
👉🏻 자바와 같이 &&, ||를 사용하는 것도 가능
💻02_elOperation.jsp
<h3>5. 논리연산자</h3>
<p>
* EL 연산 <br>
AND 연산: ${ true && true } 또는 ${ true and true } <br>
OR 연산: ${ true || false } 또는 ${ true or false } <br>
</p>
💻 연습 문제
👉🏻 우선순위 헷갈린다면 소괄호 활용할 것!
<h3>연습문제</h3>
<p>
* EL 연산에서 배운 키워드를 주로 가지고 써볼 것 <br>
big이 small보다 크고 lOne이 텅 비어 있습니까? : ${ (big gt small) and (empty lOne) } <br>
big 과 small의 곱은 4의 배수입니까? : ${ ((big * small) mod 4) eq 0 } <br>
lTwo가 텅 비어 있지 않거나 sOne에 담긴 값이 "안녕하세요"와 일치합니까? : ${ (!empty lTwo) or (sOne eq "안녕하세요") } <br>
</p>