1.WEB-INF에 tld 파일 생성
mytaglib.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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>My Tag Library</description>
<tlib-version>1.1</tlib-version>
<short-name>my</short-name>
<function>
<name>isNumber</name>
<function-class>eltag.MyTagLibrary</function-class>
<function-signature>boolean isNumber(java.lang.String)</function-signature>
</function>
<function>
<name>getGender</name>
<function-class>eltag.MyTagLibrary</function-class>
<function-signature>java.lang.String getGender(java.lang.String)</function-signature>
</function>
</taglib>
2.web.xml에 아래 내용 추가
<jsp-config>
<taglib>
<taglib-uri>
/WEB-INF/tlds/mytaglib.tld
</taglib-uri>
<taglib-location>
/WEB-INF/tlds/mytablib.tld
</taglib-location>
</taglib>
</jsp-config>
<!-- 웹어플리케이션에 처음 접속했을때 로드할 문서명 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
...
...
...
3. 해당 클래스 생성
package eltag;
public class MyTagLibrary {
/*
해당 클래스에 정의된 함수는 EL에서 호출하기 위한 용도로 정의되었으며, 무조건 "public static"으로 선언해야 한다.
*/
/*
설명 : 매개변수로 전달 받은 문자열에 숫자가 아닌 문자가 포함되어 있다면 false를 모두 숫자라면 true를 반환하는 함수
*/
public static boolean isNumber(String value)
{
char[] chArr = value.toCharArray();
for(int i =0 ; i < chArr.length ; i++ )
{
if(!(chArr[i]>='0' && chArr[i]<='9'))
{
return false;
}
}
return true;
}
/*
설명 : 매개변수로 주민번호를 751130-1000000 형태로 전달 받아서
두번째 블럭의 첫번째 숫자가 1이면 남자, 1이아니면 여자를 반환하는 함수
*/
public static String getGender(String ssn)
{
int beginIndex = ssn.indexOf("-")+1;
return (Integer.parseInt(ssn.substring(beginIndex,beginIndex+1))==1 || Integer.parseInt(ssn.substring(beginIndex,beginIndex+1))==3) ? "남자" :"여자";
}
}
4. jsp 파일에서 호출해서 쓰기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" uri="/WEB-INF/tlds/mytaglib.tld"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!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>MyTagLib.jsp</title>
</head>
<body>
<h2>내가 만든 태그 라이브러리 </h2>
<h3>자바코드로 메소드 호출하기</h3>
<ul>
<li>eltag.MyTagLibrary.isNumber("100") : <%=eltag.MyTagLibrary.isNumber("100") %></li>
<!--
EL3.0 버전은 TLD파일이나 web.xml 파일 설정을 할 필요 없이 JSP코드만 작성하면 된다.
<%@page import="eltag.MyTagLibrary"%>
안에서 쓰려면 import 시키고 MyTagLibrary.isNumber("100") 처럼 패키지명 제외하고 호출하면 값이 나온다
아래처럼 패키지명 붙이면 안됨 EL에서 함수를 호출하려면 함수는 반드시 정적 함수여야 한다(STATIC)
-->
<li>\${eltag.MyTagLibrary.isNumber("100") } :${eltag.MyTagLibrary.isNumber("100")}</li>
</ul>
<h3>EL에서 자바클래스내 메소드 호출</h3>
<ul>
<li>\${my:isNumber("100") } : ${my:isNumber("100") }</li>
<li>\${my:isNumber("100A") } : ${my:isNumber("100A") }</li>
<li>\${my:getGender("751130-3000000") } : ${my:getGender("751130-3000000") }</li>
<li>\${my:getGender("780723-2000000") } : ${my:getGender("780723-2000000") }</li>
</ul>
<h2>JSTL에서 제공하는 태그라이브러리 사용(함수)</h2>
<ul>
<li>\${fn:length("HELLO") } : ${fn:length("HELLO") }</li>
<li>\${fn:toUpperCase("HELLO") } : ${fn:toUpperCase("HELLO") }</li>
</ul>
</body>
</html>
----------------요약정리--------------------------
EL에서 자바 클래스 메소드를 호출하기 위한 절차
1. 자바 클래스 파일 작성
: /src/eltag/MyTagLibrary.java
2. TLD(Tag Library Descriptor) 파일을 작성
: WEB-INF하위에 등록하면 됨
3. web.xml에 속성추가
: <jsp-config> 엘리먼트 추가
4. 자바 메소드를 호출하는 jsp 파일 작성
: Java 코드에서는 패키지 import후 클래스명.메소드명() 형태로 호출
EL에서는 접두어를 사용하여 \${접두어:메소드명()} 형태로 호출
'프로그래밍 > JSP & Servlet' 카테고리의 다른 글
자바 VO DTO 차이점 (0) | 2018.01.19 |
---|---|
JavaMail API를 이용한 메일 가져오기 (0) | 2018.01.10 |
mysql과 jsp의 연결 (0) | 2017.12.28 |
커넥션 풀 (DBCP) oracle (0) | 2017.12.28 |
DTO,VO,DAO (0) | 2017.12.25 |