- JSTL 의 함수 라이브러리는 익스프레이션 언어(EL) 식 안에서 사용할수 있는 함수 라이브러리

이 함수들은 주로 문자열을 처리하는 일을 하며, 자바 JDK 라이브러리의 java.lang.String 클래스에 속하는 메서드들과 거의 같은 기능을 제공한다.

예) substring, trim

 

- 사용법

 

1. Taglib 등록

<%@ taglib prefix="fn" uri=http://java.sun.com/jsp/jstl/functions %>

 

2. 함수 라이브러리의 함수들

1) substring(str, index1, index2) : str 의 index1 부터 index2 - 까지의 문자열 리턴

2) substringAfter(str1, str2) : str1 에서 str2 를 찾아서 그 후의 부분문자열 리턴

3) substringBefore(str1, str2) : str1 에서 str2 를 찾아서 그 전의 부분문자열 리턴

4) toUpperCase(str) : 모든 소문자를 대문자로 치환한 값을 리턴

5) toLowerCase(str) : 모든 대문자를 소문자로 치환한 값을 리턴

6) trim(str) : 문자열에서 앞뒤 공백 문자를 제거한 결과를 리턴

7) replace(str, src, dest) : str 문자열에 포함된 src 를 dest 로 치환한 결과를 리턴

8) indexOf(str1, str2) : str1에 포함된 str2의 시작 인덱스를 리턴

9) startsWith(str1, str2) : str1이  str2 로 시작하면 true, 그렇지 않으면 false 리턴

10) endsWith(str1, str2) : str1이 str2 로 끝나면 true, 그렇지 않으면 false 리턴

11) contains(str1, str2) str1이 str2를 포함하면 true, 그렇지 않으면 false 리턴(대소문자 구분)

12) containslgnoreCase(str1, str2) : str1이  str2를 포함하면 true, 그렇지 않으면 false 를 리턴,

contains 함수와는 달리 대소    문자 구별하지 않고 비교함.

13) split(str1, str2) : str1을 str2를 기준으로 분리해서 만든 부문자열들의 배열을 리턴

14) join(str1, str2) : arr 배열의 모든 항목을 합쳐서 리턴, 항목사이에는 str2가 들어옴

15) escapeXml(str) : HTML 문법에 의한 특수문자로 취급되는 모든 문자를 이스케이프 시퀀스로 치환하여 결과를 리턴

16) length(obj) : obj가 문자열이면 문자열의 길이, List 나 Collection 이면 항목의 수를 리턴.

 

3, 사용법

<c:set var="greeting" value="How Are You?" />

기본출럭 : ${greeting}

대문자 : ${fn:toUpperCase(greeting)}

소문자 : ${fn:toLowerCase(greeting)}

- 등록할 파일 : TLD 파일(ex : 웹어플리케이션/web-app/WEB-INF/tld/math-functons.tld)

 

- TLD 파일의 골격(TLD 파일 생성하기)

<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">

                                (TLD 문법의 식별자)                (TLD 문법의 버전)

<tlib-version>1.0</tlib-version> -> 태그 라이브러리의 버젼

<short-name>math</short-name> -> 태그 라이브러리의 이름

<function>

<name>squareroot</name> ->  EL 함수의 이름(나름대로 정한 EL 함수의 명칭)

<function-class>java.lang.Math</function-class> -> 자바 정적메서드(static method)가 속하는 클래스 풀네임

<function-signature>double sqrt(double)</function-signature> -> 정적 메서드의 시그니처

</function>

</taglib>

 

- TLD 파일 생성을 하여도 바로 호출할 수 없다. web.xml 파일에 TLD 파일을 등록해야한다.

<web-app>

<taglib>

<taglib-uri>/math-functions.tld</taglib-uri> -> TLD 파일의 식별자 명칭

<taglib-location>tlds/math-functions.tld</taglib-location> -> TLD 파일의 실제 경로명

</taglib>

</web-app>

 

- JSP 페이지에 호출하기 위해 지시어(<%@ %>) 사용해서 등록하기

<%@taglib uri="/math-functions.tld" prefix="m" %>

 

- JSP 페이지에서 호출해서 사용하기

${m:squareroot(4)}

 설명 : java.lang.Math 클래스의 sqrt 메서드를 'squareroot' 라는 이름의 EL 함수로 등록한다!! 잊어버리자 말자.

 

----------------------------------------------------------------------------------------------------

※ 테스트를 하는데 web.xml 에 <taglib> 태그에서 오류가 발생!!!

    google 검색 결과 답변은...

web.xml 이부분에서
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

빨간색으로 나타낸 부분을 지우면 된다.
XML 스키마나 DTD 지정은 JSP/Servlet 어플리케이션 지정할 때 매우 민감하게 작용합니다.
요즘에는 Servlet Spec 2.3 이 보통이고, 최근들어 2.4도 많이 쓰는 추세입니다. 2.2는 안쓰게 된지 오래됐습니다.
그러니까 처음에 지정한 DOCTYPE에서 2.2로 지정하면 안됩니다.(DOCTPYE 삭제해버린다) 
Servlet 스펙 2.4(가장 최신)에서는 web.xml 에서 TLD 파일을 지정하는 기능이 없다.

내 이클립스에서 생성된 web.xml version=2.5 에서 오류가 발생하는 것이다. 

해결방법

1. 위의 빨간 밑줄 부분을 삭제한다.

2. web.xml 에 TLD 파일 지정하지않고, 바로 JSP 에서 <%@ taglib uri="tld파일경로 지정" prefix="c" %>

    TLD 설치경로 : 웹 어플리케이션 디렉터리/WEB-INF 서브디렉터리 아래이면 어느 곳이든 상관 없다.

EX> 자바빈 클래스의 예

public class PersonInfo {

private String name;

private int age;

private String tell;

/* Getter & Setter */

    /* getter & setter */
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setTell(String tell) {
        this.tell = tell;
    }
    public void setTell(String tell) {
        this.tell = tell;
    }

} // end - class

 

EX> 자바빈 프로퍼티 입력 JSP

<%

PersonInfo personInfo = new PersonInfo();

personInfo.setName("daniel");

personInfo.setAge("27");

personInfo.setTell("177");

request.setAttribute("PERSONINFO", personInfo);

RequestDispatcher dispatcher =

request.getRequestDispatcher("-- forward 시킬 JSP 경로 --");

dispatcher.forward(request, response);

%>

 

EX> 자바빈 프로퍼티 받아서 출력하는 JSP

이름 : ${PERSONINFO.name}<br>

나이: ${PERSONINFO.age}<br>

번호: ${PERSONINFO.tell}<br>

 

※ 제발, 까져먹지말자...

+ Recent posts