자바 중급 (JAVA-Web) 강좌 자료] 인터페이스의 상수들

자바 중급 (JAVA-Web) 강좌 자료] 인터페이스의 상수들

 

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

인터페이스의 상수들

 

Tag 인터페이스에는 SKIP_BODY, EVAL_BODY_INCLUDE, SKIP_PAGE, EVAL_PAGE 4가지 상수가 있다. 또한 BodyTag 인터페이스에는 EVAL_BODY_TAG, EVAL_BODY_BUFFERED가 있으며 IterationTag 인터페이스에는 EVAL_BODY_AGAIN이 있다.

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - BodyTagSupport 클래스 메소드

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - BodyTagSupport 클래스 메소드

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

태그핸들러(Tag Handler) - BodyTagSupport 클래스 메소드

 

public class BodyTagSupport  extends TagSupport  implements BodyTag

doStartTag : TagSupportdoStartMethod를 재정의, DefaultEVAL_BODY_BUFFEREDReturn)

doEndTag : TagSupportdoEndTag를 재정의 하며 , DefaultEVAL_PAGEReturn

doAfterBody : doStartTag메소드에서 EVAL_BODY_INCLUDE또는 EVAL_BODY_BUFFEREDReturn하는 경우에 호출, 몸체의 처리가 끝났으면 SKIP_BODY 아니면 EVAL_BODY_AGAINReturn

getBodyContent : 몸체의 내용을 읽음, BodyContent 클래스를 Return, BodyContent 클래스의 getString()을 통해 문자를 받아올수 있다.

getPreviousOut : JspWriter클래스를 Return받아 print메소드를 통해 출력시킨다. 참고로 BodyContent 클래스의 getEnclosingWriter메소드를 이용해도 JspWriter 클래스를 Return 받을 수 있다.

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Body Tag 인터페이스 동작순서 (2)

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Body Tag 인터페이스 동작순서 (2)

 

 

 


실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

태그핸들러(Tag Handler) - Body Tag 인터페이스 동작순서 (2)

 

● 본문의 내용을 초기화하고 수행한다.

  - doStartTag()에서 return valueEVAL_BODY_TAG(JSP1.2이상에서는 EVAL_BODY_BUFFERED)인 경우에 수행된다.

  - EVAL_BODY_TAG가 리턴 되면 BodyContent 클래스를 생성하고 초기화한다. BodyContent 클래스는 JspWriter 클래스의 서브 클래스이며 이 클래스를 이용하여 본문의 내용을 읽어오고 수행결과를 페이지에 표시한다.

  - BodyContent 클래스의 인스턴스를 생성 한 후 setBodyContent 메소드를 통해 BodyContent 클래스를 핸들러 클래스에 결합시키며  doInitBody() 메소드는 setBodyContent()를 이용해 초기화 할 때 누락된 부분을 다시 초기화를 진행한다. 즉 처리할 본체를 위한 특성들을 설정한다. doInitBody()Return 값이 없다.

  - 이상과 같이 초기화를 진행 한 후에는 본문의 내용을 수행하는데 수행결과는 BodyContent 클래스의 인스턴스에 저장된다. 본문의 수행이 종료되면 JSP 컨테이너는 doAfterBody()를 호출한다.

  - doAfterBody()BodyContent의 인스턴스를 사용하여 작업을 수행하며 이 메소드가 종료되면 EVAL_BODY_TAG(JSP1.2이상에서는 EVAL_BODY_AGAIN)SKIP_BODY등의 값이 Return 되는데 EVAL_BODY_TAGReturn되면 한번더 doAfterBody() 메소드가 호출되게 되는 것 이다. 즉 아직 처리 해야 할 본문의 내용이 더 있다는 뜻이다. 결국 이 과정을 반복하는 것이다.

  - 모든 작업이 완료되면 SKIP_BODYReturn 된다.


 

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - BodyTag 인터페이스 동작순서 (1)

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - BodyTag 인터페이스 동작순서 (1)

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

 

 

태그핸들러(Tag Handler) - BodyTag 인터페이스 동작순서 (1)

 

 

Tag 인터페이스를 확장한 인터페이스로 태그의 내용을 여러 번 반복해서 처리할 수 있는 수단을 제공한다.

전체적으로 다음과 같은 순서로 동작한다.

  - 태그 핸들러의 인스턴스 생성

  - Property 생성

  - 태그에 정의된 속성값 설정

  - doStartTag() 메소드 호출

  - 본문의 내용을 초기화 하고 수행함

  - doEndTag() 메소드 호출

  - release() 메소드 호출

 

doStartTag()

  - Tag인터페이스의 동작과 동일하지만 Return 되는 값이 틀리다.

  - SKIP_BODY : 본문을 처리하지 않고 바로 넘어간다.

  - EVAL_BODY_TAG : 본문의 내용을 처리하며 그 처리결과를 다음처리에서 이용할 수 있도록 저장한다. 즉 처리결과를 BodyContent 클래스를 이용하여 저장하게 된다.

     (JSP1.2이상에서는 defaultEVAL_BODY_BUFFERED를 사용한다. 새로운 버퍼  즉 이 태그의 본체를 평가하는 BodyContent의 작성을 요구하며 doStartTag BodyTag 를 구현하고 있는 경우는  doStartTag 로부터 버퍼가 돌려지며 이 클래스가 BodyTag 를 구현하고 있지 않는 경우는 doStartTag 반환값 으로 버퍼가 돌려지지 않는다 )

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (2)

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (2)

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (2)

 

