Tom小猫,让我看清你的五脏六腑5(转)
来源:互联网 发布:网络机房建设报价单 编辑:程序博客网 时间:2024/04/30 04:57
自定义JSP标签库
此技术在JSP 1.1版本中才出现,用来重用某些复杂的逻辑运算和事务,或定义JSP王爷的输出内容和格式。制作一个完整的自定义标签程序,包含3个步骤:
1. 创建标签的处理类
此类必须扩展javax.servlet.jsp.TagSupport类或者javax.servlet.jsp.BodyTagSupport类。
以TagSupport类为例,先了解一下这个类的主要方法:
doStartTag()-JSP容器遇到自定义标签的起始标志时调用该方法;
doEndTag()-JSP容器遇到自定义标签的结束标志时调用该方法;
setValue(String k,Object o)-在标签处理类中设置key/value;
getValue(String k)-在标签处理类中根据key返回匹配的value;
removeValue(String k)-在标签处理类中删除key/value;
setPageContext(PageContext pc)-设置PageContext对象,该方法在调用doStartTag()和doStartTag()前调用;
setParent(Tag t)-设置嵌套当前标签的上层标签的处理类,该方法在调用doStartTag()和doStartTag()前调用;
getParent()-返回嵌套当前标签的上层标签的处理类。
首先调用setPageContext(PageContext pc)和setParent(Tag t),设置TagSupport类的两个重要属性值。
如果遇到起始标志,调用doStartTag(),此方法返回一个整数值,它有两个可选值:Tag.SKIP_BODY(标签之间的内容被忽略)和Tag.EVAL_BODY_INCLUDE(标签之间的内容正常执行)。
例如:<prefix:mytag>test</prefix:mytag>,如果遇上Tag.SKIP_BODY,test字符串不会显示在页面上;如果遇上Tag.EVAL_BODY_INCLUDE,test字符串将会显示在页面上。
如果遇到结束标志,调用doEndTag(),此方法也返回一个整数值,它有两个可选值:Tag.SKIP_PAGE(表示立刻停止执行JSP页面,网页上未处理的静态内容和JSP程序均别忽略,任何已有的输出内容立刻返回到客户端;)和Tag.EVAL_PAGE(表示按正常流程继续执行JSP页面)。
如果自定义标签包含自定义的属性,例如:<prefix:mytag attribute1="value1">,那么处理类中应该将这个属性做为成员变量,并提供一组get和set方法:
private int attribute1;
public void setAttribute1(int value){
this.attriubte1 = value;
}
public int getAttribute1(){
return attribute1;
}
下面是一个用来验证用户登陆的标签处理类例子:
private String name;
private String password;
private Log log = LogFactory.getLog(ValidateLoginTag.class);
public int doEndTag() throws JspException{
if(name.equals("pepsixp") && password.equals("888888")){
return(EVAL_PAGE);
}
return (SKIP_PAGE);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.创建TLD-Tag Library Descriptor(标签库描述文件)
TLD文件中元素可以分为三类:<tablib>、<tag>、<attribute>
<tablib>-设定标签库的相关信息,包含的子元素有tlibversion、jspversion、shortname、uri、info、tag。
<tag>-用来定义一个标签,包含的子元素有name、tagcalss、bodycontent、info、attribute。
bodycontent的说明:有三个可选值empty、JSP、tagdependent,empty表示标签中没有body,JSP表示body中可以加入JSP程序代码,tagdependent表示body的内容有标签进行处理。
<attribute>-用来定义标签的属性,包含的子元素有name、required、rtexprvalue。
rtexprvalue的说明:表示是否可以使用<%=...%>类型的表达式,
例如:<prefix:mytaglib attribute1="<%=name%>">
下面是一个简单的TLD文件:
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>MY Tag Library</shortname>
<uri>http://www.blogjava.net/pepsixp/</uri>
<info></info>
<tag>
<name>ifLogin</name>
<tagclass>com.akazam.struts.taglib.ValidateLoginTag</tagclass>
<bodycontent>empty</bodycontent>
<info></info>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>password</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
实际中的使用:
<%@ taglib uri="/tags/test" prefix="test" %>
<test:ifLogin name="pepsixp" password="888888"/>
3.在web应用中使用标签
先要在web.xml文件加入声明引用标签所在的标签:
<taglib-uri>/tags/test</taglib-uri>
<taglib-location>/WEB-INF/test.tld</taglib-location>
</taglib>
参考:《Tomcat与JavaWeb开发技术详解》
- Tom小猫,让我看清你的五脏六腑(一)
- Tom小猫,让我看清你的五脏六腑(二)
- Tom小猫,让我看清你的五脏六腑(三)
- Tom小猫,让我看清你的五脏六腑5(转)
- Tom小猫,让我看清你的五脏六腑2(转)
- Tom小猫,让我看清你的五脏六腑3(转)
- Tom小猫,让我看清你的五脏六腑4(转)
- Tom小猫,让我看清你的五脏六腑1
- 让我怀念“小猫”的宽带
- 一张图让你看清Java集合类(Java集合类的总结)
- 一张图让你看清Java集合类(Java集合类的总结)
- 一张图让你看清Java集合类(Java集合类的总结)
- Tomcat自身配置优化-让你的“小猫”飞一会
- 5个让你终身受益的故事 by tom.com
- 我的小猫叫小皮
- 让我看清你,EDS-T示波器视窗拓展功能-利利普技术特色系列No.117
- 我的Android项目之Tom伴你行
- 真心话大冒险,一款小程序让你看清你朋友的内心
- linux下查找某目录下所有文件包含某字符串的命令
- 提高ASP.NET应用程序性能的几招方法
- Tom小猫,让我看清你的五脏六腑2(转)
- Tom小猫,让我看清你的五脏六腑3(转)
- Tom小猫,让我看清你的五脏六腑4(转)
- Tom小猫,让我看清你的五脏六腑5(转)
- 最全的CSS浏览器兼容问题整理
- 日志类之序
- 如何给10^7个数据量的磁盘文件排序
- poj 3468 A Simple Problem with Integers(splay tree解法)
- 容易忽略的SQL语句(二)
- 背景音乐自动播放代码
- fcntl函数的应用
- 把java数组转化成List