Expression Language(표현 언어)
1. 표현언어의 개념
표현 언어는 값을 표현하는데 사용되는 스크립트 언어이다. (JSP 2.0 규약에서 추가 됨)
2. 표현언어에서 제공하는 기능
a. JSP의 기본객체(4가지)가 제공하는 영역의 속성 사용가능
b. 집합객체 접근방법 제공
c. 수치, 관계, 논리연산자 제공
d. 자바클래스 메서드 호출 가능
e. EL에서 자체 기본객체 제공
3. 표현 언어 사용 방법
${expr}
위의 expr부분에 표현언어로 정의한 문법에 따라 값을 표시하게 된다.
Attribute, request의 파라미터, ServletContext의 초기화 파라미터 등에 접근 가능
.(dot)연산자를 사용하여 Attribute에 저장된 Map이나 Beans 내부의 값에 접근 가능
실습예제
다음 클래스를 만들고 이를 사용하여 EL태그를 실습하자.
/src/eltag/Customer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
package eltag;
public class Customer {
private String name;
private String email;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
} |
cs |
이어서 el태그를 사용한 예제를 작성하여 실행해 본다.
/WebContent/eltag/elEx01.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="eltag.Customer, java.util.HashMap" %>
<%
Customer customer = new Customer();
customer.setName("홍길동");
customer.setEmail("hong@naver.com");
customer.setPhone("010-1234-1234");
request.setAttribute("customer", customer);
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "말리부");
map.put("maker", "쉐보레");
request.setAttribute("car", map);
%>
<html>
<head>
<title>EL Example</title>
</head>
<body>
<ul>
<li>이름 : ${customer.name}</li>
<li>메일 : ${customer.email}</li>
<li>전화 : ${customer.phone}</li>
</ul>
<ul>
<li>자동차 : ${car.name}</li>
<li>제조사 : ${car.maker}</li>
</ul>
</body>
</html> |
cs |
요청결과
표현언어로 배열 사용하기
다음 예제를 작성하고 실행하여 [] 연산자를 사용하는 방법을 확인한다.
/WebContent/eltag/elEx02.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="eltag.Customer, java.util.ArrayList" %>
<%
ArrayList<String> singer = new ArrayList<String>();
singer.add("에이핑크");
singer.add("여자친구");
request.setAttribute("singer", singer);
Customer[] customer = new Customer[2];
customer[0] = new Customer();
customer[0].setName("홍길동");
customer[0].setEmail("hong@naver.com");
customer[0].setPhone("011-123-4567");
customer[1] = new Customer();
customer[1].setName("이순신");
customer[1].setEmail("shin@naver.com");
customer[1].setPhone("010-1111-1111");
request.setAttribute("customer", customer);
%>
<html>
<head>
<title>EL Example</title>
</head>
<body>
<ul>
<li>${singer[0]}, ${singer[1]}</li>
</ul>
<ul>
<li>이름 : ${customer[0].name}</li>
<li>메일 : ${customer[0].email}</li>
<li>전화 : ${customer[0].phone}</li>
</ul>
<ul>
<li>이름 : ${customer[1].name}</li>
<li>메일 : ${customer[1].email}</li>
<li>전화 : ${customer[1].phone}</li>
</ul>
</body>
</html>
|
cs |
요청결과
표현언어에서 연산자와 예약어
표현언어에서 연산자와 내장객체 사용 예제
/WebContent/eltag/elEx03.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>간단한 표현언어</title>
</head>
<body>
<h3>간단한 표현언어(EL) 예제</h3>
<p>연산자를 사용한 예와 내장객체를 사용한 예</p>
<table border="1">
<tr> <td><b>표현식</b></td> <td><b>값</b></td> </tr>
<tr> <td>\${ 2 + 5 }</td> <td>${ 2 + 5 }</td> </tr>
<tr> <td>\${ 4 / 5 }</td> <td>${ 4 / 5 }</td> </tr>
<tr> <td>\${ 5 div 6 }</td> <td>${ 5 div 6 }</td> </tr>
<tr> <td>\${ 2 < 3 }</td> <td>${ 2 < 3 }</td> </tr>
<tr> <td>\${ 2 gt 3}</td> <td>${ 2 gt 3}</td> </tr>
<tr> <td>\${ 3.1 le 3.2 }</td> <td>${ 3.1 le 3.2 }</td> </tr>
<tr> <td>\${ (5 > 3) ? 5 : 3 }</td> <td>${ (5 > 3) ? 5 : 3 }</td> </tr>
<tr> <td>\${ header["host"] }</td> <td>${ header["host"] }</td> </tr>
<tr>
<td>\${ header["user-agent"] }</td>
<td>${ header["user-agent"] }</td>
</tr>
</table>
</body>
</html> |
cs |
요청결과
표현언어의 기본객체 11가지
EL 객체 사용 예제
/WebContent/eltag/elEx04.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("name", "홍길동");
%>
<html>
<head>
<title>EL Object</title>
</head>
<body>
요청 URI : ${ pageContext.request.requestURI } </br></br>
request의 name 속성 : ${ requestScope.name } </br></br>
code 파라미터 : ${ param.code } </br></br>
</body>
</html>
|
cs |
요청결과(요청 시 ?code=111 파라미터 전달)
EL 기본객체를 이용하여 파라미터를 처리하는 예제
/WebContent/eltag/elEx05.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8");%>
<html>
<head>
<title>표현언어의 사용예제</title>
</head>
<body>
<h3>파라미터 값 처리</h3>
</br></br>
<form action="elEx05.jsp" method="post">
이름 : <input type="text" name="name" value="${ param['name'] }">
<input type="submit" value="확인">
</form>
<p>
이름은 : ${ param.name } 입니다.
</p>
</body>
</html>
|
cs |
요청 처리 결과 확인
표현언어에서 함수 사용하기
EL에서는 <% %>를 사용하여 직접적으로 자바코드를 사용할 수 없다.
값을 표현하는 방식에 한계가 있다.
JSP2.2 버전부터 표현언어에서 객체의 메서드를 직접호출 할 수 있다.
EL을 사용하여 객체의 메서드 호출하는 예제
호출에 사용할 클래스(섭씨/화씨를 변환하는 클래스)
/src/eltag/Thermometer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
package eltag;
import java.util.HashMap;
import java.util.Map;
public class Thermometer {
private Map<String, Double> locationCelsiusMap = new HashMap<String, Double>();
public void setCelsius(String location, Double value) {
locationCelsiusMap.put(location, value);
}
public Double getCelsius(String location) {
return locationCelsiusMap.get(location);
}
public Double getFahrenheit(String location) {
Double celsius = getCelsius(location);
if (celsius == null) {
return null;
}
return celsius.doubleValue() * 1.8 + 32.0;
}
public String getInfo() {
return "온도계 변환기 1.0";
}
}
|
cs |
EL을 사용하여 객체의 메서드를 호출하는 JSP페이지
/WebContent/eltag/elEx06.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="eltag.Thermometer" %>
<%
Thermometer thermometer = new Thermometer();
request.setAttribute("t", thermometer);
%>
<html>
<head>
<title>온도 변환 예제</title>
</head>
<body>
${ t.setCelsius('서울', 27.3) }
서울 온도 : 섭씨 ${ t.getCelsius('서울') } 도 / 화씨 ${ t.getFahrenheit('서울') }
</br>
정보 : ${ t.getInfo() }
</body>
</html>
|
cs |
요청결과
다음으로 JSP2.0 버전부터 표현언어에서 클래스 메서드(static)를 호출 할 수 있다.
실습을 통해 표현언어에서 클래스 메서드(static method)를 사용하는 방법을 확인한다.
1. 예제에서 사용할 클래스 작성
2. 함수를 정의한 TLD파일 작성하기
3. web.xml파일에 TLD파일의 내용을 추가
4. JSP페이지에서 EL을 응용하여 함수 호출
work 1.
예제에서 사용할 클래스 작성
/src/eltag/DateUtil.java
1
2
3
4
5
6
7
8
9
10
11
12 |
package eltag;
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateUtil {
private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
public static String format(Date date) {
return formatter.format(date);
}
} |
cs |
EL에서 클래스메서드(static method)를 사용해야 하므로 날짜를 포멧하여 반환하는 메서드를 static으로 지정. static이 아닌 메서드는 사용할 수 없다.
work 2.
클래스메서드를 사용할 형식을 지정하는 TLD파일 작성
TLD(Tag Library Descriptor)파일?
- 태그 라이브러리에 대한 설정정보를 담고 있는 파일이다.
- EL태그를 통해 클래스메서드를 지정해두고 JSP에서 사용할 수 있도록 만들어 준다.
예제 tld작성
/WebContent/WEB-INF/tlds/el-functions.tld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001.XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eeweb-jsptaglibrary_2_0.xsd"
version="2.0">
<description>EL에서 함수실행</description>
<tlib-version>1.0</tlib-version>
<short-name>ELfunctions</short-name>
<uri>/ELfuntions</uri>
<function>
<description>Date객체를 포멧팅하여 출력</description>
<name>dateFormat</name>
<function-class>
eltag.DateUtil
</function-class>
<function-signature>
java.lang.String format( java.util.Date )
</function-signature>
</function>
</taglib> |
cs |
<설명>
- <function>태그
EL에서 사용할 메서드를 정의할 때 사용된다.(메서드당 하나의 <function>태그 사용)
- <name>태그
EL에서 메서드를 호출 할 때 사용할 이름
- <function-class>태그
EL에서 사용하는 메서드의 완전한 이름
- <function-signature>태그
실행될 메서드를 선언한다. (반환자료형 메서드이름 매개변수 자료형만을 명시)
work 3.
web.xml파일에 TLD내용을 추가
위에서 작성한 TLD파일을 WAS(Tomcat)에서 참조할 수 있도록 TLD파일 내용을 추가해야 한다.
1
2
3
4
5
6
7
8
9
10 |
<jsp-config>
<taglib>
<taglib-uri>
/WEB-INF/tlds/el-functions.tld
</taglib-uri>
<taglib-location>
/WEB-INF/tlds/el-functions.tld
</taglib-location>
</taglib>
</jsp-config> |
cs |
<taglib> : 사용할 태그라이브러리를 지정
<taglib-uri> : JSP에서 해당 태그 라이브러리를 참조하기 위한 식별자
<taglib-location> : 태그 라이브러리가 기술된 TLD파일의 위치를 지정
JSP페이지에서는 위에서 <taglib-uri>에 명시된 식별자를 통해 태그 라이브러리(현재 예제에서는 el-functions.tld)를 사용할 수 있게 된다.
work 4.
JSP작성 시 EL을 사용하여 정적 메서드 호출
EL에서 함수를 사용하기 위해 다음과 같은 형식으로 코드를 작성한다.
|
<%@ taglib prefix="pre" uri="..."%>
...
${ pre:메서드이름(arg1, arg2, ..) }
... |
cs |
taglib 디렉티브
web.xml파일에서 설정한 태그라이브러리를 사용한다고 명시
prefix속성
태그 라이브러리를 구분하는 접두어( .을 사용하여 라이브러리의 메서드를 호출)
메서드이름
TLD파일에서 <name>태그에 작성한 이름과 동일하게 작성
사용 예제
/WebContent/eltag/elEx07.jsp
1
2
3
4
5
6
7
8
9
10
11 12 13 14 15 16 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page session="true" %>
<%@ taglib prefix="elfunc" uri="/WEB-INF/tlds/el-functions.tld"%>
<%
java.util.Date today = new java.util.Date();
request.setAttribute("today", today);
%>
<html>
<head>
<title>EL 함수 호출</title> |
cs |
요청결과
'교육자료 > JSP' 카테고리의 다른 글
서블릿(Servlet) 이해하기 (0) | 2018.09.06 |
---|---|
JSTL(Java Standard Tag Library) 사용하기 (0) | 2018.09.06 |
(교육자료)파일 업로드 실습 (0) | 2018.09.06 |
(교육자료)세션 이해하기 실습 (0) | 2018.09.06 |
(교육자료)쿠키 이해하기 실습 (0) | 2018.09.06 |