- 다음의 예를 참조하자.(JSP페이지가 다음과 같이 되어 있다)

        jclee:hello시작태그가 하는일은 “안녕하세요” 출력한다고 할때

      <%@ page contentType=“text/html; charset=euc-kr” %>

  …..

      <jclee:hello>jclee</jclee:hello>

      이경우 태그핸들러의 doStartTag()에서 Return된는 값이 SKIP_BODY라면 다음과 같은 결과가 나타난다.

      ……… 안녕하세요………

    

  doStartTag()에서 Return되는 값이 EVAL_BODY_INCLUDE라면

     ………. 안녕하세요 jclee……..

 

doEndTag() 메소드의 실행

  - doStartTag()의 실행이 끝나면 JSP 컨테이너는 doEndTag() 메소드를 호출한다. 이 작업은 커스텀 태그가 끝날 때 수행되어야 하는 작업이다.

  - 수행이 종료 된 후 SKIP_PAGEEVAL_PAGE두개의 값들이 Return 될수 있는데 SKIP_PAGE인 경우 현재이후의 JSP 코드를 인식하지 않고 처리하지 않는다. 만약 EVAL_PAGEReturn되는 경우에는 JSP페이지의 나머지 부분을 수행하게 된다.

release() 메소드의 호출

  - JSP 컨테이너는 마지막 단계로 release() 메소드를 호출한다.

  - 태그 핸들러가 Resource Pool로 돌아가기 전에 핸들러를 Reset, 사용된 Resource를 해제하는 등의 역할을 수행한다.

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (1)

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (1)

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

태그핸들러(Tag Handler) - Tag 인터페이스 동작순서 (1)

 

 

태그핸들러 클래스의 인스턴스 생성

  - JSP페이지 내에 커스텀 태그가 사용되면 JSP 컨테이너는 태그 핸들러 클래스의 인스턴스를 생성한다.

Propery 설정

  - 태그 핸들러의 인스턴스 속성을 설정, 인스턴스 객체를 초기화, 인자초기화

  - JSP 컨테이너에 의해 setPageContext()가 호출되어 pageContext 객체를 가지고 오며, setParent()  메소드가 호출된다. 이들 메소드의 역할은 태그 핸들러 클래스에서 만들어진 태그 핸들러 인스턴스를 사용이 가능하도록 한다.

  - 커스텀 태그도 일반 태그와 같이 상위태그가 있다면 상위태그를 반드시 설정해 주어야 하는데 이 부분을 JSP 컨테이너가 알아서 처리해 준다.

 

태그에 정의된 속성값 설정

  - 자바 빈 태그처럼 미리 태그 핸들러 클래스에 setXXX(), getXXX() 메소드를 설정하여 속성값을 정의 하는 것이다. 만일 태그에서 address라는 속성이 필요하다면 setAddress()getAddress()라는 메소드가 만들어져 있다면 JSP 컨테이너가 자동으로 호출하여 작업을 수행한다.

doStartTag() 메소드의 실행

  - 실질적인 처리를 담당

  - 메소드는 실행 된 후 다음 두개의 값 중 하나를 Return 하는데 그 차이는 다음과 같다. SKIP_BODYReturn 되는 경우에는 시작태그 뒤에 나타나는 본문내용을 수행하지 않고 바로 doEndTag() 메소드를 JSP 컨테이너가 호출하여 실행한다. 또한 EVAL_BODY_INCLUDEReturn되면 본문(시작태그와 종료태그 사이의 Content)의 내용이 있을 경우 본문을 수행하고 doEndTag()를 수행하게 된다.

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (2)

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (2)

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (2)

javax.servlet.jsp.tagext.Tag 인터페이스를 구현한것이 javax.servlet.jsp.tagext.TagSupport 클래스이며 javax.servlet.jsp.tagext.BodyTag 인터페이스를구현한것이 javax.servlet.jsp.tagext.BodyTagSupport  클래스이다.

Tag인터페이스를 상속 한 것이 BodyTag 인터페이스이며 TagSupport 클래스를 상속 한 것이 BodyTagSupport 클래스 이다.


 

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (1)

 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (1)

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 


 

자바 중급 (JAVA-Web) 강좌 자료] 태그핸들러(Tag Handler) (1)

 

Tag Handler를 지원하는 자바클래스와 인터페이스는 javax.servlet.jsp.tagext Package이다.

JSP페이지에서 커스텀 태그가 실행되는 과정을 요약하면 다음과 같이 정리 할 수 있다.

  - 커스텀태그를 사용하는 JSP페이지 à JSP container à TLD파일 àTag Handler

JSP컨테이너는 커스텀 태그를 처리하기 위해 태그 핸들러의 인스턴스를 Resource Pool에서 가져와서 정의된 대로 초기화, 작업을 수행하고 작업 종료 시 Resource Pool로 반환하여 다음에 사용 될 수 있는 상태로 돌아간다.

 

Tag Handler의 작업을 수행하기 위해 그 메소드는 이미 javax.servlet.jsp.tagext.Tagjavax.servlet.jsp.tagext.BodyTag 인터페이스에 이미 정의 되어 있다.(Body를 지원하느냐 아니냐의 차이)

태그핸들러를 작성할때는 반드시 javax.servlet.jsp.tagext package에 있는 TagSupport 클래스와 BodyTagSupport 클래스중 하나만을 선택해서 사용해야 한다. (TagSupport의 경우 본체(Body)가 없거나  있어도 그대로 화면에 출력하는 기능을 하기에 본체를 처리하는 BodyTagSupport 태그 보다는 간단하다.)

+ Recent posts