자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 31. 표현 언어(EL: Expression Language) - 컬렉션 사용하기, EL의 연산자들

개발학생 2025. 4. 18. 15:55
반응형

1. 컬렉션 사용하기

  • EL을 사용하면 컬렉션을 자바 코드보다 훨씬 간단하게 이용 가능

1) List 컬렉션과 Map 컬렉션을 EL을 이용해 사용

  • WebContent/EL에서 CollectionUse.jsp 파일 생성
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 컬렉션</title></head>
<body>
<h2>List 컬렉션</h2>
<%
List<Object> aList = new ArrayList<Object>();    <!-- 1. -->
aList.add("청해진");    <!-- 2. -->
aList.add(new Person("장보고", 28));    <!-- 3. -->
pageContext.setAttribute("Ocean", aList);    <!-- 4. -->
%>
<ul>
  <!-- 5. -->
  <li>0번째 요소 : ${ Ocean[0] }</li>
  <li>1번째 요소 : ${ Ocean[1].name }, ${Ocean[1].age }</li>
  <li>2번째 요소 : ${ Ocean[2] }<!-- 출력되지 않음 --></li>
</ul>
<h2>Map 컬렉션</h2>
<%
<!-- 6. -->
Map<String, String> map = new HashMap<String, String>();
map.put("한글", "훈민정음");
map.put("Eng", "English");
pageContext.setAttribute("King", map);
%>
<ul>
  <li>영문 Key : ${ King["Eng"] }, ${ King['Eng'] }, ${ King.Eng }</li>    <!-- 7. -->
  <li>한글 Key : ${ King["한글"] }, ${ King['한글']}, \${ King.한글 }<!- 에러 - 역슬래시(\)로 EL코드 주석 처리함 --></li>    <!-- 8. -->
</ul>
</body>
</html>
  1. List 컬렉션 생성 (타입 매개변수를 Object로 선언했으므로 어떤 객체든 저장 가능)
  2. List 컬렉션에 String 객체 저장
  3. List 컬렉션에 Person 객체 저장
  4. List 컬렉션을 page 영역에 저장
  5. page 영역에 저장된 List 컬렉션 출력 (List는 배열처럼 인덱스로 접근 가능)
  6. Map 컬렉션을 page 영역에 저장
  7. Map을 통해 키를 입력해 값을 가져옴: 키가 영문일 경우 3가지 방식 모두 사용 가능
  8. Map을 통해 키를 입력해 값을 가져옴: 키가 한글이면 .(점)은 500에러가 발생하므로 사용 불가

2) [Run As] → [Run On Server]로 CollectionUse.jsp 파일 실행

  • List 컬렉션에는 2개의 객체를 저장하였으므로, 따라서 인덱스는 1까지만 존재하며 인덱스 1은 null인 상태
  • → EL은 Null을 출력해도 예외를 발생시키지 않으므로, 다음과 같이 아무것도 출력되지 않음
  • Map 컬렉션은 모두 동일한 출력 결과를 보이고 있는데, 키가 한글인 마지막 EL ${King.한글 }은 주석 처리하였으므로 일반 HTML 코드로 인식되어 화면에 그대로 출력된 것

⇒ EL은 컬렉션도 매우 편리하게 사용할 수 있는 기능을 제공함!

2. EL의 연산자들

  • EL에서도 자바와 동일하게, 산술/비교 연산자 등 여러가지 연산자 제공
  • → 자바에서 사용하는 특수 기호 형태의 연산자 이외에, EL에서는 문자 형태의 연산자도 함께 사용 가능

1) 할당 연산자

  • 할당과 동시에 출력되므로, 할당만을 하고 싶다면 세미콜론과 작은따옴표 함께 사용
${ numberVar = 10 }    //할당과 동시에 출력
${ numberVar = 10;'' }    //할당만 되고 출력은 되지 않음

2) 산술 연산자

  • +, -, *: 덧셈, 뺄셈, 곱셈
  • / 또는 div: 나눗셈
  • % 또는 mod: 나머지

3) 비교 연산자

  • 또는 gt: Greater Than(~보다 크다)
  • = 또는 ge: Greater than or Equal(~보다 크거나 같다)
  • < 또는 lt: Less Than(~보다 작다)
  • <= 또는 le: Less than or Equal(~보다 작거나 같다)
  • == 또는 eq: EQual(같다)
  • != 또는 ne: Not Equal(같지 않다, 다르다)

4) 논리 연산

  • && 또는 and: 논리 And
  • | | 또는 or: 논리 Or
  • ! 또는 not: 논리 Not

5) empty 연산자 (다음과 같이 값이 없을 때, true를 반환)

  • null
  • 빈 문자열
  • 길이가 0인 배열
  • size가 0인 컬렉션

6) 삼항 연산자 (자바의 삼항 연산자와 사용법 동일)

${ 조건 ? "true일 때 선택" : "false일 때 선택" }

7) null일 때 연산

  • 자바에서는 null을 조작하거나 연산에 사용하면 NullPointerException이 발생(사용 불가)
  • EL에서는 null이 0으로 인식되어 예외가 발생되지 않음

*각종 연산자 사용 예시

