介绍
在考试中对标签的考查占的比重十分重要,这其中又分自定义标签开发和标准标签库开发。自定义标签开发主要考查程序员是否对各个与标签相关的接口中的方法是否熟悉,倒并不会要程序员去开发一个比较复杂的标签;而标准标签库开发主要考查一些重要标签的使用形式,比较简单。这部分的内容将分成两篇文章来讲述。
标签扩展可以看成是一个Java类,它类似于JavaBean,但是具有比JavaBean更强大的运行时功能。因为它与JSP的逻辑联系更加紧密,同时它又能像JavaBean那样具有业务逻辑处理能力。所有的标签都必须直接或间接地继承javax.servlet.jsp.tagext.JspTag接口,一般都直接通过继承其子类Tag、BodyTag、IterationTag和SimpleTag来开发自定义标签。考试中对于这几个接口的考查较多,必须清楚它们的关系:
1)JspTag是所有标签的父接口,它没有声明任何属性和方法。
2)Tag接口继承了JspTag,它声明了四个属性,分别是SKIP_BODY、EVAL_BODY_INCLUDE、EVAL_PAGE和SKIP_PAGE,方法则有两个,分别是doStartTag()方法和doEndTag()方法。
3)IterationTag接口继承了Tag,它在Tag的基础上新加了属性EVAL_BODY_AGAIN和方法doAfterBody()。
4)BodyTag接口继承了IterationTag,它在IterationTag的基础长又增加了两个属性,分别是EVAL_BODY_BUFFERED和EVAL_BODY_TAG,方法则增加了doInitBody()和setBodyContent()两个方法。
5)DynamicAttributes接口用来开发接收动态参数的标签,它有一个setDynamicAttribute()的方法。
Tag标签开发
Tag的声明周期一般分为:
1)setPageContext():设置标签的页面上下文。
2)setParent():设置该标签的上一级标签,如果没有嵌套则设置为null。
3)设置该标签的属性,没有则略过。
4)doStartTag():返回SKIP_BODY或EVAL_BODY_INCLUDE,如果是前者则跳过,后者则计算标签主体。
5)doEndTag():返回EVAL_PAGE或SKIP_PAGE,如果是前者则继续处理JSP页面的其他部分,否则停止处理。
6)release():释放标签占用的资源。
下面通过一个例子来说明开发自定义标签的一般步骤:
1)开发标签的实现类,如:
package mytag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
/**
* 这是一个显示“Hello world”的标签
* @author zhouych
*/
public class MyTag implements Tag {
private PageContext pageContext;
private Tag parent;
public MyTag() {
super();
}
@Override
public void setPageContext(PageContext pc) {
this.pageContext = pc;
}
@Override
public void setParent(Tag t) {
this.parent = t;
}
@Override
public Tag getParent() {
return parent;
}
@Override
public int doStartTag() throws JspException {
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspException {
try {
pageContext.getOut().write("Hello world");
} catch (Exception e) {
throw new JspTagException("IO Error: " + e.getMessage());
}
return EVAL_PAGE;
}
@Override
public void release() {
// 暂时没有占用资源
}
}
2)编写标签的描述性文件(后缀名是tld),一般做法是在WEB-INF文件夹下新建一个tlds的文件夹来存放这些标签描述文件,如:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>mytag</short-name>
<uri>/WEB-INF/tlds/demotag</uri>
<tag>
<name>helloworld</name>
<tag-class>mytag.HelloWorldTag</tag-class>
<body-content>empty</body-content><!—表示标签体必须为空-->
<description>一个打印Hello world的标签</description>
</tag>
</taglib>
需要注意
的是在<body-content>中只允许填入如下内容,这个是考试重点
a)empty:表示标签体为空。
b)jsp:表示标签体可以是任何有效的JSP代码。
c)tagdependent:表示标签体内容不是由Servlet容器处理而是由标签处理器来处理,即不同于平常的是将执行能够结果传递给标签处理器。
d)scriptless:表示标签体可以包含EL表达式和JSP动作元素等,但不能包含JSP的脚本元素。
3)在web.xml文件中指定对标签的引用(节选)
<web-app>
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tlds/demotag</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytag.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
4)之后编写一个JSP页面来进行测试
<%@taglib uri="/WEB-INF/tlds/demotag" prefix="hello" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JSP Page</title>
</head>
<body>
<hello:helloworld />
</body>
</html>
在浏览器中输入上述页面的地址即可看到输出Hello world,如下图:
- 大小: 4.9 KB
分享到:
相关推荐
NULL 博文链接:https://superzhouych.iteye.com/blog/567784
NULL 博文链接:https://superzhouych.iteye.com/blog/566945
NULL 博文链接:https://superzhouych.iteye.com/blog/565269
NULL 博文链接:https://superzhouych.iteye.com/blog/568669
scwcd认证题库 scwcd认证题库 scwcd认证题库 scwcd认证题库 scwcd认证题库
Java认证考试.SCWCD是一个关于java方面的web开发的证书考试。主要讲述servlet技术
java web servlet scwcd
SCWCD 310-083题库分享。。。 SCWCD 310-083题库分享。。。 SCWCD 310-083题库分享。。。
SCWCD_310-083-02题库.pdf SCWCD_310-083-02题库.pdf
SCWCD 310-081的完整题库,来自三个国际著名试题提供商,最新覆盖率,日本100%,大陆90%以上,本人自己花钱买的,拿来与大家分享~注:本人3月12日通过该考试,得分91%
SCWCD 310-081题库分享。。。 SCWCD 310-081题库分享。。。 SCWCD 310-081题库分享。。。
今天(7.31)下午刚刚过了SCWCD,98%,那一题不知道错在哪里。把我的复习资料传上来,都是网上搜索的,剔除了没有用的过时的资料,其中的head first笔记和276题量的题库是一定要过一遍的,都是原题。祝好运。
SCWCD 310-083题库分享。。。 SCWCD 310-083题库分享。。。 SCWCD 310-083题库分享。。。
scwcd题库083的,非常好……上次给大家分享
SCWCD 题库 Actualtests 310-081
用于考scwcd的朋友,我刚刚考过sun的scwcd,挺好的
SCWCD 276 题库(昨天,我就是凭借这个题库通过)276道真题,只要把这个题库吃透,通过肯定没有问题,因为我就是昨天通过的(310-083)。以防题库更新,请大家尽快去考~
Sun Certified Web Component Developer for J2EE 5 代号:310-083 该文档题量:239 主要看前100题,我考了两次,出的题都是在100以内。 我考式时出的题全是这套题上的,没有一个没在这套题上。...