EL ( Expression Language ) 의 정적 메소드 사용방법을 설명하고자 한다.
먼가 내용이 확 다가오지 않았고 , 나만의 이해 방법으로 풀어보고자 한다.
내가 사용하고자 하는 메소드의 기능을 정적으로 하나 만들어 주게 되는데
현재 프로젝트 내에서 src에 java파일로써 하나 만들어 준다.
내가 사용하고자 하는 메소드의 기능은 소숫점이 찍혀 있지 않은 숫자들을 xxx,xxx,x 식으로
소숫점을 취하도록 하는 메소드이다.
ELMethod.java 파일이다.
이파일은 static 으로 선언되며 , 내가 사용할 메소드의 기능이다.
package testjsp;
import java.text.DecimalFormat;
public class ELMethod {
public static String comma(int number)
{
DecimalFormat df = new DecimalFormat("#,##0");
return df.format(number);
}
}
이렇게 static 메소드를 만들어 주었다면 TLD파일을 만들어서
경로를 지정해 주고 Function 처리를 해주어야 한다.
TLD 파일을 만들어 주는 위치는 WebContent/WEB-INF/ 이다.
WebContent 폴더 위에서 new--> other 눌러서 다음과 같은 화면이 뜰 것이다.
XML FILE 클릭 후 next
파일 이름설정 주고 tld로 확장자명 지정해준다.
그리고 Create XML file from a DTD file 클릭한다.
다음 화면과 같이 Tag library 1.2//EN 클릭 후 Finish 클릭한다.
이때 중간에 Finish를 클릭하면 제대로 tld 파일이 안만들어 질 수 있다 . 주의바람
파일이 만들어 지면 다음과 같이 코드를 입혀주게 된다.
Functions.tld 파일이다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">
<tlib-version>1.0</tlib-version>
<jsp-version>2.2</jsp-version>
<short-name>JSPTag</short-name>
<function>
<name>comma</name>
<function-class>testjsp.ELMethod</function-class>
<function-signature>String comma(int)</function-signature>
</function>
</taglib>
우리가 이 코드에서 주의깊게 봐야할 부분은
다음 부분이다.
아마 처음 tld를 만들어 보는 사람들은 헷갈릴 것이다 . 나는 위처럼 코드가 안되어있는데 말이다.
우리가 추가해 주어야 할 부분은 taglib 와 function이다.
taglib는 그냥 명시적으로 또는 정의되어 있는 부분이라고 생각하면 쉬울것 같다.
<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">
그리고 function 태그가 있다.
이부분은 우리가 만들어 놓은 java파일의 메소드 기능을 쓸것이다 라고 생각하면 쉬울 것 같다.
<name>comma : comma 메소드를 의미
<function-class> : 패키지명.java파일명으로 되어 있는데 경로를 의미한다 .
<function-signature> : signature이 서명이란 의미인데 , 어떤 기능에 대한 서명이다 . 형태를 적어준다.
<function>
<name>comma</name>
<function-class>testjsp.ELMethod</function-class>
<function-signature>String comma(int)</function-signature>
</function>
TLD 등록이 되었다면 이제 우리는 web.xml을 추가해 주어서 web application 시작시 경로를 설정해 주는 작업을 해주어야 한다.
이 기능을 web.xml에서 할 것이다.
web.xml 이다
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
--> web-app 이 부분 또한 명시적이며 정의적이다.
<jsp-config>
<taglib>
<taglib-uri>/Functions.tld</taglib-uri>
<taglib-location>/WEB-INF/Functions.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
명시적인 <web - app> 태그를 제외하고 우리가 주의깊게 봐야할 것은 다음과 같다.
<jsp-config> 큰 틀 태그 안에 <taglib> 라는 작은 태그를 선언해 준다.
taglib 태그 안에는 uri 태그와 location 태그가 들어가는데
location 태그에는 위에 Functions.tld의 위치를 넣어주고 , uri 태그 에는 Functions.tld 파일을 적어준다.
<jsp-config>
<taglib>
<taglib-uri>/Functions.tld</taglib-uri>
<taglib-location>/WEB-INF/Functions.tld</taglib-location>
</taglib>
</jsp-config>
이렇게 해주면 설정은 완료가 된 것이고 , Test용 jsp파일을 하나 만들어 본다.
다음은 Main.jsp 파일이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="m" uri="/WEB-INF/Functions.tld"%>
<!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>Expression Language</title>
</head>
<body>
<h2>EL의 정적 메소드</h2>
123456789를 1000단위 구분 기호(,)로 표시하시오.
result : ${m:comma(123456789)}
</body>
</html>
여기서도 우리가 주의 깊게 볼 곳은 다음 부분이다.
<%@ taglib prefix="m" uri="/WEB-INF/Functions.tld"%>
taglib 로써 prefix = " 임의 " uri = "우리가 사용하고자 하는 tld전체 경로" 인데 ,
아 정말 헷갈릴 것이다 . 우선 처음이라면 그냥 이렇게 쓰이는 구나 라고 생각하면 될 것이다.
그냥 prefix 는 내가 이 페이지에서 사용할 변수이름 , uri는 내가 사용할 메소드의 tld 경로 라고 생각하자.
그리고 다음과 같이 사용할 수 있는데 우리는 prefix로 m을 설정해 주었기 때문에 m에 접근 가능해 지고 ,
사용하고자 하는 메소드의 경로를 주었기 때문에 comma 메소드 사용이 가능해 진다.
result : ${m:comma(123456789)}
나는 이 정적 메소드의 사용을 다음과 같이 기억한다.
1. 내가 사용하고자 하는 메소드의 기능을 구현해 준다 ( 물론 src 내에 만들어 준다 )
2. TLD를 만들어 준다 .
3. 만들어준 TLD의 경로를 web.xml에서 잡아준다.
4. 메인.jsp에서 prefix 와 uri로 접근해서 가져다가 쓴다.
'학부공부 > 웹시스템설계및개발' 카테고리의 다른 글
JSTL를 이용한 조건문 (0) | 2018.09.26 |
---|---|
정적 메소드를 사용한 간단한 환율계산기 (0) | 2018.09.26 |
<%@ page isELIgnored = "false or TRUE" %> (0) | 2018.09.22 |
JSP를 통한 파일 업로드 (0) | 2018.09.15 |
EL의 자바빈즈 기반 기초 . (0) | 2018.09.15 |
#IT #먹방 #전자기기 #일상
#개발 #일상