1 / 92

커스텀 액션 만들기

10. 커스텀 액션 만들기. 학습목표 이장에서는 커스텀 액션을 직접 만들어서 사용하는 방법과 , 커스텀 액션을 모아서 태그 라이브러리를 만들어 배포하는 방법을 배워보자 . 내용 커스텀 액션을 만드는 방법 태그 파일을 이용해서 커스텀 액션을 만드는 방법 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 태그 라이브러리를 만드는 방법. 1. 커스텀 액션을 만드는 방법. 커스텀 액션을 만드는 방법 커스텀 액션을 만드는 방법은 크게 두 가지로 나눠진다 . 태그 파일을 작성해서 만드는 방법

Download Presentation

커스텀 액션 만들기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 10 커스텀 액션 만들기

  2. 학습목표 • 이장에서는 커스텀 액션을 직접 만들어서 사용하는 방법과, 커스텀 액션을 모아서 태그 라이브러리를 만들어 배포하는 방법을 배워보자. • 내용 • 커스텀 액션을 만드는 방법 • 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 태그 라이브러리를 만드는 방법

  3. 1. 커스텀 액션을 만드는 방법 • 커스텀 액션을 만드는 방법 • 커스텀 액션을 만드는 방법은 크게 두 가지로 나눠진다. • 태그 파일을 작성해서 만드는 방법 • 태그 클래스를 작성해서 만드는 방법 • 태그 파일(tag file)이란 JSP페이지와 비슷한 문법으로 작성하는 텍스트 파일이다. JSP 페이지와 유사한 문법 [그림 10-2] 태그 파일의 예

  4. 1. 커스텀 액션을 만드는 방법 • 커스텀 액션을 만드는 방법 • 태그 파일도 JSP페이지처럼 웹 컨테이너의 특정 디렉터리에 저장해 놓기만 하면 바로 사용할 수 있다. 이렇게 간단한 설치 방법은 태그 파일의 장점이라고 할 수 있다. [그림 10-3] 태그 파일을 개발할 때 해야 할 일

  5. 1. 커스텀 액션을 만드는 방법 • 커스텀 액션을 만드는 방법 • 태그 클래스(tag class)는 태그 파일과 달리 자바 프로그래밍 언어의 문법에 따라 완전한 자바 클래스 형태로 작성해야 한다. 태그 클래스가 상속받아야 하는 슈퍼클래스 커스텀 액션이 실행될 때 호출되는 메서드 커스텀 액션의 기능을 구현하는 코드

  6. 1. 커스텀 액션을 만드는 방법 • 커스텀 액션을 만드는 방법 • 태그 클래스는 태그 파일과 달리 설치 방법이 상당히 복잡하다. [그림 10-5] 태그 클래스를 개발할 때 해야 할 일

  7. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 아주 간단한 태그 파일 • 다음과 같이 웹 페이지에 선을 출력하는 태그 파일을 만들어보자. [그림 10-6] 아주 간단한 커스텀 액션의 예

  8. 아주 간단한 태그 파일 태그 파일을 이용해서 만든 커스텀 액션은 기본적으로 본체를 가질 수 있다. 커스텀 액션의 본체란 시작 태그와 끝 태그 사이에 오는 부분을 말한다. 커스텀 액션이 본체를 갖기 않도록 만들기 위해서는 태그 파일에 다음과 같은 tag지시자를 써야 한다. 위와 같은 tag지시자가 있으면 커스텀 액션을 사용할 때 다음과 같이 처리된다. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 커스텀 액션의 본체(body) 커스텀 액션이 본체를 가질 수 없음을 표시합니다. 문법 에러가 발생합니다. 정상 처리됩니다

  9. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 아주 간단한 태그 파일 • 태그 파일에는 몇 가지 지시자를 더 사용할 수 있다. • include지시자와 taglib지시자는 JSP페이지에서와 똑같은 역할을 하고 나머지 세 지시자는 태그 파일에서만 사용될 수 있는 것들이다. [표 10-1] 태그 파일에서 사용할 수 있는 지시자

  10. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 아주 간단한 태그 파일 ③그 디렉터리 안에 [예제 10-2]의 태그 파일을 저장하세요 ①이번 장의 예제를 위한 brain10 웹 애플 리케이션 디렉터리를 만드세요. ②그리고 그 아래에 WEB-INF/tags 서브디렉터리를 만드세요

  11. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 아주 간단한 태그 파일 • JSP 페이지에서 커스텀 액션을 사용하려면 taglib지시자를 써야 한다. • 태그 파일을 이용해서 만든 커스텀 액션일 경우에는 taglib지시자에 앞 장에서 배웠던 uri애트리뷰트 대신 tagdir 애트리뷰트를 써야 한다. • tablib지시자를 쓴 다음에는 접두어와 커스텀 액션의 이름을 이용해서 커스텀 액션을 사용할 수 있다. 커스텀 액션의 이름은 태그 파일의 이름에서 .tag를 제외한 나머지 부분이다. 접두어 태그 파일이 있는 디렉터리의 경로명 접두어 커스텀 액션의 이름

  12. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 아주 간단한 태그 파일 [그림 10-8] 예제 10-3의 실행 결과

  13. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트를 지원하는 태그 파일 • 다음과 같은 애트리뷰트가 있는 커스텀 액션을 만들어보자. • 애트리뷰트가 있는 커스텀 액션을 만들기 위해서는 태그 파일에 각각의 애트리뷰트를 위한 attribute지시자를 써야 한다. 20개의 마이너스 기호로 이루어진 빨간색 선을 출력합니다 [그림 10-9] 애트리뷰트가 있는 커스텀 액션의 예

  14. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트를 지원하는 태그 파일 • attribute지시자의 name애트리뷰트는 커스텀 액션의 애트리뷰트 이름을 지정하는 역할을 한다. • 커스텀 액션의 애트리뷰트 값은 태그 파일은 태그 파일로 전달되며, 그 값을 사용하는 방법은 두 가지이다. 하나는 스크립팅 요소 안에서 자바 변수처럼 사용하는 방법이고, 다른 하나는 익스프레션 언어의 EL식 안에서 데이터 이름으로 사용하는 방법이다. 애트리뷰트의 이름 애트리뷰트의 이름 애트리뷰트의 이름

  15. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트를 지원하는 태그 파일 [그림 10-11] 예제 10-5의 실행 결과

  16. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트를 지원하는 태그 파일 • [예제 10-4] 태그 파일의 문제점 - <util:newLine> 커스텀 액션은 color와size애트리뷰트를 모두 썼을 때는 정상적으로 작동하지만, size애트리뷰트를 쓰지 않으면 선이 전혀 출력되지 않는다. • 이런 문제는 size애트리뷰트를 필수 애트리뷰트로 만들어서 해결할 수 있다. 방법은 [예제 10-4]의 attribute지시자에 required애트리뷰트를 추가하고 그 값으로 true를 지정하는 것이다. 필수 애트리뷰트임을 표시합니다

  17. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일 • 애트리뷰트 각각을 위해 attribute지시자를 쓰는 대신 모든 애트리뷰트를 한꺼번에 선언하려면 동적 애트리뷰트를 선언하면 된다. • 동적 애트리뷰트를 선언하려면 태그 파일의 tag지시자에 dynamic-attributes 애트리뷰트를 쓰고, 그 값으로 커스텀 액션의 모든 애트리뷰트를 대표할 이름을 쓰면 된다. • 태그 파일 안에서 다음과 같은 EL식을 사용하면 커스텀 액션에서 사용된 특정 애트리뷰트 값을 가져올 수 있다. 동적 애트리뷰트의 대표 이름 동적 애트리뷰트의 대표 이름 실제로 사용된 애트리뷰트의 이름

  18. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일 • 커스텀 액션의 애트리뷰트를 담고 있는 Map객체는 page 데이터 영역을 통해 태그 파일에 전달되는데, 그 객체는 jspContext내장 변수에 대해 getAttribute라는 메서드를 호출해서 가져올 수 있다. • 동적 애트리뷰트의 경우에는 모든 애트리뷰트의 값이 문자열 형태로 저장되므로, Map객체에 대해 get메서드를 호출할 때 리턴값을 String타입으로 변환해서 받아야 한다. 동적 애트리뷰트의 대표 이름 개별적인 애트리뷰트 이름

  19. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일 • 문자열 형태의 애트리뷰트 값은 다음과 같은 방법을 이용해서 다른 데이터 타입으로 변환해서 사용할 수도 있다. • 위의 태그 파일을 톰캣의 webapps/brain10/WEB-INF/tags/util디렉터리에 doubleLine.tag라는 이름으로 저장한다. 필요하다면 가져온 애트리뷰트 값의 타입을 변환하세요

  20. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일

  21. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일 • 동적 애트리뷰트를 지원하는 커스텀 액션은 유효한 애트리뷰트와 그렇지 못한 애트리뷰트를 일일이 확인하지 않는다. [그림 10-14] 예제 10-8의 실행 결과

  22. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 동적 애트리뷰트를 지원하는 태그 파일 [그림 10-15] 태그 파일에 정의되지 않은 애트리뷰트를 사용했을 때 발생하는 에러

  23. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 커스텀 액션의 본체를 처리하는 태그 파일 • 커스텀 액션의 시작 태그와 끝 태그 사이에 오는 내용을 커스텀 액션의 본체(body)라고 한다. • 본체가 있는 커스텀 액션을 만들기 위해서는 태그 파일의 tag지시자에 있는 body-content애트리뷰트에 empty라는 값 대신 scriptless나 tagdependent라는 값을 써야 한다. [그림 10-16] 본체가 있는 커스텀 액션의 예 커스텀 액션의 본체에 스크립틀릿을 쓸 수 없음을 표시합니다.

  24. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 커스텀 액션의 본체를 처리하는 태그 파일 [그림 10-11] 예제 10-5의 실행 결과

  25. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 변수를 지원하는 커스텀 액션을 만들려면 태그 파일에 variable지시자를 써야 한다. • variable 지시자를 기술하는 방법은 다음과 같다. • String타입이 아닌 다른 타입의 변수를 선언하려면 variable 지시자에 variable-class라는 애트리뷰트를 추가해서 타입을 지정하면 된다. • 주의할 점 - variable-class애트리뷰트에는 프리미티브 타입을 지정할 수 없으므로, 래퍼 클래스타입을 대신 사용해야 한다. 변수의 이름 변수의 타입

  26. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 위 그림처럼 작동하는 커스텀 액션을 만들기 위해서는 커스텀 액션이 끝난 다음에 maximum이라는 변수를 사용할 수 있도록 만들어야 한다. 그런 일은 variable지시자에 scope라는 애트리뷰트를 추가해서 할 수 있다. • scope애트리뷰트는 변수의 사용 범위를 지정하는 역할을 하며, NESTED, AT_BEGIN, AT_END 중 한 값을 지정할 수 있다. • 단독으로 사용되는 태그 다음에 변수를 사용할 수 있도록 만들려면 AT_END값을 지정하는 것이 가장 적합하다. JSP 페이지 태그 파일 num1, num2 애트리뷰트의 값 입력 출력 maximum 변수의 값 [그림 10-18] 변수를 이용해서 데이터를 리턴하는커스텀 액션의 예 변수의 사용 범위

  27. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • variable지시자를 이용해서 선언한 변수에 값을 대입하려면 앞 장에서 배웠던 <c:set> 커스텀 액션을 사용해야 한다. • 태그 파일 안에서 변수에 저장한 값은 JSP페이지로 전달되고, JSP페이지에서 그 값을 가져다가 사용할 수 있다. 변수의 이름 변수에 대입할 값

  28. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 [그림 10-20] 예제 10-12의 실행 결과

  29. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 앞 예제의 단점 - 커스텀 액션의 결과를 리턴하는 maximum변수의 이름이 태그 파일 안에 고정되어 있다. 이 문제를 해결하기 위해 다음과 같이 애트리뷰트를 이용해서 변수의 이름을 지정하도록 만들어보자. • 변수 이름을 저장할 애트리뷰트를 선언할 때는 지켜야 하는 규칙 • 첫째, 필수 애트리뷰트로 만들어야 한다. • 둘째, 애트리뷰트 값에 스크립팅 요소나 익스프레션 언어를 사용할 수 없도록 만들어야 한다. 변수의 이름 애트리뷰트 이름 필수 애트리뷰트임을 표시 애트리뷰트 값으로 스크립팅 요소나 익스프레션 언어를 사용할 수 없음을 표시

  30. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 애트리뷰트를 이용해서 변수 이름을 지정할 때는 variable지시자도 다르게 기술해야 한다. • 첫째, name-given애트리뷰트를 이용해서 변수의 이름을 지정하는 것이 아니라, name-from-attribute애트리뷰트를 이용해서 변수의 이름을 지정할 애트리뷰트의 이름을 지정해야 한다. • 둘째, 태그 파일 안에서 사용할 변수 이름을 따로 선언해야 한다. 변수 이름을 지정하기 위해 사용할 애트리뷰트 이름 태그 파일 안에서 사용할 변수 이름

  31. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 [그림 10-21] 예제 10-14의 실행 결과

  32. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 이번에는 다음과 같이 커스텀 액션의 본체 안에서 변수를 사용하는 예제를 작성해보자. • 이 커스텀 액션은 start 애트리뷰트부터 end 애트리뷰트까지 변화하는 값을 본체 안에서 사용할 수 있도록 만들어야 한다. [그림 10-22] 커스텀 액션의 본체 안에서 변수를 사용하는 커스텀 액션의 예

  33. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 • 이 경우에는variable지시자의 scope애트리뷰트 값을 NATED로 지정해야 한다.

  34. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 [그림 10-23] 예제 10-16의 실행 결과

  35. 2. 태그 파일을 이용해서 커스텀 액션을 만드는 방법 • 변수를 지원하는 커스텀 액션 [그림 10-24] 예제 10-17의 실행 결과

  36. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 태그 클래스를 만드는 방법 [그림 10-25] 태그 클래스를 만드는 방법

  37. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTag 인터페이스를 구현하는 태그 클래스

  38. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTag인터페이스를 구현하는 태그 클래스

  39. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 만들 때는 반드시 다음과 같은 형식의 doTag메서드를 작성해야 한다. • 웹 브라우저로 HTML 코드를 출력하기 위해서는 우선 다음과 같은 방법으로 JspContext객체를 구해야 한다. • JspContext객체에 대해 print나 println메서드를 호출하면 웹 브라우저로 HTML을 출력할 수 있다. 이 위치에 커스텀 액션이 해야 할 일을 기술해야 합니다. JSP 페이지에 관한 여러 가지 정보가 들어 있는 JspContext 객체를 리턴하는 메서드 JspWriter 객체를 리턴하는 메서드 웹 브라우저로 선을 출력합니다

  40. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 • 다음은 선을 출력하는 커스텀 액션을 구현하는 태그 클래스이다.

  41. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 ①톰캣의lib 디렉터리에 있는 이 파일을 [그림 10-29] jsp-api.jar 파일을 JDK의 확장 라이브러리 디렉터리에 설치하기

  42. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 ② JDK의 jre\lib\ext 디렉터리로 복사합니다.

  43. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 [그림 10-30] 태그 클래스를 컴파일하는 방법 ③작업 디렉터리(C:\src\ch10)에 있는 컴파일 결과물을 tool 서브디렉터리에 복사하세요 ② [예제 10-18]의 클래스는 tool 패키지에 속하므로 tool 서브디렉터리를 만드세요 ① brain10/WEB-INF 디렉터리 아래에 classes 디렉터리를 만드세요. [그림 10-31] 예제 10-18의 태그 클래스를 설치하는 방법

  44. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 • 태그 클래스를 설치한 다음에는 등록을 해야 한다. (앞의 [그림 10-5] 참고) • TLD파일에 태그 클래스를 등록하기 위해서는 다음과 같은 형식의 <tag> 엘리먼트를 추가해야 한다. • <tag> 엘리먼트는 TLD파일의 루트 엘리먼트인 <tablib> 엘리먼트의 바로 아래에 위치해야 한다. 커스텀 액션의 이름 태그 클래스의 이름 본체의 형태 TLD 파일의 버전 TLD 파일의 이름

  45. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • SimpleTagSupport클래스를 이용해서 태그 클래스를 작성하는 방법 [그림 10-34] 예제 10-19의 실행 결과

  46. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트가 있는 커스텀 액션을 만드는 태그 클래스 • 태그 클래스를 이용해서 애트리뷰트가 있는 커스텀 액션을 구현하는 방법 • 애트리뷰트 값을 받는 public 메서드를 선언해야 한다. • 이 메서드의 이름은 set으로 시작해야 하고, 그 다음에 애트리뷰트의 본래 이름에서 첫 글자를 대문자로 바꾼 이름을 붙여서 만들어야 한다. • set-메서드가 받은 애트리뷰트 값은 필드(field, 클래스의 멤버 변수)에 저장해 놓는다. • 저장된 애트리뷰트 값은 나중에 doTag메서드 안에서 사용되는 것이 보통이다. color 애트리뷰트 값을 받는 메서드의 이름 이 파라미터 변수를 통해 애트리뷰트 값이 전달됩니다 애트리뷰트 값을 필드에 저장합니다.

  47. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트가 있는 커스텀 액션을 만드는 태그 클래스 size 애트리뷰트를 받는 메서드 color 애트리뷰트를 받는 메서드

  48. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트가 있는 커스텀 액션을 만드는 태그 클래스 • 애트리뷰트를 지원하는 태그 클래스를 TLD파일에 등록할 때는 <tag> 엘리먼트 안에 <attribute>라는 서브엘리먼트를 써야 한다. • <attribute> 엘리먼트 안에는 <name>와 <type>라는 두 개의 서브엘리먼트를 써야 하고, 그 안에 각각 애트리뷰트의 이름과 타입을 표시해야 한다. 이 위치에 <attribute> 엘리먼트를 추가해야 합니다. 애트리뷰트의 이름 애트리뷰트의 타입

  49. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트가 있는 커스텀 액션을 만드는 태그 클래스 • [예제 10-20]의 setColor메서드가 구현하는 color애트리뷰트를 위해서는 다음과 같은 attribute엘리먼트를 기술해야 한다. 애트리뷰트의 이름 애트리뷰트의 타입 [그림 10-35] 예제 10-20의 태그 클래스를 TLD 파일에 등록하는 방법

  50. 3. 태그 클래스를 이용해서 커스텀 액션을 만드는 방법 • 애트리뷰트가 있는 커스텀 액션을 만드는 태그 클래스 [그림 10-36] 예제 10-21의 실행 결과

More Related