当前位置: 首页 > 图文教程 > 网络编程 > JSP > JSP 自定义标签

JSP
我认为JSP有问题(上)
我认为JSP有问题(下)
jsp“抓”网页代码的程序
关于在bean里面打印html的利弊看法
bean里面如何打印到html页面
jdbc3中的RowSet 接口规范
Apusic Application Server1.0中jsp源代码泄漏漏洞
Unify的eWave ServletExec拒绝服务漏洞
通过提交超长的GET请求导致IBM HTTP Server远程溢出
在HTTP请求中添加特殊字符导致暴露JSP源代码文件
Resin 1.2 重要源代码暴露漏洞
多中WEB服务器的通用JSp源代码暴露漏洞
Tomcat 暴露JSP文件内容
IBM WebSphere Application Server 暴露JSP文件内容
JRun 2.3.x 范例文件暴露站点安全信息
BEA WebLogic 暴露源代码漏洞
IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞
Tomcat 3.1 存在暴露网站路径问题
Sun Java Web Server 能让攻击者远程执行任意命令
Netscape 修复 JAVA 安全漏洞

JSP 自定义标签


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 116 ::
收藏到网摘: n/a

JSP 自定义标签 方法总结,比较详细,大家可以参考学习下。 一、基本概念:
1.标签(Tag):
标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的
2.标签库(Tag library):
由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。
3.标签库描述文件(Tag Library Descriptor):
标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。
4.标签处理类(Tag Handle Class):
标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能
二、自定义JSP标签的格式:
1.
<% @ taglib prefix=”someprefix” uri=”/sometaglib” %>

