프로그래밍/JSP Servlet

JSP/Servlet - 태그 클래스를 이용한 본체가 있는 커스텀 액션 만들기

가카리 2016. 2. 29. 22:24
반응형

 

JSP/Servlet – 태그 클래스를 이용한 본체가 있는 커스텀 액션 만들기

 

태그 클래스에서 본체가 있는 커스텀 액션을 만드려면 2가지 단계를 거쳐야합니다.

 

첫 번째는 getJspBody 메소드를 호출해서 JspFragment 객체를 가져옵니다.

 

두 번째는 JspFragment 객체의 invoke 메소드를 호출해서 출력에 사용될 출력 스트림을 파라미터로 넘겨줍니다.

 

    JspFragment body = getJspBody();//커스텀 액션의 본체를 가져오는 메소드

    body.invoke(out);//이 위치에 본체의 내용을 출력

 

 

위와 같이 폴더 및 파일을 구성합니다.

 

/WEB-INF/classes/tool/BoxTag.java

 

package tool;

 

import java.io.IOException;

 

import javax.servlet.jsp.JspContext;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.JspFragment;

import javax.servlet.jsp.tagext.SimpleTagSupport;

 

public class BoxTag extends SimpleTagSupport{

    @Override

    public void doTag() throws JspException, IOException {

        // TODO Auto-generated method stub

        JspContext context = getJspContext();

        JspWriter out = context.getOut();

        JspFragment body = getJspBody();//body 값을 가져옵니다.

        out.println("<TABLE border=1 cellpadding=20><TR><TD>");

        body.invoke(out);//body 사용된 값이 출력됩니다.

        out.println("</TD></TR></TABLE>");

        return;

    }

}

 

 

/WEB-INF/tlds/tools.tld

body-content에서 기존의 empty가 아닌 scriptless로 변경해서 본체에 스크립틀릿을 포함할 수 없음을 명시합니다.

 

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

    <tlib-version>1.0</tlib-version>

    <short-name>tool</short-name>

    <tag>

        <name>box</name>

        <tag-class>tool.BoxTag</tag-class>

        <body-content>scriptless</body-content>

    </tag>

</taglib>

 

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>ch10_jsp_tag_body2</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<jsp-config>

         <taglib>

         <taglib-uri>/taglibs/tools.tld</taglib-uri>

         <taglib-location>/WEB-INF/tlds/tools.tld</taglib-location>

        </taglib>

    </jsp-config>

</web-app>

 

 

TagTest.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@taglib prefix="tool" uri="/taglibs/tools.tld" %>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

    <tool:box>

        테스트입니다.<BR>

    </tool:box>

</body>

</html>

 

 

실행 화면

다음과 같이 body의 값인 "테스트입니다." 가 잘나오는 것을 볼 수 있습니다.

반응형