본문 바로가기

프로그래밍/JSP & Servlet

JSTL 사용자 정의 태그 라이브러리

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