EL은 데이터를 출력하기 위한 언어로서 문법이 직관적으로 사용하기 쉽게 구성이 되어있다.
일반적으로 JSP에서는 변수를 출력할 때 변수선언과 초기화가 반드시 필요하지만 EL은 그러한 과정 없이 바로 사용이 가능하고 null값 처리가 쉽다.
따라서 다양한 형태로 저장된 데이터를 효율적으로 처리할 수 있는 장점이 있다. 다양한 형태란 것은 Map형식, List 형식, 배열 형식, 자바빈(JavaBeans)등과 같은 형태를 의미한다.
* EL언어의 문법: ${ EL변수 }
* EL변수란 무엇인가? 또한, 무엇이 EL변수로 지정가능한가?
(1) 4개의 공유영역에 바인딩 되어있는 공유속성명 (***)
(이거야말로, 진짜 EL스펙상 나오는 EL변수임)
<%-- 사용법: ${ 공유속성명 } : EL은 지정된 공유속성을 가장 짧은 공유영역을 시작으로
가장 긴 공유영역 순으로 찾아들어감 : page > request > session > application --%>
pageScope : ${ __PAGE__ }</li>
requestScope: ${ __REQUEST__ }</li>
sessionScope: ${ __SESSION__ }</li>
applicationScope: ${ __APPLICATION__ }</li>
<!-- 없는 공유속성을 EL변수로 지정하면, 빈문자열(Empty String) 출력 -->
Unknown Shared Attribute: ${ __TTT__ }</li>
(2) EL의 내장객체
<!-- EL변수로 내장객체 사용: 각공유영역Scope.공유속성명 -->
<li>pageScope : ${ pageScope.__PAGE__ }</li>
<li>requestScope: ${ requestScope.__REQUEST__ }</li>
<li>sessionScope: ${ sessionScope.__SESSION__ }</li>
<li>applicationScope: ${ applicationScope.__APPLICATION__ }</li>
<!-- EL변수로 내장객체 사용: param.전송파라미터명 -->
<li>param.name : ${ param.name }</li>
<li>param.age : ${ param.age }</li>
<li>param.hobby#1 : ${ param.hobby }</li>
<li>param.hobby#2 : ${ Arrays.toString( paramValues.hobby ) }</li>
<!-- EL변수로 내장객체 사용: header.요청메시지헤더명 -->
<li>header.Connection : ${ header.Connection }</li>
<li>header.Accept : ${ header.Accept }</li>
<!-- EL변수로 내장객체 사용: cookie.요청메시지쿠키명 -->
<li>cookie.JSESSIONID.getValue() : ${ cookie.JSESSIONID.getValue() }</li>
<!-- web.xml 파일에 등록된 context 초기화 파라미터 획득 및 출력 : -->
<!-- initParam.Context초기화파라미터명 -->
<li>initParam.driver: ${ initParam.driver }</li>
<li>initParam.jdbcUrl: ${ initParam.jdbcUrl }</li>
<li>initParam.user: ${ initParam.user }</li>
<li>initParam.pass: ${ initParam.pass }</li>
<!-- EL변수로 내장객체 사용법: pageContext.getter메소드명.getter메소드명 -->
<!-- 1. 아래는 다음과 같음: pageContext.getRequest().getRequestURI() 리턴값 출력 -->
<li>pageContext #1 : ${ pageContext.request.requestURI }</li>
<!-- 2. 아래는 다음과 같음: pageContext.getRequest().getSession().getId() 리턴값 출력 -->
<li>pageContext #2 : ${ pageContext.request.session.id }</li>
(3) JSTL의 문법상, 만들어지는 EL변수
* 특정 공유영역에 바인딩 되어있는 공유속성이
아래와 같은 다양한 타입의 객체라면, 어떻게 ${ } 문법으로, 위 객체들을 출력할 수 있는가!?
(1) "자바빈즈" 객체
${ 공유속성.프로퍼티명 } / ${ 공유속성명.getter메소드호출 }
1. LoginBean.userid: ${ loginBean.userid } == ${ loginBean.getUserid() } <br>
2. LoginBean.passwd: ${ loginBean.passwd } == ${ loginBean.getPasswd() }
(2) Map 객체
${ 공유속성.KEY } / ${ 공유속성명.get(key) 메소드호출 }
<%
Map<String, Object> map = new Hashtable<>();
map.put("KEY_1", "VALUE_1");
map.put("KEY_2", "VALUE_2");
map.put("KEY_3", "VALUE_3");
session.setAttribute("__MAP__", map);
%>
1. map : ${ __MAP__ } <br>
2. KEY_1 : ${ __MAP__.KEY_1 }, ${ __MAP__.get("KEY_1") } <br>
3. KEY_2 : ${ __MAP__.KEY_2 } <br>
4. KEY_3 : ${ __MAP__.KEY_3 } <br>
(3) 배열 객체
${ 공유속성[인덱스번호] }
<%
int[] arr = { 1, 2, 3 };
pageContext.setAttribute("__ARRAY__", arr);
%>
1. arr: ${ __ARRAY__ } <br>
2. arr[0] : ${ __ARRAY__[0] } <br>
3. arr[1] : ${ __ARRAY__[1] } <br>
4. arr[2] : ${ __ARRAY__[2] } <br>
(4) List 컬렉션
${ 공유속성[인덱스번호] } / ${ 공유속성명.get(인덱스번호) 메소드호출 }
<%
List<Double> list = Arrays.<Double>asList(.1, .2, .3);
application.setAttribute("__LIST__", list);
%>
1. list: ${ __LIST__ } <br>
2. list[0] : ${ __LIST__[0] }, ${ __LIST__.get(0) } <br>
3. list[1] : ${ __LIST__[1] } <br>
4. list[2] : ${ __LIST__[2] } <br>
(5) 사용자 정의 객체
${ 공유속성.값을반환하는메소드호출 }
<%
class Person { // Local Class
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
} // constructor
} // end class
Person person = new Person("Choonsik", 28);
request.setAttribute("__PERSON__", person);
%>
'교육과정 기록 > 💻back-end' 카테고리의 다른 글
[08.03] MyBatis 개념 정리 (0) | 2022.08.03 |
---|---|
[08.02] MyBatis (0) | 2022.08.02 |
[7.27] JSP - 액션 태그, 자바빈(JavaBeans) 규약 (0) | 2022.07.27 |
[7.27] JSP - 예외 처리 (0) | 2022.07.27 |
[7.26] JSP 기본 개념 (0) | 2022.07.26 |