반응형
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>
- List 컬렉션 생성 (타입 매개변수를 Object로 선언했으므로 어떤 객체든 저장 가능)
- List 컬렉션에 String 객체 저장
- List 컬렉션에 Person 객체 저장
- List 컬렉션을 page 영역에 저장
- page 영역에 저장된 List 컬렉션 출력 (List는 배열처럼 인덱스로 접근 가능)
- Map 컬렉션을 page 영역에 저장
- Map을 통해 키를 입력해 값을 가져옴: 키가 영문일 경우 3가지 방식 모두 사용 가능
- 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>
- 예시에서 사용할 변수 선언: num3과 num4는 문자열을 입력했지만, EL에서는 산술 연산 시 자동으로 숫자로 변경됨
- EL은 스크립틀릿에서 선언한 변수 즉시 사용 가능 (null이므로 아무것도 출력되지 않음)
- page 영역에 저장된 속성이 정상적으로 출력됨
- EL에서 변수의 값 할당: 할당과 동시에 출력됨
- EL에서 변수의 값 할당: ${변수명=값 ; ’ ’} 형식이므로 변수의 값을 할당만 함 (왼쪽 항은 출력되지 않음)
- 산술 연산자는 자바와 같음
- EL에서는 나눗셈에 div를 추가로 사용 가능
- EL에서는 나머지 연산에 mod를 추가로 사용 가능
- EL에서 숫자 형태의 문자열은 자동으로 숫자가 변환되어 계산됨
- EL에서 숫자 형태가 아닌 문자가 포함되어 있다면 변환되지 않으므로 에러 발생
- 비교 연산자 (문자 형태의 연산자 사용 가능)
- 논리 연산자 (문자 형태의 연산자 사용 가능)
- [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 파일 실행
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 33. JSP 표준 태그 라이브러리(JSTL) - JSTL이란, JSTL 사용 설정, 코어(Core) 태그 (1) | 2025.04.22 |
---|---|
JAVA/JSP 32. 표현 언어(EL: Expression Language) - 인스턴스 메소드 호출, 정적 메소드 호출 (0) | 2025.04.21 |
JAVA/JSP 30. 표현 언어(EL: Expression Language) - 표현 언어의 정의, EL의 내장 객체 (7) | 2025.04.17 |
JAVA/JSP 29. 회원제 게시판에 페이징 기능 추가2 - 페이징 구현 실습 (JSP) (4) | 2025.04.16 |
JAVA/JSP 28. 회원제 게시판에 페이징 기능 추가 - 페이징이 필요한 이유, 페이징 구현 절차 (2) | 2025.04.15 |