1. EL 객체 메소드 호출
- 클래스 작성
- 섭씨로 온도를 설정하고 섭씨나 화씨로 온도를 읽어들이는 기능을 가진 클래스
package thermometer;
import java.util.HashMap;
import java.util.Map;
public class Thermometer {
private Map<String, Double> locationCelsiusMap = new HashMap<>();
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*1.8+32.0;
}
public String getInfo() {
return "온도계 변환기 1.1";
}
}
- 컴파일 후 아래 JSP 코드와 같이 import하여 사용한다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="thermometer.Thermometer" %>
<%
Thermometer thermometer = new Thermometer();
request.setAttribute("t", thermometer);
%>
<!DOCTYPE html>
<html>
<head>
<title>온도계 변화</title>
</head>
<body>
<p>${t.setCelsius("서울", 27.3)}</p>
<p>${t.getCelsius("서울")}도 / ${t.getFahrenheit("서울")}화</p>
</body>
</html>
-
request
기본객체에 t라는 이름으로 객체를 추가한다. -
EL에서 속성의 이름을 통해 객체의 메소드를 호출할 수 있다.
requestScope.t.메소드()
와 같이 객체 영역을 명시하지 않아도 된다.- 객체 이름을 명시하지 않으면 page, request, session, application 4개의 기본객체를 탐색한다.
2. EL에서 정적 메소드 호출하기1
-
이 방법은 설정할 것이 많고 더럽고 짜증난다.
- 2번째 방법이 간편하고 실제로 주로 사용하는 방법이다.
- 이 방법은 알고만 있자.
-
정적 메소드 정의하기
- 아래 Java 클래스 작성 후 classes에 컴파일
package util;
import java.text.DecimalFormat;
public class FormatUtil {
public static String number(long number, String pattern) {
DecimalFormat format = new DecimalFormat(pattern);
return format.format(number);
}
}
-
TLD 파일
- Tag Library Descriptor의 약자
- 태그 라이브러리에 대한 설정 정보를 담고 있다.
- 확장자는 .tld
-
첫 번째로 TLD 파일에 <function> 태그를 사용해서 사용할 함수와 함수가 포함된 클래스를 등록한다.
- <name> 태그는 EL에서 사용할 함수의 이름이다.
- <function-class> 태그는 함수가 정의된 클래스 이름이다. WEB-INF/classes 하위 폴더에서 찾는다.
- <function-signature> 태그는 함수가 실행될 메소드를 지정해준다.
<?xml version="1.0" encoding="utf-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>EL에서 함수실행</description>
<tlib-version>1.0</tlib-version>
<short-name>ELfunctions</short-name>
<function>
<description>숫자 포맷팅</description>
<name>formatNumber</name>
<function-class>util.FormatUtil</function-class>
<function-signature>
java.lang.String number(long, java.lang.String)
</function-signature>
</function>
</taglib>
- 두 번째로 web.xml에 TLD 파일을 등록해준다.
...
<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>
...
-
<taglib-uri>
- JSP에서 TLD 파일을 참조할 때 사용할 일종의 식별자
-
<taglib-location>
- 위 식별자가 가르키는 TLD 파일의 실제 위치(여기서는 같게 사용했다.)
- 세 번째로 JSP에서 아래와 같이 태그 라이브러리를 사용할 수 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="elfunc" uri="WEB-INF/tlds/el-functions.tld" %>
<%
request.setAttribute("price", 12345);
%>
<!DOCTYPE html>
<html>
<head>
<title>EL함수 호출</title>
</head>
<body>
<p>
오늘은 <b>${elfunc:formatNumber(price, "#,##0")}</b> 입니다.
</p>
</body>
</html>
-
<taglib>
- uri에 해당하는 TLD 파일을 web.xml에서 매칭해보고 해당 파일의 실제 위치를 찾는다.
- 해당 파일의 위치를 알기 때문에 TLD에 등록된 함수들을 사용할 수 있다.
- prefix는 EL에서 간편하게 참조하기 위한 접두어이다.
-
함수를 호출할 때 TLD에 등록한 이름을 사용한다.
출력결과
오늘은 12,345 입니다.
3. EL에서 정적 메소드 호출하기2
- 그냥 일반 클래스처럼 import 후 사용할 수 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="util.FormatUtil" %>
<%
request.setAttribute("price", 12345);
%>
<!DOCTYPE html>
<html>
<head>
<title>EL 함수 호출 2</title>
</head>
<body>
<p>
오늘은 <b>${FormatUtil.number(price, "#,##0")}</b> 입니다.
</p>
</body>
</html>
'웹 > JSP' 카테고리의 다른 글
16. EL(Expression Language) 스트림 (0) | 2020.07.21 |
---|---|
14. EL(Expression Language) 연산자 (0) | 2020.07.21 |
13. EL(Expression Language) 기본 (0) | 2020.07.21 |
12. 세션(Session) (0) | 2020.07.19 |
11. 쿠키(Cookie) (0) | 2020.07.19 |