为了使到JSP容器能够使用标签库中的自定义行为,必须满足以下两个条件:
1)从一个指定的标签库中识别出代表这种自定义行为的标签
2)找到实现这些自定义行为的具体类
第一个必需条件-找出一个自定义行为属于那个标签库-是由标签指令的前缀(Taglib Directive's Prefix)属性完成,所以在同一个页面中使用相同前缀的元素都属于这个标签库。每个标签库都定义了一个默认的前缀,用在标签库的文档中或者页面中插入自定义标签。所以,你可以使用除了诸如jsp,jspx,java,servlet,sun,sunw(它们都是在JSP白皮书中指定的保留字)之类的前缀。  
uri属性满足了以上的第二个要求。为每个自定义行为找到对应的类。这个uri包含了一个字符串,容器用它来定位TLD文件。在TLD文件中可以找到标签库中所有标签处理类的名称
2. 当web应用程序启动时,容器从WEB-INF文件夹的目录结构的META-INF搜索所有以.tld结尾的文件。也就是说它们会定位所有的TLD文件。对于每个TLD文件,容器会先获取标签库的URI,然后为每个TLD文件和对应的URI创建映射关系。
在JSP页面中,我们仅需通过使用带有URI属性值的标签库指令来和具体的标签库匹配
三、自定义JSP标签的处理过程:

1.在JSP中引入标签库:
<% @ taglib prefix=”taglibprefix” uri=”tagliburi” %>

2.在JSP中使用标签库标签
3.Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值
4.Web容器根据uri属性在web.xml找到对应的元素 5.从元素中获得对应的元素的值 6.Web容器根据元素的值从WEB-INF/目录下找到对应的.tld文件 7.从.tld文件中找到与tagname对应的元素 8.凑元素中获得对应的元素的值 9.Web容器根据元素的值创建相应的tag handle class的实例 10. Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理
四、创建和使用一个Tag Library的基本步骤:
1.创建标签的处理类(Tag Handler Class)
2.创建标签库描述文件(Tag Library Descrptor File)
3.在web.xml文件中配置元素 4.在JSP文件中引人标签库
五、TagSupport类简介:
1.处理标签的类必须扩展javax.servlet.jsp.TagSupport.
2.TagSupport类的主要属性:
A.parent属性:代表嵌套了当前标签的上层标签的处理类
B.pageContex属性:代表Web应用中的javax.servlet.jsp.PageContext对象
3.JSP容器在调用doStartTag或者doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent。因此在标签处理类中可以直接访问pageContext变量
4.在TagSupport的构造方法中不能访问pageContext成员变量,因为此时JSP容器还没有调用
setPageContext方法对pageContext进行初始化
JSP 自定义标签 方法总结,比较详细,大家可以参考学习下。
六、TagSupport处理标签的方法:

1.TagSupport类提供了两个处理标签的方法:
public int doStartTag() throws JspException
public int doEndTag() throws JspException
2.doStartTag:但JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。
doStartTag()方法返回一个整数值,用来决定程序的后续流程。
A.Tag.SKIP_BODY:表示?>…之间的内容被忽略
B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行
3.doEndTag:但JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。doEndTag()方法也返回一个整数值,用来决定程序后续流程。
A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。
B.Tag_EVAL_PAGE:表示按照正常的流程继续执行JSP网页
七、用户自定义的标签属性:
如果在标签中还包含了自定义的属性,那么在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法。
八、创建标签处理类的步骤:
1.创建包含JSP网页静态文本的文件(即是要替换自定义JSP标签的文本)
2.在Web应用启动时装载静态文本
3.创建标签处理类
九、如何创建包含JSP网页静态文本的文件:
1.使用java.util.Properties类来存放要替换网页中自定义JSP标签的静态文本
2.Properties类代表了一系列属性的集合,其实例既可以被保存到流中,也可以从流中加载。这些文本以key/value的形式存放在WEB-INF目录下,例如key=value,在属性列表中这些key/value都是String类型的
十、Properties类的常用API:
1.setProperty(String key, String value):调用Hashtable类的put方法添加属性
2.getProperty(String key):获取属性列表中key对应的属性值
3.load(InputStream in):从输入流对象InputStream中读取属性列表(Properties list)
4.store(OutputStream out,String coMMent):使用适当的格式将属性列表的属性对写入输出流对象中,默认使用ISO-88590-1编码格式,以行的方式处理输入。属性的key/value之间以”=、:”配对,以回车、换行分隔key/value配对
十一、ServletContext类的常用API:
1.getContext(String uripath):返回服务器中uripath所代表的ServletContext对象
2.getInitParameter(String name):返回ServletConfig对象中name参数的值
3.getMineType(String file):返回file参数代表的文件的MIME类型
4.getRequestDispatcher(String path):返回path代表的RequestDispacher对象
5.getResourceAsStream(String path):以输入流的形式返回path对应的资源,在输入留中对象可以为任意形式的数据,path参数必须以“/”开始且相对于Context Root
十二、如何使用ServletContxt读取并保存属性文件:
1.创建java.util.Properties类对象
2.获取ServletContext对象
3.将属性文件以输入流的形式读入到某个输入流对象中
4.将输入流对象加载到Properties对象中
5.将Properties对象保存到ServletContext对象中
JSP 自定义标签 方法总结,比较详细,大家可以参考学习下。

十三、如何在Web应用启动时装载静态文本:

1.创建继承了HttpServlet类的子类,在web.xml中配置这Servlet时设置load-on-startup属性:

someclass

somepackage.SomeClass1

2.在这个Servlet的init()方法中创建java.util.Properties类

3.获取当前Web应用的ServletContext对象

4.将WEB-INF目录下的属性文件读入到输入流InputStream中:

InputStream in = context.getResourceAsString("WEB-INF/someproperties.properties");

5.将输入流加载到属性对象中

ps.load(in);

6.将属性对象保存到上

context.setAttribute("attributeName",ps);

十四、如何创建标签处理类:

1.引入必需的资源:

import javax.servlet.jsp.*;

import javax.servlet.http.*;

import java.util.*;

import java.io.*;

2.继承TagSupport类并覆盖doStartTag()/doEndTag()方法

3.从ServletContext对象中获取java.util.Properties对象

4.从Properties对象中获取key对应的属性值

5.对获取的属性进行相应的处理并输出结果

十五、创建标签库描述文件(Tag Library Descriptor):

1.标签库描述文件,简称TLD,采用XML文件格式,定义了用户的标签库。TLD文件中的元素可以分成3类:

A.:标签库元素

B.:标签元素

C.:标签属性元素

2.标签库元素用来设定标签库的相关信息,它的常用属性有:

A.shortname: 指定Tag Library默认的前缀名(prefix)

B.uri: 设定Tag Library的惟一访问表示符

3.标签元素用来定义一个标签,它的常见属性有:

A.name: 设定Tag的名字

B.tagclass: 设定Tag的处理类

C.bodycontent: 设定标签的主体(body)内容

1).empty:表示标签中没有body

2).JSP:表示标签的body中可以加入JSP程序代码

3).tagdependent:表示标签中的内容由标签自己去处理

4.标签属性元素用来定义标签的属性,它的常见属性有:

A.name:属性名称

B.required:属性是否必需的,默认为false

C.rtexprvalue:属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式

十六、在Web应用中使用标签:

1.如果Web应用中用到了自定义JSP标签,则必须在web.xml文件中加入元素,它用于声明所引用的标签所在的标签库

/sometaglib

/WEB-INF/someTLD.tld

2.:设定Tag Library的惟一标示符,在Web应用中将根据它来引用Tag Libray

3.:指定和Tag Library对应的TLD文件的位置

4.在JSP文件中需要加入<% @ taglib% >指令来声明对标签库的引用。例如:

<% @ taglib prefix = “somePrefix” uri = "/someuri" %>

5.prefix表示在JSP网页中引用这个标签库的标签时的前缀,uri用来指定Tag Library的标识符,它必须和web.xml中的属性保持一致。