`
378629846
  • 浏览: 216143 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

Jsp中的自定义标签由浅到深详细讲解

    博客分类:
  • java
阅读更多
Jsp中的自定义标签由浅到深详细讲解 

发布时间:2007.05.15 05:26     来源:赛迪网技术社区    作者:dxaw

一、基本概念:


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.

<someprefix:sometag key=”somevalue”/>

 当web应用程序启动时,容器从WEB-INF文件夹的目录结构的META-INF搜索所有以.tld结尾的文件。也就是说它们会定位所有的TLD文件。对于每个TLD文件,容器会先获取标签库的URI,然后为每个TLD文件和对应的URI创建映射关系。

在JSP页面中,我们仅需通过使用带有URI属性值的标签库指令来和具体的标签库匹配


三、自定义JSP标签的处理过程:


1.在JSP中引入标签库:

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进行初始化



六、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对象中



十三、如何在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文件中需要加入


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

原文:http://tech.ccidnet.com/art/3539/20070514/1080617_1.html

分享到:
评论

相关推荐

    白色卡通风格响应式游戏应用商店企业网站模板.zip

    白色卡通风格响应式游戏应用商店企业网站模板.zip

    48页-智慧工地监管平台解决方案.pdf

    智慧工地,作为现代建筑施工管理的创新模式,以“智慧工地云平台”为核心,整合施工现场的“人机料法环”关键要素,实现了业务系统的协同共享,为施工企业提供了标准化、精益化的工程管理方案,同时也为政府监管提供了数据分析及决策支持。这一解决方案依托云网一体化产品及物联网资源,通过集成公司业务优势,面向政府监管部门和建筑施工企业,自主研发并整合加载了多种工地行业应用。这些应用不仅全面连接了施工现场的人员、机械、车辆和物料,实现了数据的智能采集、定位、监测、控制、分析及管理,还打造了物联网终端、网络层、平台层、应用层等全方位的安全能力,确保了整个系统的可靠、可用、可控和保密。 在整体解决方案中,智慧工地提供了政府监管级、建筑企业级和施工现场级三类解决方案。政府监管级解决方案以一体化监管平台为核心,通过GIS地图展示辖区内工程项目、人员、设备信息,实现了施工现场安全状况和参建各方行为的实时监控和事前预防。建筑企业级解决方案则通过综合管理平台,提供项目管理、进度管控、劳务实名制等一站式服务,帮助企业实现工程管理的标准化和精益化。施工现场级解决方案则以可视化平台为基础,集成多个业务应用子系统,借助物联网应用终端,实现了施工信息化、管理智能化、监测自动化和决策可视化。这些解决方案的应用,不仅提高了施工效率和工程质量,还降低了安全风险,为建筑行业的可持续发展提供了有力支持。 值得一提的是,智慧工地的应用系统还围绕着工地“人、机、材、环”四个重要因素,提供了各类信息化应用系统。这些系统通过配置同步用户的组织结构、智能权限,结合各类子系统应用,实现了信息的有效触达、问题的及时跟进和工地的有序管理。此外,智慧工地还结合了虚拟现实(VR)和建筑信息模型(BIM)等先进技术,为施工人员提供了更为直观、生动的培训和管理工具。这些创新技术的应用,不仅提升了施工人员的技能水平和安全意识,还为建筑行业的数字化转型和智能化升级注入了新的活力。总的来说,智慧工地解决方案以其创新性、实用性和高效性,正在逐步改变建筑施工行业的传统管理模式,引领着建筑行业向更加智能化、高效化和可持续化的方向发展。

    基于卷积神经网络的AV1视频编码环路滤波技术

    内容概要:本文提出了一种基于卷积神经网络(CNN)的AV1视频编码环路滤波方法。该方法利用深度可变的简单网络结构SimNet,针对不同量化参数(QP)调整网络深度,从而提高编码效率和视觉质量。同时,作者提出了一种适用于INTER编码的跳过增强策略,以避免重复增强导致的图像质量下降。实验结果表明,该方法在INTRA和INTER编码模式下分别实现了平均7.27%和5.57%的BD-rate降低,且在编码时间上优于AV1基准。 适合人群:视频编码研究人员、AI开发者、多媒体技术专家。 使用场景及目标:适用于提升视频压缩编码的效率和视觉质量,特别是对于AV1视频编码标准的应用。 其他说明:该方法不仅提高了编码效率和视觉质量,还降低了计算复杂度。

    白色简洁风格的商业投资组合网站HTML5模板.zip

    白色简洁风格的商业投资组合网站HTML5模板.zip

    在线式缠绕膜机自动覆膜缠绕机sw16全套技术资料100%好用.zip

    在线式缠绕膜机自动覆膜缠绕机sw16全套技术资料100%好用.zip

    (176109030)基于ESO的永磁同步电机无感FOC1.采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息

    基于ESO的永磁同步电机无感FOC 1.采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息,从而实现无位置传感器控制; 2.提供算法对应的参考文献和仿真模型。 购买赠送PMSM控制相关电子资料。 仿真模型纯手工搭建,不是从网络上复制得到。 仿真模型仅供学习参考。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    白色简洁风格的酒店展示及预订企业网站源码下载.zip

    白色简洁风格的酒店展示及预订企业网站源码下载.zip

    白色简洁风格的享受旅行导航指南整站网站源码下载.zip

    白色简洁风格的享受旅行导航指南整站网站源码下载.zip

    白色简洁风格的照片浏览切换源码下载.rar

    白色简洁风格的照片浏览切换源码下载.rar

    白色简洁风格的女装商城整站网站源码下载.zip

    白色简洁风格的女装商城整站网站源码下载.zip

    EnvironmentError.md

    EnvironmentError.md

    白色简洁风格的举重锻炼健身企业网站模板.zip

    白色简洁风格的举重锻炼健身企业网站模板.zip

    html+css+js网页设计 美食 家美食1个页面

    预览地址:https://blog.csdn.net/qq_42431718/article/details/144758683 html+css+js网页设计 美食 家美食1个页面

    白色简洁风格的室内家具展示企业网站源码下载.zip

    白色简洁风格的室内家具展示企业网站源码下载.zip

    白色简洁风格的婚礼活动展示信息源码下载.zip

    白色简洁风格的婚礼活动展示信息源码下载.zip

    Python绘制圣诞树:文本和图形实现

    内容概要:本文详细介绍了使用Python绘制圣诞树的方法,包括简单的文本圣诞树、使用Turtle库绘制复杂图形圣诞树,以及添加装饰和动态效果的高级应用。文章通过代码示例和详细的解释,逐步展示了如何实现不同风格的圣诞树。 适合人群:Python初学者,特别是对图形编程感兴趣的读者。 使用场景及目标:① 学习如何使用Python的字符串操作和循环结构绘制文本圣诞树;② 掌握Turtle库的基本用法,绘制复杂的图形圣诞树;③ 添加装饰和动态效果,提升节日氛围。 阅读建议:建议读者跟随代码示例进行实践,结合注释和解释,更好地理解和掌握每个步骤的实现方法。

    白色简洁风格的宴席精致餐饮整站网站源码下载.zip

    白色简洁风格的宴席精致餐饮整站网站源码下载.zip

    基于STM32f103的红外测温仪程序(测温模块MLX90614,芯片GY906)

    采用STM32F103系列作为主控,利用MLX90614采集温度,配以OLED显示以及flash存储数据

    html渲染器,粘贴html代码到这个渲染器即可渲染出对应的效果

    html渲染器,粘贴html代码到这个渲染器即可渲染出对应的效果

    在线教育平台:课程管理与学习分析

    随着学业负担的日益加重,越来越多的学生选择通过家教、自学或参加补习班来加强课外学习。然而,家教费用高昂,自学效率低下且难以及时解决疑难问题,而补习班则受限于时间和地点,灵活性不足。此外,国家政策也不鼓励校外补习。鉴于网络技术的成熟和各类在线平台的兴起,开发一个专业的在线辅助学习网站对于辅助学生的课外学习显得尤为重要。 本在线教育系统基于Vue.js构建,采用B/S架构设计,后端语言为Java,数据库使用MySQL。通过整合Vue.js技术,系统界面更加丰富和友好。系统主要面向课程购买用户,涉及的角色包括管理员、学生和教师。学生可以注册登录后浏览课程视频、收藏课程、留言并购买课程,同时实现订单管理。管理员负责管理学生信息、课程信息、发布班级和管理章节等。教师则可以管理课程订单、课程内容和章节。该系统允许学生利用碎片时间自主学习,具有很高的灵活性,对于难以理解的课程可以反复学习并在线提问,极大地促进了学生的学习。

Global site tag (gtag.js) - Google Analytics