读书笔记-JSP自定义标签
2014-07-25 15:01
281 查看
1.JSP自定义标签要求:
⑴继承父类:javax.servlet.jsp.tagext.SimpleTagSupport
⑵标签类如果有属性,每个属性应该有对应的setter和getter方法
⑶重写doTag()方法,这个方法负责生成页面内容
2.开发标签库步骤:
⑴开发自定义标签处理类:创建一个类继承SimpleTagSupport类,此处定义的标签为无属性无标签体标签。
标签处理类源代码:
⑵建立*.tld文件,每个tld文件对应一个标签库,每个标签库可包含多个标签,将tld文件放在Web应用WEB-INF/下,文件名为FirstTag.tld。 (TLD-Tag Library Definition-标签库定义)
tld文件源代码:
⑶在JSP中使用自定义标签:通过标签库URI确定使用哪个标签库,通过标签名确定使用哪个标签。先用taglib编译指令导入标签库,将标签库和指定前缀关联起来。<%@ taglib uri="http://www.crazyit.org/FirstTLD"prefix="mytag"%>
表示导入标签库后,mytag前缀的标签都由http://www.crazyit.org/FirstTLD标签库处理。
JSP源代码:
注意:当修改标签处理类的doTag方法的内容时,如果重新刷新JSP页面没有出现修改后的效果,在Eclipse中右键项目点击Build Project,待控制台显示已经重新发布,刷新即可见到修改后的效果。
3.带属性的标签:
⑴在标签实现类中要为每个属性提供setter和getter方法
标签处理类源代码:
<name>名字</name> (属性的名字)
<required>true/false</required>(是否为必须属性)
<fragment>true/false</fragment>(是否支持JSP脚本,表达式等动态内容等)
注意:一个<attribute></attribute>用于配置一个属性。
4.带标签体的标签:可以在标签体内嵌入其他内容,包括静态的html内容和动态的JSP内容
标签处理类源代码:
5.以页面片段为属性的标签:
⑴标签处理类中必须定义一个JspFragment的属性,该属性代表页面片段。
⑵使用该标签时,要通过<attribute name="JspFragment属性名字">为该属性指定值。
标签处理类:
在JSP中使用:
6.动态属性的标签:传入自定义标签的属性个数和属性名是不确定的
⑴标签处理类要实现DynamicAttributes接口
⑵配置标签时,要用<dynamic-attributes>true</dynamic-attributes>指定该标签支持动态属性
标签处理类:
源代码网盘地址:http://pan.baidu.com/s/1kTgcC8v
⑴继承父类:javax.servlet.jsp.tagext.SimpleTagSupport
⑵标签类如果有属性,每个属性应该有对应的setter和getter方法
⑶重写doTag()方法,这个方法负责生成页面内容
2.开发标签库步骤:
⑴开发自定义标签处理类:创建一个类继承SimpleTagSupport类,此处定义的标签为无属性无标签体标签。
标签处理类源代码:
//这是一个没有属性和标签体的标签的实现类 public class TagClass extends SimpleTagSupport{ public void doTag() throws JspException,IOException{ getJspContext().getOut().write("这是一个自定义标签的显示哈哈!!!"); } }
⑵建立*.tld文件,每个tld文件对应一个标签库,每个标签库可包含多个标签,将tld文件放在Web应用WEB-INF/下,文件名为FirstTag.tld。 (TLD-Tag Library Definition-标签库定义)
tld文件源代码:
<?xml version="1.0" encoding="GBK"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>FirstTLD</short-name> <!-- 定义该标签库的URI --> <uri>http://www.crazyit.org/FirstTLD</uri> <!-- 定义第一个标签 --> <tag> <!-- 定义标签名 --> <name>fTag</name> <!-- 定义标签处理类 --> <tag-class>Tag.TagClass</tag-class> <!-- 定义标签体为空 --> <body-content>empty</body-content> </tag> </taglib>
⑶在JSP中使用自定义标签:通过标签库URI确定使用哪个标签库,通过标签名确定使用哪个标签。先用taglib编译指令导入标签库,将标签库和指定前缀关联起来。<%@ taglib uri="http://www.crazyit.org/FirstTLD"prefix="mytag"%>
表示导入标签库后,mytag前缀的标签都由http://www.crazyit.org/FirstTLD标签库处理。
JSP源代码:
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%> <%@taglib uri="http://www.crazyit.org/FirstTLD" prefix="mytag"%> <!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=gbk"> <title>自定义标签库测试</title> </head> <body> <mytag:fTag/> </body> </html>JSP运行结果:
注意:当修改标签处理类的doTag方法的内容时,如果重新刷新JSP页面没有出现修改后的效果,在Eclipse中右键项目点击Build Project,待控制台显示已经重新发布,刷新即可见到修改后的效果。
3.带属性的标签:
⑴在标签实现类中要为每个属性提供setter和getter方法
标签处理类源代码:
//这是一个带属性的标签的实现类,需要为属性提供setter和getter方法 public class AttTagClass extends SimpleTagSupport{ private String name; private int num; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public void doTag() throws JspException,IOException{ getJspContext().getOut().write("<br/>"+name+",你已经成功创建第"+num+"个标签!"); } }⑵在<tag></tag>中需要增加<attribute></attribute>元素,该元素包含三个子元素:
<name>名字</name> (属性的名字)
<required>true/false</required>(是否为必须属性)
<fragment>true/false</fragment>(是否支持JSP脚本,表达式等动态内容等)
注意:一个<attribute></attribute>用于配置一个属性。
<!--定义带属性的标签--> <tag> <!--定义标签名--> <name>att</name> <!--定义标签处理类--> <tag-class>Tag.AttTagClass</tag-class> <!--定义标签体为空--> <body-content>empty</body-content> <!--配置att标签的各个属性--> <attribute> <name>name</name> <required>true</required> <fragement>true</fragement> </attribute> <attribute> <name>num</name> <required>true</required> <fragement>true</fragement> </attribute> </tag>⑶在JSP中使用带属性的自定义标签:使用的时候要为每个属性赋值
<span style="font-size:18px;"> <mytag:att name="USER" num="2"/></span>JSP运行结果:
4.带标签体的标签:可以在标签体内嵌入其他内容,包括静态的html内容和动态的JSP内容
标签处理类源代码:
public class BodyTagClass extends SimpleTagSupport{ public void doTag()throws JspException,IOException{ for(int i=1;i<=3;i++){ //Web容器会使用setJspBody方法定义一个代表jsp内容的Fragment对象,调用getJspBody获取该对象,通过invoke方法可以输出标签体内容 getJspBody().invoke(null); } } }tld文件中定义带标签体的标签:
<tag> <!--定义标签名--> <name>body</name> <!--定义标签处理类--> <tag-class>Tag.BodyTagClass</tag-class> <!--定义标签体为scriptless,表示标签体中不允许出现JSP脚本--> <body-content>scriptless</body-content> </tag>在JSP中使用带标签体的标签:
<mytag:body> <h1>这是静态的html内容</h1> <jsp:include page="including.jsp"></jsp:include> </mytag:body>JSP运行结果:
5.以页面片段为属性的标签:
⑴标签处理类中必须定义一个JspFragment的属性,该属性代表页面片段。
⑵使用该标签时,要通过<attribute name="JspFragment属性名字">为该属性指定值。
标签处理类:
public class PageTagClass extends SimpleTagSupport{ private JspFragment fragment; public void setFragment(JspFragment fragment){ this.fragment=fragment; } public JspFragment getFragment(){ return this.fragment; } public void doTag()throws JspException,IOException{ fragment.invoke(null); } }tld中定义该标签:
<tag> <!--定义标签名--> <name>page</name> <!--定义标签处理类--> <tag-class>Tag.PageTagClass</tag-class> <!--定义标签体为空--> <body-content>empty</body-content> <attribute> <name>fragment</name> <required>true</required> <fragment>true</fragment> </attribute> </tag>
在JSP中使用:
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%> <%@taglib uri="http://www.crazyit.org/FirstTLD" prefix="mytag"%> <!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=gbk"> <title>自定义标签库测试</title> </head> <body> <mytag:page> <jsp:attribute name="fragment"> <mytag:fTag/> <br> 这是以页面片段为属性的自定义标签! </jsp:attribute> </mytag:page> </body> </html>JSP运行结果:
6.动态属性的标签:传入自定义标签的属性个数和属性名是不确定的
⑴标签处理类要实现DynamicAttributes接口
⑵配置标签时,要用<dynamic-attributes>true</dynamic-attributes>指定该标签支持动态属性
标签处理类:
public class DynamicTagClass extends SimpleTagSupport implements DynamicAttributes{ private ArrayList<String> keys=new ArrayList<String>(); private ArrayList<Object> values=new ArrayList<Object>(); public void doTag()throws JspException,IOException{ JspWriter out=getJspContext().getOut(); for(int i=0;i<keys.size();i++){ out.println(keys.get(i)+":"+values.get(i)); } } public void setDynamicAttribute(String url, String key1, Object value1 ) throws JspException { keys.add(key1); values.add(value1); } }tld中配置该标签:
<tag> <!--定义标签名--> <name>dynamic</name> <!--定义标签处理类--> <tag-class>Tag.DynamicTagClass</tag-class> <!--定义标签体为空--> <body-content>empty</body-content> <!--定义标签支持动态属性--> <dynamic-attributes>true</dynamic-attributes> </tag>在JSP中使用:
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%> <%@taglib uri="http://www.crazyit.org/FirstTLD" prefix="mytag"%> <!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=gbk"> <title>自定义标签库测试</title> </head> <body> <mytag:dynamic 第一个属性="one" 第二个属性="two" 第三个属性="three" /> </body> </html>JSP运行结果:
源代码网盘地址:http://pan.baidu.com/s/1kTgcC8v
相关文章推荐
- jsp自定义标签跟着走
- JSP自定义标签开发(五)——标签类获取 request 、 session
- jsp自定义标签的使用说明(转)
- JSP自定义标签
- 由浅到深详细讲解JSP自定义标签
- JSP的自定义标签(三)之带标签体的标签
- jsp自定义标签实现数据字典
- JSP自定义标签
- jsp 自定义标签 一 简单示例
- JSP 自定义标签
- JSP自定义标签
- JSP自定义标签案例分析
- jsp 自定义标签
- JSP自定义标签报错:cvc-complex-type.2.4.d: Invalid content was found starting with element 'required'.
- jsp自定义标签晋级【实现循环输出】
- 《JSP2.0 技术手册》读书笔记六-JSP语法与EL
- JSP自定义标签
- JSP自定义标签(3)
- JSP自定义标签的开发与应用