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의 값인 "테스트입니다." 가 잘나오는 것을 볼 수 있습니다.
'프로그래밍 > JSP Servlet' 카테고리의 다른 글
JSP/Servlet – 필터(Filter)의 이해 (0) | 2016.03.14 |
---|---|
JSP/Servlet – 커스텀 액션안에 또 다른 커스텀 액션 포함하기 (0) | 2016.03.06 |
JSP/Servlet – 태그 클래스를 이용해서 변수 지원 커스텀 액션 만들기 (0) | 2016.03.01 |
JSP/Servlet – 태그 클래스를 이용해서 커스텀 액션의 본체 내용을 바꿔보자 (0) | 2016.03.01 |
JSP/Servlet – 동적 애트리뷰트를 지원하는 태그 클래스 만들기 (0) | 2016.02.23 |
JSP/Servlet – 태그클래스를 이용해서 애트리뷰트가 있는 커스텀 액션 만들기 (1) | 2016.02.23 |
JSP/Servlet – SimpleTagSupport 클래스를 이용해서 태그 클래스 작성하기 (0) | 2016.02.22 |
JSP/Servlet – 커스텀 액션에 변수를 사용해보자 (0) | 2016.02.22 |