(1) WebContent/EL에 Operator1.jsp 파일 생성 및 코드 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// 1.
int num1 = 3;
pageContext.setAttribute("num2", 4);
pageContext.setAttribute("num3", "5");
pageContext.setAttribute("num4", "8");
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 연산자</title></head>
<body>
  <h3>변수 선언 및 할당</h3>
  스크립틀릿에서 선언한 변수: ${ num1 } <br />    // 2.
  page 영역에 저장된 변수: ${ num2 } <br />    // 3.
  변수 할당 및 즉시 출력: ${ num1 = 7 } <br />    // 4.
  변수 할당 및 별도 출력: ${ num2 = 8;'' } => ${ num2 } <br />    // 5.
  num1 = ${ num1 }, num2 = ${ num2 }, num3 = ${ num3 }, num4 = ${ num4 }

  <h3>산술 연산자</h3>    // 6.
  num1 + num2 : ${ num1 + num2 } <br />
  num1 - num2 : ${ num1 - num2 } <br />
  num1 * num2 : ${ num1 * num2 } <br />
  num3 / num4 : ${ num3 / num4 } <br />
  num3 div num4 : ${ num3 div num4 } <br />    // 7.
  num3 % num4 : ${ num3 % num4 } <br />
  num3 mod num4 : ${ num3 mod num4 }    // 8.

  <h3>+ 연산자는 덧셈만 가능</h3>
  num1 + "34" : ${ num1 + "34" } <br />    // 9.
  // 10. (아래 코드 2줄)
  num2 + "이십" : \${ num2 + "이십" }<!-- 에러 발생(주석 처리) --> <br />
  "삼십" + "사십" : \${ "삼십" + "사십" }<!-- 에러 발생(주석 처리) -->

  <h3>비교 연산자</h3>    // 11.
  num4 > num3 : ${ num4 gt num3 } <br />
  num1 < num3 : ${ num1 lt num3 } <br />
  num2 >= num4 : ${ num2 ge num4 } <br />
  num1 == num4 : ${ num1 eq num4 }
	
  <h3>논리 연산자</h3>
  num3 <= num4 && num3 == num4 : ${ num3 le num4 and num3 eq num4 } <br />
  num3 >= num4 || num3 != num4 : ${ num3 ge num4 or num3 ne num4 }
</body>
</html>
  1. 예시에서 사용할 변수 선언: num3과 num4는 문자열을 입력했지만, EL에서는 산술 연산 시 자동으로 숫자로 변경됨
  2. EL은 스크립틀릿에서 선언한 변수 즉시 사용 가능 (null이므로 아무것도 출력되지 않음)
  3. page 영역에 저장된 속성이 정상적으로 출력됨
  4. EL에서 변수의 값 할당: 할당과 동시에 출력됨
  5. EL에서 변수의 값 할당: ${변수명=값 ; ’ ’} 형식이므로 변수의 값을 할당만 함 (왼쪽 항은 출력되지 않음)
  6. 산술 연산자는 자바와 같음
  7. EL에서는 나눗셈에 div를 추가로 사용 가능
  8. EL에서는 나머지 연산에 mod를 추가로 사용 가능
  9. EL에서 숫자 형태의 문자열은 자동으로 숫자가 변환되어 계산됨
  10. EL에서 숫자 형태가 아닌 문자가 포함되어 있다면 변환되지 않으므로 에러 발생
  11. 비교 연산자 (문자 형태의 연산자 사용 가능)
  12. 논리 연산자 (문자 형태의 연산자 사용 가능)
  • [Run As] → [Run On Server]로 Operator1.jsp 파일 실행

(2) WebContent/EL에 Operator2.jsp 파일 생성 및 코드 작성

<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
		pageEncoding="UTF-8"%>
<%
// 1. 예시에서 사용할 변수 선언
// -> EL에서 사용할 변수를 생성하여 영역에 저장
pageContext.setAttribute("num1", 9);
pageContext.setAttribute("num2", "10");

pageContext.setAttribute("nullStr", null);
pageContext.setAttribute("emptyStr", "");
pageContext.setAttribute("lengthZero", new Integer[0]);
pageContext.setAttribute("sizeZero", new ArrayList());
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 연산자</title></head>
<body>
  <h3>empty 연산자</h3>
  // 2. 값이 없는(empty) 상태이므로 모두 true를 반환함 
  empty nullStr : ${ empty nullStr } <br />
  empty emptyStr : ${ empty emptyStr } <br />
  empty lengthZero : ${ empty lengthZero } <br />
  empty sizeZero : ${ empty sizeZero } <br />

  <h3>삼항 연산자</h3>
  // 3. num1과 num2는 각각 9와 10이므로 num2가 더 크므로, false를 반환하여 "num2가 크다"가 출력됨
  num1 gt num2 ? "참" : "거짓" => ${ num1 gt num2 ? "num1이 크다" : "num2가 크다" }    

  <h3>null 연산</h3>
  // 4. null은 모두 0으로 처리됨
  // -> 실행에는 문제가 없으나, null과 정수를 연산하는 부분을 이클립스는 에러로 표시함
  null + 10 : ${ null + 10 } <br />
  nullStr + 10 : ${ nullStr + 10 } <br />
  param.noVar > 10 : ${ param.noVar > 10 }
</body>
</html>

(3) [Run As] → [Run On Server]로 Operator2.jsp 파일 실행

반응형