New World
[JSP 공부 #6] 표현 언어(EL) 본문
표현식
내장객체 또는 액션태그에 저장된 자료를 쉽게 참조하기 위해 만들어진 언어
<%= %>인 표현식 대신 ${exp}(표현언어는 $로 시작) 사용
${내장 객체 또는 속성.속성값} (속성은 범위 내장 객체의 안에 있는 것)
표현식 exp에서는 산술, 관계, 논리와 같은 기본적인 연산 가능
자료 유형: 정수, 실수, 문자열('...' or "..."), boolean, null 값
기존 코드와 표현 언어 코드 비교
| 기존 코드 | 표현 언어 코드 |
|
String name = request.getParameter("name"); |
${param.name} |
|
${param.['name']} |
|
|
${param.["name"]} |
| EL을 위한 내장 객체 | ||
| java.util.Map | 범위 | pageScope |
| requestScope | ||
| sessionScope | ||
| applicationScope | ||
| 요청 매개 변수 | param | |
| paramValues | ||
| 요청 헤더 | header | |
| headerValues | ||
| 쿠키 | cookie | |
| 초기화 매개변수 | initParam | |
| javax.servlet.jsp.PageContext | JSP page 객체 | pageContext |
Map<K, V> (자료 유형: java.util.Map)
- 키와 값이 한 쌍으로 구성되는 요소를 다루는 컬렉션
- K: 키로 사용할 요소의 타입, V: 값으로 사용할 요소의 타입
- 키는 해시맵에 삽입되는 위치 결정에 사용
- 값을 검색하기 위해서는 반드시 키 이용
- 빠른 삽입, 삭제, 검색(요소 삽입: put(), 요소 검색: get())
ex)
HashMap<String, String> h = new HashMap<String, String>();
h.put("apple", "사과"); //키: apple, 값: 사과 해시맵 삽입
String kor = h.get("apple"); //"apple" 키로 값 검색 kor은 사과로 출력
| May<K, V>의 주요 메소드 | |
| V get(Object key) | 지정된 키의 값 리턴, 키가 없으면 null리턴 |
| Set<K> keySet() | 해시맵의 모든 키를 담은 Set<K> 컬렉션 리턴 |
| void clear() | 해시맵의 모든 요소 삭제 |
| boolean containsKey(Object key) | 지정된 키를 포함하고 있으면 true 리턴 |
| boolean containsValue(Object value) | 지정된 값에 일치하는 키가 있으면 true 리턴 |
| boolean isEmpty() | 해시맵이 비어 있으면 true 리턴 |
| V put(K key, V value) | 키와 값의 쌍을 해시맵에 저장 |
| V remove(Object key) | 지정된 키를 찾아 키와 값 모두 삭제 |
| int size() | HashMap에 포함된 요소의 개수 리턴 |
| ArrayList<E> 클래스의 주요 메소드 | |
| boolean add(E element) | ArrayList의 맨 뒤에 element 추가 |
| void add(int index, E element) | 인덱스 위치에 element 삽입 |
| boolean addAll(Collection<? extends E> c) | 컬렉션의 모든 요소를 ArrayList의 맨뒤에 추가 |
| void clear() | ArrayList의 모든 요소 삭제 |
| boolean contains(Object o) | ArrayList가 지정된 객체를 포함하고 있으면 true 리턴 |
| E elementAt(int index) | 인덱스의 요소 리턴 |
| E get(int index) | index 인덱스의 요소 리턴 |
| int indexOf(Object o) | o와 같은 첫번째 요소의 인덱스 리턴, 없으면 -1리턴 |
| boolean isEmpty() | ArrayList가 비어있으면 true 리턴 |
| E remove(int index) | 인덱스의 요소 삭제 |
| boolean remove(Object o) | o와 같은 첫번째 요소를 ArrayList에서 삭제 |
| int size() | ArrayList가 포함하는 요소의 개수 리턴 |
| Object[] toArray() | ArrayList의 모든 요소를 포함하는 배열 리턴 |
표현언어에서 이용할 함수 만들기
${prefixname:functioname()}
클래스에 정의한 메소드를 표현 언어로 호출하려면 접두어 prefixname으로 태그 선언
- 클래스 작성: [Java Resources: src]/[패키지]
- TLD 파일 작성: [WebContent]/[WEB/INF/[tld]
- JSP 파일 작성: [WebContent]
표현언어에서 등록한 태그의 함수를 호출하려면 - <tablib> 태그를 이용해 태그 접두어와 이용할 함수가 정의되어 있는 TLD 파일 지정
ex)
tld 파일 내 코드
<%@taglib prefix="date" url="/WEB-INF/tld/ELfunction.tld"%>
<function>
<name>format</name>
</function>
${date.format(now)}
표현언어 비활성화
- 표현언어는 JSP 페이지 규약 2.0에 추가된 기능
- 만일 JSP 규약 2.0 이전 버전에서 개발된 JSP 프로그램을 JSP 규약 2.0 에서 실행한다면 오류 발생 ($로 시작하는 문자열을 표현 언어로 인식 => JSP 페이지에서 표현언어를 사용하지 않겠다는 비활성화 지시를 내려야함)
- 페이지 단위 또는 응용 프로그램 단위 또는 서버 단위로 가능
| 페이지 단위 | 각 JSP 페이지 | 페이지 지시자 속성 isELIgnored 추가 |
| 응용프로그램 단위 | [WEB-INF]/web.xml | 태그<el-ignored> 추가 |
| 서버 단위 | [conf]/web.xml |
태그<el-ignored> 추가 |
'Programming > Languages' 카테고리의 다른 글
| [PHP+MySQL+PHPAdmin] 서로 다른 테이블의 속성을 select 하여 json 형식으로 만들기 (0) | 2020.08.08 |
|---|---|
| [JSP 공부 #7] JSTL (0) | 2020.06.30 |
| [JSP 공부 #5] JDBC 프로그래밍 (0) | 2020.06.30 |
| [JSP 공부 #4] 데이터 베이스와 MySQL (0) | 2020.06.30 |
| [JSP 공부 #3] 자바 빈즈(JAVA Beans) (0) | 2020.06.30 |