EL은 무엇일까영???? EL은 Expression Language의약자로 JSP 객체의 출력을 단순화하는 용도로 사용됩니다.
이는 JSP에서 지원하는 스크립트릿 (<% %>) 보다 사용법이 간단합니다.(물론 사용법을 익혔을 때 얘기지영!)
EL의 특징에 대해서 간략하게 알아봅시당.
- JSP 2.0에서 새롭게 추가된 스크립트 언어! JSTL 1.1버전에 포함된 기능을 제공!
- EL은 JSP의 기본적인 4가지 영역의 속성의 내부 객체에 접근하여 출력을 처리하며, 기본적으로 자바의 문법이 적용됩니다.
- 데이터 뿐만 아니라 다양한 연산결과의 출력이 가능합니당.
EL을 사용하겠다는 설정은 기본적으로 설정이 되어있지만, 만약 인식이 안되면 페이지 상단에
<%@ pageisELIgnored="false"%> 라고 선언하면 됩니다. 또한 EL을 사용하지 않는 방법 역시 존재합니당!ex) <%@ pageisELIgnored="false" contentType = "text/html;charset=euc-kr" %>
- 만약 null 값인 경우"null"이라고 값을 출력하지 않습니다.
1. EL 사용에 필요한 연산자 알아보기!
- 자바의 문법을 따르므로 자바 문법과 비슷한 내용이 많습니다.
연 산 자 | 설 명 |
. (온점) | 빈의 프로퍼티나 맵(Map)의 엔트리 접근 |
[ ] | 배열이나 리스트(List) 엘리먼트 접근 |
( ) | 괄호, 표현식의 연산 순서를 바꿔서 연산하게 할 때 |
a ? b : c | 조건(a)이 true일 때 리턴 값 b ,false일 때 리턴 값 c |
+ , -, * | 사칙연산 중 더하기, 빼기, 곱하기 |
/ 또는 div | 사칙연산 중 나누기 |
% 또는 Mod | 나머지 값을 구함 |
== | 같다 (equal) |
!= | 같지 않다 |
< 또는 lt | 보다 작다 |
> 또는 gt | 보다 크다 |
<= 또는 le | 작거나 같다 |
>= 또는 ge | 크거나 같다 |
&& 또는 and | 논리연산자 AND. 두쪽 모두가 true여야 true |
|| 또는 or | 논리연산자 OR. 한쪽만 true여도 true |
! 또는 not | 값을 반대로 만듬. true를 false로, false를 true로 |
empty | 빈 변수 값 체크, null, 빈 문자열, 빈 배열 등인지를 확인한다. ex) ${empty param.name} name이 빈 내용이라면 |
func(매개변수) | 함수를 호출한다. func에는 함수 이름이 들어가고, 매개변수라고 써있는 부분에는 매개변수가 들어갈 수도 있고 아닐 수도 있으며, 때에 따라 쉼표(,)를 통해 구분 되는 매개변수 여러개가 들어갈 수도 있다. |
2. JSP 내부 객체에 접근하기 위해 EL에서 제공하는 객체
EL은 11개의 기본객체를 제공하며 별다른 추가 코드 없이 사용할 수 있다.
pageContext | PageContext 객체 접근시 사용 |
pageScope | page 영역에 포함된 객체 접근시 사용 |
requestScope | request 영역에 포함된 객체 접근시 사용 |
sessionScope | session 영역에 포함된 객체 접근시 사용 |
applicationScope | application 영역에 포함된객체 접근시 사용 |
param | HTTP의 파라미터들로 요청 파라미터(form data등)를 읽어 올 때 사용 |
paramValues | 하나의 파라미터의 값들. 요청 파라미터(form data등)를 읽어 올 때 사용. 같은 이름으로 여러 개가 넘어 올 경우 사용. |
header | 요청정보의 Header의 값을 읽어올 때 사용. |
headerValues | 요청정보의 Header의 값을 읽어올 때 사용. 같은 이름으로 여러 개의 값이 저장되었을 경우 사용. |
cookie | client에서 넘어온 쿠키의 값을 조회시 사용 |
initParam | name-value로 저장된 초기 파라미터값을 읽어올 때 사용. ServletContext로 부터 읽어 온다. |
* pageContext를 제외하고 모두 Map형식입니다.
(이 내용은 JSP에 대한이해가 있어야 쉽게 이해하실 수 있지영.)
3. EL을 사용해 봅시당.
- 기존의 스크립트릿과의 사용법을 비교해 봅시당.
request의 name 속성(스크립틀릿 방식):<%=request.getAttribute("name")%>
request의 name 속성(EL): ${requestScope.name}
${ } 기호는 기본적으로request 자원에 접근합니다.
1) 표현방법
${expression} - ${} 에서 {} 사이에 표현 하고자 하는 내용을 넣어봅시당.
${value1.value2.[value3…]}
${value1[“value2”]} ${value1[value2[“value3”]]
value1은 EL 내장객체나 속성명을 적어줍니다.
JSP의 script(scriptlet, 표현식, 선언부)요소를 제외한 나머지 부분에서 사용된다.
예)
<jsp:include page="/abc/${dir.pageURL}"/>
${sessionScope.userInfo[“id”]}님 환영합니다.
입력하신 값은 ${requestScope.answer} 입니다.
2) 값 출력 메커니즘
EL의 표현식은 객체에 접근할때 ‘.’ 또는 []를 이용합니다. 자세한 설명은 위의 표를 참조하세영.
예) ${mvo.name}과 ${mvo["name"]}은 동일한 값을 받아냅니다.
3) 4개의 저장영역에서 값 가져오기
EL은 4개의 저장영역(page, request, session, application scope)에서 값을 쉽게 가져와 출력 할 수 있게 합니다.
접근 할 수 있는 11가지 방법은 위에서 자세하게 소개하였으므로 그것을 참고하세요.
${cust.name} 4영역의 scope에서 cust로 저장된 객체를 참조하여 getName()를 호출한 값을 출력.
동일한 이름의 객체가 여러영역에 있는 경우 내장객체를 사용하여 확실하게 선언하면 값을 불러올 수 있습니다.
이렇게 ${requestScope.cust.name} 를 통해 명시적으로 접근합니다.
4) Collection에서 값 가져오기
Collection에서 값을 불러올 때는 [] 연산자를 사용합니다.
예)
String [] fruit = {"grape", "berry", "orange"};
Map mp = new HashMap();
mp.put("name1", "value1");
session.setAttribute("array", fruit);
session.setAttribute("map", mp);
----------- 불러와 볼까요?
${array[1]}, ${array[2]}, ${array[3]};
${map["name1"]}
4. 산술 연산
- EL은 숫자연산도 가능합니다. 오예!
ex) ${"10"+1} – "10"을 숫자로 변환 후 계산
${"일"+1} – 오류 발생
${null+1} – null은 0으로 처리된다.
비교연산자와 논리연산자는 위에 정리해두었으니 참고하쎄영!
5. EL 비활성화
- EL을 사용하고 싶지 않을 때가 있겠지영? 그럴 때 설정하시는 방법이 있습니당.
1) web.xml <el-ignored>를 true로 지정
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</>
<el-ignored>true</>
</>
</>
2) JSP 페이지의 page 지시자 태그에서 isELIgnored="true"를 주어 비활성화 시킨다.
(상단에 EL 활성화하는 법을 참조하시면 더 쉬울 겁니당)
흑.. 드디어 EL에 대해서 간단하게 짚고 가네요. 사실 JSP를 쓰면서 스크립트릿을 더 많이 썼는데, 어느 순간 EL이 더 편하고
값에 접근하는 방식이 JSP 지원 스크립트릿보다 훨씬 낫다는 것을 느꼈습니다. 사용은 역시 해본 사람만이 장점과 단점을 잘 알겠죠.
스크립트릿의 사용이 많이 줄어들게 된 이유로는, JSP로 페이지의 구조를 잡는 것과 JAVA단의 Logic 구성을 완전히 분리시키면서부터
스크립트릿은 거의 사용하지 않게 되었네요. 이전에 과제로 프로젝트를 진행했을 때는 정말 많이~ 많이~
HTML 구조와 Logic. 그리고 SQL을 불러오기 위한 JDBC까지 섞여있는 모습을 볼 수 있었는데.. 음.. 정말 지금이라도 이렇게
분리해서 사용할 수 있다는게 다행이네영.
다음 포스팅은 어떤 글로 찾아와야 하는지 고민해봅시당. 빨리 봄이 왔으면 좋겠네용.
'PROGRAM > JAVA / JSP' 카테고리의 다른 글
java.net.SocketException : Broken pipe (0) | 2015.09.16 |
---|---|
final과 static의 다양한 사용 방법 (2) | 2012.04.13 |
equals와 ==의 차이점 (9) | 2011.02.28 |
eclipse에서 Javadoc을 만들어봅시당. (1) | 2011.02.18 |
CKEditor 사용법 (2) | 2011.01.25 |