07 EL
● 개요
○ 간단한 방법으로 데이터의 값을 웹 페이지에 출력할 수 있게 해줌
■ ‘$’ 기호와 ‘{ }’ 괄호 안에 출력되길 원하는 식을 포함하는 형태로 구현
■ EL식에 사용되는 문자열을 출력용으로 사용하는 것 : \ 사용
○ 역할
■ 특정식을 통한 데이터의 값 출력 및 다른 구성요소에 값을 지정
<%=request.getParameter ("data") %>로 출력한다면
${param.data} 이 것도 같은 역할
■ 전송된 파라미터의 이름을 request 내장객체를 이용하지 않고 바로 호줄하여 사용
● 문법
○ 특정 식을 통한 데이터의 출력을 수행하기 위해 사용하는 언어라는 것!
1) EL식의 데이터 이름
■ 출력을 위한 데이터를 지칭하기 위해 데이터의 이름을 사용
■ page, request, session, application 내장 객체dp 지정된 데이터들을 의미
■ 동일한 데이터의 이름이 여러 내장객체에 존재할 경우 사용범위 작은 곳부터 우선 해석 됨
一 사용범위 작음 사용범위 넓음 一
page - request - session - application
2) EL의 내장 객체
■ EL에 정의된 내장객체는 다른 JSP 스크립팅 요소에서는 사용할 수 없음
■ EL이용한 JSP 내장 객체 데이터 출력
□ 데이터명을 내장 객체 별 중복여부에 관계 없이 선택하여 출력 가능
□ $pageScope.ATTRIBUTE / $requestScope.ATTRIBUTE / $sessionScope.ATTRIBUTE / $applicationScope.ATTRIBUTE
□ 중복되는 파라미터 명이 mId 일 때${mId}는 파라미터 scope가 작은 것이 출력되지만
${applicationScope.mId}, ${requestScope.mId” 등으로 범위에 맞게 접근 가능
■ 요청 파라미터 데이터 출력
□ request 내장객체를 사용하지 않고도 요청 파라미터값을 출력 가능
□ paramValues의 경우 선택되지 않은 인덱스는 에러가 발생하는 것이 아니라 단지 출력되지 않는 식으로 동작함
$ {paramValues.language [2]}
${paramValues.language [3]}
o initParam식을 사용하여 웹 애플리케이션의 초기화 파라미터를 출력할 수 있음
web.xml의
<context-param>
<param-name>initParamName</param-name>
<param-value>initParamValue</param-value>
</context-param>
을
${initParam.initParaniName}
${initParam["initParamName"]}
이렇게 출력
■ 쿠키 정보 출력
□ ${ cookie.COOKIE_NAME.property}
□ ${ cookie.COOKIE _NAME ["property"]}
□ ${ cookie[”COOKIE_NAME"].property}
□ ${ cookie[“COOKIE _NAME”] ["property"] }
3) EL 연산자
■ 연산자 사용 가능
■ 산술 연산자는 데이터의 값이 자동으로 숫자로 형변환 되어 연산 수행
■ 비교 연산자는 숫자, 문자열 데이터 모두 사용 가능
■ 논리 연산자도 자바랑 사용법 동일
■ 삼항 연산자도 사용 가능
■ 엠티 연산자 : 명시된 DATA가 null 혹은 공백 문자열, 비어있는 콜렉션일 경우 true반환되는 연산자
$empty DATA
■ 연산자 우선순위 있음
[ ] > ( ) > -(단항_, !, not, empty > *, /, div, %, mod > +, - > <, >, <=, >= > ==, != > &&, and > ||, or > ?, :
● EL을 이용한 자바 메서드 사용
○ 자바 인스턴스 메서드 사용
■ 다양한 형태의 메서드를 리턴 타입과 파라미터의 유무 및 개수에 상관없이 EL을 통해 사용할 수 있음
■ 파라미터 속성명을 사용해 InstanceMethod 클래스 객체의 멤버메서드에 접근
<% InstanceMethod instanceMethod = new InstanceMethod();
request.setAttribute(“usingMethod”, instanceMethod);%>
■ 파라미터 이름에 메서드 명 붙여서 사용 “괄호 없음”
$usingMethod.setData(10)
○ 자바 정적 메서드 사용
■ JSP 2.1 이하 버전에서는 EL을 이용하여 자바의 정적 메서드(static method)만을 사용할 수 있으며 자바의 정적 메서드를 EL 함수로 등록하는 작업이 병행되어야 함
■ 정적 메서드를 EL을 통해 사용하기 위해선 TLD 파일 내에 EL 함수를 등록해주는 절차가 필요
■ TLD 파일 작성 (TLD_Tag Ubrary Descriptor : 태그 라이브러리 정보 설정을 위해 작성)
□ <taglib> 태그 : xmlns에 TLD문법의 식별자와 version 속성에 TLD 문법의 버전 작성
□ <description> 태그 : 사용할 태그 라이브러리에 대한 간략한 설명
□ <tlib-version〉 : 태그 라이브러리 버전이 지정
□ 〈short-name〉태그 : 현재 태그 라이브러리명을 지정
□ 〈function〉태그 : 현재 태그 라이브러리에서 호출할 수 있는 함수를 제작하기 위한 태그
□ 〈name〉태그 : 사용될 함수의 이름
□ 〈function-class> : 사용할 정적 메서드가 정의되어 있는 자바 클래스의 풀네임
□ <function-signature> : 태그에 등록한 정적 메서드의 리턴 타입, 메서드명, 메서드의 입력 파라미터의 데이터 타입
<taglib xmlns='1http://java.sun.com/xml/ns/javaee" version=”2.1”>
<description>EL의 자바 정적 메서드 사용〈/description>
<tlib-version>l.O</tlib-version>
<short-name>ELStaticMethod</short-name>
<function>
<name>useStaticMethod</name>
<function-class>MethodTest.StaticMethod</function-class>
<function-signature>int getData(int)〈/function-signature〉
</function>
</taglib>
■ web.xml에 TLD 파일을 등록 -> 웹 컨테이너에 인식
□ <taglib> 태그 작성 -> TLD 파일의 식별자를 지정하기 위한 <taglib-uri> 태그와 TLD 파일의 경로명을 지정해주기 위한 <taglib-location> 태그를 작성
web.xml
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tlds/static-method.tld</taglib-uri>
<taglib-location>/WEB-INF/tIds/static-method. tld</tagliblocation>
</taglib>
</jsp-config>
</web-app>
■ 태그 라이브러리 지시자 지정
<%@ taglib prefix:”태그라이브러리 구분용 접두어" uri=”TLD 파일의 URI” %>
■ 사용
$ 접두어 : TLD 파일의<function>태그 내 <name> 태그로 지정된 함수명 ( 입력 파라미터 )
● EL 비활성화
1) page 지시자를 이용한 비활성화
■ <%@ page isELIgnored=”true" %>
#[ ] 형식의 EL 구문 실행 막기 : cieferredSyntaxAllowrdAsLiteral 속성값을 true로 지정.
<%@ page deferredSyntaxAllowrdAsLiteral =”true" %>
2) web.xml의 〈jsp-property-group〉태그를 이용한 비활성화
■ EL을 비활성화할 대상 페이지의 URL 패턴을 지정하는 〈url-pattern〉태그와 <el-ignored> 태그 값을 true로 지정
<jsp-config>
<jsp-property-group>
<url-pattern>/notUsingEL.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
'JSP > 이론' 카테고리의 다른 글
[JSP][이론]09 JSTL (0) | 2020.09.07 |
---|---|
[JSP][이론]06 데이터베이스 프로그래밍 (0) | 2020.09.07 |
[JSP][이론]05 JSP 액션 태그 (0) | 2020.09.07 |
[JSP][이론]04 JSP 세션 관리_HTTPSession (0) | 2020.09.05 |
[JSP][이론]04 JSP 세션 관리_쿠키 (0) | 2020.09.05 |