์ปค์คํ ํ๊ทธ๋ฅผ ๊ฐ๊ณ ์๋ JSPํ์ด์ง๊ฐ ์๋ธ๋ฆฟ์ผ๋ก ๋ณํ๋ ๋, ๊ทธ ํ๊ทธ๋ tag handler๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ์ฒด์ operation์ผ๋ก ๋ณํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ JSPํ์ด์ง์ ์๋ธ๋ฆฟ์ด ์คํ๋ ๋ ์น์ปจํ ์ด๋๊ฐ ๊ทธ opreation์ ํธ์ถํ๊ฒ ๋๋ ๊ฑฐ์ฃ .
JSP tag extensions ๋ JSP์ ์ง์ ์ถ๊ฐํ ์ ์๋ ์๋ก์ด ํ๊ทธ๋ฅผ ๋ง๋ค ์ ์๋๋ก ํด์ค๋๋ค. JSP 2.0 specification์๋ ์ด๋ฐ ์ปค์คํ ํ๊ทธ๋ฅผ ์ฐ๊ธฐ์ํ Simple Tag Handlers ๋ฅผ ์ ๊ณตํฉ๋๋ค.
customer tag๋ฅผ ์ฐ๋ ค๋ฉด ๋จ์ํ SimpleTagSupport ๋ฅผ ์์ํ๊ณ doTag()๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ๋ฉด ๋ฉ๋๋ค.
Create "Hello" Tag ( ์ฌ์ฉ์ ์ ์ ํ๊ทธ ์์ฑํ๊ธฐ )
์๋์ฒ๋ผ <ex:Hello> ๋ฅผ ์ฐ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. body ํ๊ทธ๋ ์์ด ๋ง์ ๋๋ค.
<ex:Hello />
custom JSP tag๋ฅผ ๋ง๋ค๋ ค๋ฉด ํ๊ทธ ํธ๋ค๋ฌ Java class ๋ถํฐ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์๋์ฒ๋ผ ์๋ฐ ์ฝ๋ฉ์ ํด๋ด ์๋ค.
package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
์ ์ฝ๋๋ doTag() ๋ฉ์๋์์ getJspContext() method๋ฅผ ์ด์ฉํด์ ํ์ฌ JspContext object๋ฅผ ์ป์ด์ค๊ณ "Hello Custom Tag!"๋ฉ์์ง๋ฅผ JspWriter ๊ฐ์ฒด๋ก ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๋ฃ์ ๊ฒ์ ๋๋ค.
์ด์ ์ด ์์คํ์ผ์ ์ปดํ์ผํด์ classํ์ผ๋ก ๋ง๋ค๊ณ ์ด ํด๋์ค ํ์ผ์ ํ๊ฒฝ๋ณ์ CLASSPATH์ ์ง์ ๋์ด์๋ ๊ณณ์ ๋ณต์ฌํด์ ๋ฃ์ด์ฃผ์ธ์. ๋ง์ง๋ง์ผ๋ก ์๋์ ๊ฐ์ ํ๊ทธ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค. ์์น๋ ์๋์ ๊ฐ์ต๋๋ค.
<Tomcat-Installation-Directory>webapps\ROOT\WEB-INF\custom.tld
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Hello</name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
์ด์ JSPํ์ผ์์ ์ด Hello ํ๊ทธ๋ฅผ ์ฌ์ฉํด ๋ด ์๋ค.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body> </html>
์ด์ ๋ง๋ค์ด์ง JSPํ์ผ์ ์น๋ธ๋ผ์ฐ์ ์์ ์์ฒญํด ๋ณด์ธ์. ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๊ฒ์ ๋๋ค.
Hello Custom Tag!
Accessing the Tag Body ( ํ๊ทธ ๋ฐ๋์ ์ ๊ทผํ๊ธฐ )
์ปค์คํ ํ๊ทธ๋ ์ผ๋ฐ HTMLํ๊ทธ์ฒ๋ผ ์์ํ๊ทธ์ ์ข ๋ฃํ๊ทธ ์ฌ์ด์ ๋ฐ๋๋ถ๋ถ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
<ex:Hello> This is message body </ex:Hello>
์์์ ์์ฑํ๋ ์๋ฐ์์ค๋ฅผ ์๋์ฒ๋ผ ๋ณ๊ฒฝํฉ๋๋ค.
package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
์ฌ๊ธฐ์๋ StringWriter๋ก ์ฝ์ด๋ค์ธ ํ์ ์ฝ์ด๋ค์ธ ๊ฐ์ JspWriter์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค.
TLD ํ์ผ๋ ์๋์ฒ๋ผ ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
JSPํ์ผ์ ์๋์ฒ๋ผ ๋ณ๊ฒฝํฉ๋๋ค.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello> This is message body </ex:Hello> </body> </html>
๊ฒฐ๊ณผ๋ ์๋์ฒ๋ผ ๋์์ผ ํฉ๋๋ค.
This is message body
Custom Tag Attributes ( ์ปค์คํ
ํ๊ทธ์ ์์ฑ )
custom tags๋ ์์ฑ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค. ์์ฑ๊ฐ์ ๋ฐ์ผ๋ ค๋ฉด custom tag class๋ setter methods๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. JavaBean setter methods์ ๋์ผํ๊ฒ ๋ง์ด์ฃ .
package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* Use message from attribute */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* use message from the body */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
์์ฑ๋ช ์ "message"์ด๊ณ ์ธํฐ๋ฉ์๋๋ ๋น์ฐํ setMessage()๊ฐ ๋๊ฒ ์ฃ . ์ด์ ์ด ์์ฑ์ TLD file์ ์ถ๊ฐํฉ๋๋ค. <attribute> ์์๋ฅผ ์ด์ฉํด์ ๋ง์ด์ฃ .
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag> </taglib>
JSPํ์ผ์ ๋ฉ์์ง ์์ฑ์ ์ด์ฉํ ํ๊ทธ๋ฅผ ์ถ๊ฐํ์ธ์.
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello message="This is custom tag" /> </body> </html>
๊ฒฐ๊ณผ๋ ์๋์ฒ๋ผ ๋์ฌ ๊ฒ์ ๋๋ค.
This is custom tag
์์ฑ์๋ ์๋์ ๊ฐ์ ํ๋กํผํฐ๋ค์ด ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
Property | Purpose |
---|---|
name | The name element defines the name of an attribute. Each attribute name must be unique for a particular tag. |
required | This specifies if this attribute is required or optional. It would be false for optional. |
rtexprvalue | Declares if a runtime expression value for a tag attribute is valid |
type | Defines the Java class-type of this attribute. By default it is assumed as String |
description | Informational description can be provided. |
fragment | Declares if this attribute value should be treated as a JspFragment. |
์์ฑ ๊ด๋ จ ํ๋กํผํฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> .....
๋ ๊ฐ ์ด์์ ์์ฑ์ ์ฌ์ฉํ๋ค๋ฉด TLDํ์ผ์ ์๋์ฒ๋ผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute> <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute>
.....
'๐ป Programming > JSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JSP] Implicit Objects ( ๋ฌต์์ ๊ฐ์ฒด๋ค ) (0) | 2019.02.15 |
---|---|
[JSP] Actions ( ์ก์ ) (0) | 2019.02.15 |
[JSP] Directives ( ๋๋ ํฐ๋ธ ) (0) | 2019.02.15 |
[JSP] JSP ์๋ช ์ฃผ๊ธฐ ( life cycle ) (0) | 2019.02.15 |
[JSP] ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ (0) | 2019.02.15 |