EL 표현에서도 함수(메소드)를 사용할 수 있다.
EL에서 메소드를 사용하기 위해서는 다음과 같은 순서를 따라 작성해야 한다.
1. 정적인 공용 메소드를 제공하는 클래스를 만든다.
해당 메소드는 EL(JSP)에서 사용할 메소드이므로 반드시 정적인 공용 메소드여야 하며, 리턴 타입이 있어야 한다. 그래야지 JSP에서 브라우져에 내용을 그릴 수 있다.
2. 태그 라이브러리 서술자 파일을 만든다.
EL 함수를 사용하기 위해서는 TLD(Tag Library Descriptor)란 파일로 자바 클래스, 메소드와 EL에서 호출할 메소드 명을 맵핑해야 한다.
3. JSP에 taglib 지시자를 코딩한다.
4. 함수를 호출하는 EL을 작성한다.
위 형식대로 EL을 작성해 보면 아래 처럼 작성할 수 있다.
java파일은 com.example 패키지에 만들고, tld 파일은 WEB-INF 디렉토리 밑에 만든다. jsp 파일은 WebContent(DocumentRoot) 아래에 바로 만든다.
조금 복잡한 감이 있다.
jsp 파일에서는 네임스페이스 개념의 prefix를 taglib에 정해주고 호출할 uri를 적어준다. 호출할 uri명은 tld 파일에 작성한 uri 값이다.
tld 파일에서는 jsp에서 호출할 함수 이름(rollIt)과 실재 class명, 그리고 실재 함수명을 적어주고 실재 클래스, 함수와 jsp에서 호출할 함수명을 서로 맵핑 시킨다.
개인적으로 이해가 되지는 않지만, 자바는 겹겹히 숨겨 두는 방식을 좋아하는 듯 하다 -.-;;
덧1. function-signature에 들어가는 실제 메소드에 인자를 줄 수 있다.
덧2. 컨테이너는 WEB-INF 밑에 있는 tld 파일을 찾게 끔 되어 있으므로, tld 파일을 작성 후 WEB-INF 디렉토리 밑에 두면 된다.
덧3. 몇 가지 EL 연산자들
다음과 같은 간단한 연산을 EL 단에서도 할 수 있다.
4. 함수를 호출하는 EL을 작성한다.
위 형식대로 EL을 작성해 보면 아래 처럼 작성할 수 있다.
* DiceRoller.java
package com.example;
public class DiceRoller {
public static int rollDice() {
return (int) ((Math.random() * 6) + 1);
}
}
package com.example;
public class DiceRoller {
public static int rollDice() {
return (int) ((Math.random() * 6) + 1);
}
}
* myFunction.tld
<?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/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.2</tlib-version>
<uri>DiceFunctions</uri>
<function>
<name>rollIt</name>
<function-class>com.example.DiceRoller</function-class>
<function-signature>
int rollDice()
</function-signature>
</function>
</taglib>
<?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/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.2</tlib-version>
<uri>DiceFunctions</uri>
<function>
<name>rollIt</name>
<function-class>com.example.DiceRoller</function-class>
<function-signature>
int rollDice()
</function-signature>
</function>
</taglib>
* TestBean.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="mine" uri="DiceFunctions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${mine:rollIt()}
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="mine" uri="DiceFunctions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${mine:rollIt()}
</body>
</html>
java파일은 com.example 패키지에 만들고, tld 파일은 WEB-INF 디렉토리 밑에 만든다. jsp 파일은 WebContent(DocumentRoot) 아래에 바로 만든다.
조금 복잡한 감이 있다.
jsp 파일에서는 네임스페이스 개념의 prefix를 taglib에 정해주고 호출할 uri를 적어준다. 호출할 uri명은 tld 파일에 작성한 uri 값이다.
tld 파일에서는 jsp에서 호출할 함수 이름(rollIt)과 실재 class명, 그리고 실재 함수명을 적어주고 실재 클래스, 함수와 jsp에서 호출할 함수명을 서로 맵핑 시킨다.
개인적으로 이해가 되지는 않지만, 자바는 겹겹히 숨겨 두는 방식을 좋아하는 듯 하다 -.-;;
덧1. function-signature에 들어가는 실제 메소드에 인자를 줄 수 있다.
int rollDice(java.util.Map)
덧2. 컨테이너는 WEB-INF 밑에 있는 tld 파일을 찾게 끔 되어 있으므로, tld 파일을 작성 후 WEB-INF 디렉토리 밑에 두면 된다.
덧3. 몇 가지 EL 연산자들
다음과 같은 간단한 연산을 EL 단에서도 할 수 있다.
+, -, *, /, %, &&, ||, !, ==, !=, <, >, <=, >=
'Programming > JSP' 카테고리의 다른 글
Auto Page Refresh Example (0) | 2014.02.19 |
---|---|
이클립스에서 JSP 소스의 코드어시스트가 되지 않을 경우- (0) | 2014.01.02 |
자바 정적메소드를 EL(익스프레션언어)함수로 등록하는 방법 (0) | 2012.10.30 |
JSP 컴파일 시 인터넷창으로 (0) | 2012.10.15 |
JSP에서 컴파일 에러 (Compile Error) 혹은 런타임 예외 (Runtime Exception) 발생 시 원하는 페이지 보여주기 (0) | 2012.10.09 |