12. 표현 언어(Expression Language)
1) 표현 언어
- 값을 표현하는데 사용하는 스크립트 언어, EL이라 칭함
- 목적: JSP 표현식에 비해 간결한 코드를 사용해서 값 출력 가능
- 사용 형태
${ } : 구문 분석시 곧바로 값을 계산
#{ } : 실제 사용될 때 값을 계산
- 기능
JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
수치 연산, 관계 연산, 논리 연산자 제공
자바 클래스 메소드 호출 기능 제공
쿠키, 기본 객체의 속성 등 JSP를 위한 표현 언어의 기본 객체 제공
람다식을 이용한 함수 정의와 실행
2) EL의 기본 객체
pageContext : JSP의 pageContext 기본 객체와 동일
pageScope : pageContext 객체의 속성을 매핑한 Map 객체
requestScope : request 객체의 속성을 매핑한 Map 객체
sessionScope : session 객체의 속성을 매핑한 Map 객체
applicationScope : application 객체의 속성을 매핑한 Map 객체
param : 파라미터의 이름과 값을 매핑한 Map 객체 // getParameter 와 동일
paramValues : 파라미터의 이름과 값배열을 매핑한 Map 객체 // getParameterValues
header : 헤더의 이름과 값을 매핑한 Map 객체 // getHeader
headerValues : 헤더의 이름과 값 배열을 매핑한 Map 객체 // getHeaders
cookie : 쿠키의 이름과 값을 매핑한 Map 객체
initParam : 초기화 파라미터의 이름과 값 매핑을 저장한 Map 객체
3) EL의 특징
- EL은 값이 존재하지 않는 경우 아무것도 출력하지 않는다.
- ${name} 의 형태로 객체를 지정하지 않고 탐색시 page, request, session, application 영역을 차례로 탐색해서 일치하는 속성 값 반환
- EL에서 +는 수치 연산자이므로 문자열+수로 연산시 문자열을 수로 형변환 후 연산
ex. "10" + 1 = 11 // 자바에서는 101
- 수치 연산시 값이 null이면 정수 타입 0을 값으로 사용
- 정수 타입보다 실수 타입을 우선시
- 문자열 비교시 String.compareTo() 메소드를 사용
- '문자'+"열" -> 에러 발생 // += 연산자를 사용해야 함
- 특수문자 형식의 문자열을 출력할 때 역슬래시(\)를 사용
ex. \${expr} 출력시 "${expr} 이 출력됨
- 반환 타입이 void거나 한 개 이상의 파라미터를 가진 static 메소드 사용 가능
4) Empty 연산자
- 객체가 비어있는지 확인
- 형식: empty 값
- 반환값이 true인 경우의 값: null, "", 빈 Map, 빈 Collection, 길이가 0인 배열
5) 세미콜론 연산자
- 세미콜론 연산자를 사용하면 두개의 식을 붙여서 사용할 수 있다.
- 형식: ${ 식1 ; 식2 } // 식2의 값만 출력됨
6) 할당 연산자
- EL 변수를 생성하기 위해 사용
- 형식: ${ 변수 = 값 }
- 세미콜론 연산자와 함께 사용해서 변수를 생성하고 빈 문자열을 결과로 출력 가능
ex. ${ var1= 10 ; '' }
7) EL 함수
- EL은 자바 코드를 직접 사용할 수 없음 -> 한계를 해결하기 위해 EL 함수를 지정해서 사용
- 사용 방법: 클래스 파일 작성(static 메소드 작성)
-> TLD(Tag Library Descriptor 파일 작성
-> web.xml 파일에 TLD 파일 설정 추가
-> taglib 디렉티브로 명시 후 사용
- taglib 디렉티브 사용 방법
<%@ taglib prefix="pre" uri="uri" %>
8) 간편하게 정적 메소드 호출
- EL함수의 불편함을 해소하기 위해 EL 3.0에서 기능 추가
- page 디렉티브를 통해 선언 후 자유롭게 사용 가능
- 선언 예시
<%@ page import="util.FormatUtil" %> // 선언
${FormatUtil.number(10, 1)} // 클래스내 정적메소드 호출 가능
9) 람다식
- 함수처럼 파라미터를 가진 코드 블록
- 형식: (파라미터1, 파라미터2) -> EL식
- 삼항 연산자 활용 예시
${ greaterThan = (a,b) -> a > b ? true : false; '' } // 람다식으로 함수 선언
${ greaterThan(1,3)} // 호출
${ ((a,b)-> a > b ? true : false)(1,3) } // 생성과 동시에 호출
*파라미터가 1개일 시 괄호 생략 가능
ex. ${ factorial = n -> n== 1 ? 1 : n * factorial(n-1) ; '' }
10) Stream API
- 자바의 스트림 API를 사용 가능(EL 3.0) // 실제로는 EL에서 제공하는 스트림 API를 사용
- 기본 형태
collection.stream() // 스트림 생성
.map // 중간 연산(스트림 변환)
.toList() // 최종 연산(결과 생성)
- 예시
${lst.stream() // 스트림 생성
.filter(x -> x % 2 == 0) // 짝수인 원소만
.map(x -> x * x) // 제곱
.toList() } // 결과 생성
-메소드
filter() : 값을 걸러낼 때 사용 // 매개변수: 람다식(true or false)
map() : 원소를 변환한 값으로 새로운 스트림 생성 // 매개변수: 람다식(연산)
sorted() : 스트림 정렬 // comparable 인터페이스 구현 클래스외엔 람다식으로 비교식 지정
limit() : 지정한 크기의 스트림 생성
toList() : 자바 리스트 객체 생성
toArray() : 자바 배열 객체 생성
count() : 스트림의 원소 수 반환
sum() : 값의 합 반환
average() : 평균 값 반환
min() : 최소값 반환
max() : 최대값 반환
- 조건 충족 요소 확인 메소드
anyMatch() : 조건을 충족하는 값이 있을 경우 true값의 Optional 객체 반환
allMatch() : 모든 원소가 조건을 충족할 때 true값의 Optional 객체 반환
noneMatch() : 조건을 충족하는 원소가 하나도 없을 때 true값의 Optional 객체 반환
- Optional 타입: 결과값이 존재하지 않을 수도 있을 때 사용
get() : 값이 존재할 경우 값을 반환(값이 존재하지 않을 경우 ELException 발생)
orElse(other) : 값이 존재하지 않으면 other 반환
orLeseGet( (()->T) other ) : 값이 존재하지 않으면 람다식 other 실행 결과 반환
ifPresent( ((x) -> void) consumer ) : 값이 존재하면 람다식 consumer를 실행 후 전달
11) 표현 언어 비활성화 방법
- JSP 규약은 EL을 비활성화 시키는 세가지 방법 제공
- web.xml 파일에 EL 비활성화 옵션 추가
<jsp-property-group>
<url-pattern>범위</url-pattern> // EL을 비활성화시킬 페이지 범위 지정
<el-ignored>true</el-ignored> // EL 비활성화 처리
</jsp-property-group>
- JSP 페이지에서 EL 비활성화(page 디렉티브)
<%@ page isELIgnored="true" %> // EL 비활성화
<%@ page deferredSyntaxAllowedAsLiteral="true" %> // #{expr} 형식 EL 비활성화
- web.xml 파일의 버전에 따른 EL처리
web.xml 파일이 사용하는 서블릿 버전에 따라 EL 지원여부 결정
2.3 버전 : EL 미지원
2.4 버전 : #{expr} 미지원
2.5부터 : ${expr}, #{expr} 지원
'프로그래밍 > JSP' 카테고리의 다른 글
[JSP 요약 정리] 14. MVC 패턴(Model-View-Controller Pattern) (0) | 2019.02.10 |
---|---|
[JSP 요약 정리] 13. 표준 태그 라이브러리(JSTL) (0) | 2019.02.10 |
[JSP 요약 정리] 11. 세션(Session) (0) | 2019.02.09 |
[JSP 요약 정리] 10. 쿠키(Cookie) (0) | 2019.02.09 |
[JSP 요약 정리] 9.자바빈과 usbBean 액션 태그 (0) | 2019.02.09 |