표현언어는 변수의 값을 출력할 때 사용하는 스크립트 언어
지금까지는 앞서 배웠던 <%=%> 표현식 만으로 충분했으나
표현 언어를 사용하면 좀더 쉽고 간결하게 코드를 짤수있다
표현언어는 4가지영역에 저장된 값을 출력할 때 사용되며
사용법이 매우 간결하고 예외와 형변환에 관대하다는 특징이있다
표현언어의 기능
- JSP 내장 객체의 영역에 담긴 속성을 사용할 수 있다.
- 산술연산, 비교연산, 논리연산이 가능하다.
- 자바클래스에 정의된 메서드를 호출할 수 있다.
- 표현 언어만의 객체를 통해 JSP와 동일한 기능을 수행할 수 있다.
그리고 표현언어는 EL이라고 줄여부른다.
기본사용법
${ 속성 }
여기서 속성은 영역에 저장된 속성을 뜻한다
즉 변수나 값을 바로 사용 쓸수 있었던 표현식과는 다르다
만약 JSP에서 생성한 변수를 접근할려면 반드시 영역에 저장후 사용해야한다
만약 request영역에 저장하였다면 다음과 같이 출력할 수 있다.
${ requestScope.saveVar }
EL은 HTML 태그나 자바스크립트,CSS 어디에서든 사용할 수 있다,
또한 액션태그나 jstl의 속성값으로도 사용할수있다.
<c:set var="elVar" value="${ elVar ]" /> 액션태그와 함께 사용
<jsp:include page="${ pathVar }" /> JSTL과 함께사용
하지만 JSP 스크립트요소 (선언부, 표현식, 스크립틀릿) 에서는 사용할수없다
<%!
void mymethod(${ errorVar }) { . . . // 선언부에서 사용했으므로 에러 발생
%>
<%@ include file="${ errorVar }" %> 스크립틀릿에서 사용했으므로 에러 발생
<%= ${ errorVar } %> 표현식에서 사용했으므로 에러 발생
.(점)이나 [ ]'(대괄호)'이용
${ param.name }
${ param["name"] }
${ param['name'] }
${ header["user=agent"] } 가능
${ header.user-agent } 에러 발생
${ king[ '한글' ] } 가능
${ king.한글 } 에러 발생'
el의 내장객체들을 이용해
쿠키와 헤더도 출력할수있다.
예를들면 ${param.name} 는request.getParameter("name") 과 같아서
EL 내장 객체를 이용해 코드를 쉽게 줄여쓸수있다.
EL에서는 일반 연산자와 EL만의 기호연산자를 둘다 사용할수있으나
실제로는 일반 연산자만 쓰일뿐 EL기호연산자는 거의 쓰이지않는다
EL은 = 연산자를 사용하여 변수에 값을 할당할수 있다
다만 할당과 동시에 출력되기때문에
only 할당만 하고싶다면 세미콜론과 작은따옴표를 함께 사용해야한다
${ numberVar = 10 } 할당과 동시에 출력
${ numberVar = 10;'' } 할당만 되고 출력은 되지않음
EL에서 + 는 오로지 덧셈을 위해서만 사용된다
숫자형태의 문자열이라면 자동으로 숫자로 변환되어 계산되지만
문자가 포함되어있다면 변환이 되지않아 에러가 발생한다
( + 를 사용할땐 숫자만 써야한단 이야기)
다음과같이 값이 없을 때 true를 반환하는 연산자
자바의 삼항 연산자와 사용법이 동일
${ 조건 ? "true일 때 선택" : "false 일 때 선택" }
자바에서는 null을 조작하려 하거나 연산에 사용하면 NullPointerException이 발생한다
하지만 EL에서는 null을 0으로 인식되어 예외가 발생하지않는다.
EL에서는 자바코드를 직접 사용할수는 없어서 불편할때가 있다
이불편함을 덜어주는점이 EL에서 메소드호출이 가능하다는점이다
크게
객체생성후 메서드 호출
클래스 명을 통한 정적 메서드 호출
TLD를 이용한 정적 메서드 호출이
이 있다
그러나 TLD를 이용한 메서드 호출은 다른 두가지 방법들에비해 복잡하고 효율적이지않기때문에
잘 사용하지는 않는다고한다.