`
mywebcode
  • 浏览: 1003531 次
文章分类
社区版块
存档分类
最新评论

jsp课程(9)---简单标签

 
阅读更多

简单标签

由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。实现SimpleTag接口的标签通常称为简单标签。简单标签共定义了5个方法:
setJspContext方法
setParent和getParent方法
setJspBody方法
doTag方法


SimpleTag方法介绍

setJspContext方法
用于把JSP页面的pageContext对象传递给标签处理器对象
setParent方法
用于把父标签处理器对象传递给当前标签处理器对象
getParent方法
用于获得当前标签的父标签处理器对象
setJspBody方法
用于把代表标签体的JspFragment对象传递给标签处理器对象
doTag方法
用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。

SimpleTag接口方法的执行顺序

当web容器开始执行标签时,会调用如下方法完成标签的初始化
WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。
WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。
如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。
如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。
执行标签时:
容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。

JspFragment类

javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素。

WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象。JspFragment类中只定义了两个方法,如下所示:

getJspContext方法
用于返回代表调用页面的JspContext对象.

public abstract void invoke(java.io.Writerout)
用于执行JspFragment对象所代表的JSP代码片段
参数out用于指定将JspFragment对象的执行结果写入到哪个输出流对象中,如果传递给参数out的值为null,则将执行结果写入到JspContext.getOut()方法返回的输出流对象中。(简而言之,可以理解为写给浏览器)

invoke方法详解

JspFragment.invoke方法是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。例如:
在标签处理器中如果没有调用JspFragment.invoke方法,其结果就相当于忽略标签体内容;
在标签处理器中重复调用JspFragment.invoke方法,则标签体内容将会被重复执行;
若想在标签处理器中修改标签体内容,只需在调用invoke方法时指定一个可取出结果数据的输出流对象(例如StringWriter),让标签体的执行结果输出到该输出流对象中,然后从该输出流对象中取出数据进行修改后再输出到目标设备,即可达到修改标签体的目的。

开发带属性的标签

自定义标签可以定义一个或多个属性,这样,在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提高标签的灵活性和复用性。

要想让一个自定义标签具有属性,通常需要完成两个任务:
在标签处理器中编写每个属性对应的setter方法
在TLD文件中描术标签的属性

为自定义标签定义属性时,每个属性都必须按照JavaBean的属性命名方式,在标签处理器中定义属性名对应的setter方法,用来接收JSP页面调用自定义标签时传递进来的属性值。 例如属性url,在标签处理器类中就要定义相应的setUrl(String url)方法。

在标签处理器中定义相应的set方法后,JSP引擎在解析执行开始标签前,也就是调用doStartTag方法前,会调用set属性方法,为标签设置属性。

在TLD中描述标签属性 attribute

<tag>元素的<attribute>子元素用于描述自定义
标签的一个属性,自定义标签所具有的每个属性
都要对应一个<attribute>元素 。

<attribute>
<description>description</description>
<name>aaaa</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>ObjectType</type>

</attribute>

打包自定义标签库

把自定义的标签打到一个jar包中,就是要把标签处理类的字节码和标签库描述文件按照一定的存放方式添加到一个jar包中。具体做法如下。
把标签处理类字节码和标签库描述文件按如下所示的结构组织。

使用jar命令来创建jar文件: jar cvf mytaglib_0.9.jar META-INF com
完成这两个步骤之后,一个自定义标签库jar包就打好了,可以把它添加到任何想使用这个标签库的Web应用程序的WEB-INF/lib目录下使用了。

分享到:
评论

相关推荐

    学生信息管理系统 JSP课程设计(内含完整源码和设计说明手册)

    学生成绩管理系统JSP课程设计 可实现学生和老师两个端的登录;学生个人信息修改、密码修改、个人成绩查询;教师个人信息修改、密码修改、成绩录入与修改、任课管理、学生管理......等功能 运用技术: 1、前端:...

    javaweb课程设计基础知识+教程+课件

    javaweb课程设计基础知识+教程+课件,涵盖: 适合人群:大学生、毕业生、各在职人员需要系统补充基础的人员 ---JSTL_Core.ppt ---_MySQL安装图解.doc ---_Servlet过滤器.ppt ...--- 标签与简单标签ppt

    servlet_jsp_course:servlet jsp课程项目源码及教案

    jdk环境为1.8,服务器为tomcat7二,第三方库排序第三方组件名称备注1个JSTL JSP标准标签库2个jsp smartupload简单强大的上传类库,本项目有示例3 unit单元测试类库4 fastjson json类库5 6三,明细1,请求头信息2,...

    jsp基于WEB操作系统课程教学网站的设计与实现(源代码+论文).rar.tar.gz

    JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其...

    [其他类别]分页 QQ菜单 jsp标签_noka3.9.rar

    ssm整合开发,小程序毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统...

    互联网创意产品众筹平台

    『课程目录』: ├─众筹项目-第01天《Atcrowdfunding》3 n7 ]2 w M, M1 ^ ^& P │ ├─代码 - G( G, ]4 n, n! y3 k! o │ ├─笔记 │ └─视频# w6 }: r+ B& @" Q& \' \! J │ 2. 互联网金融介绍 │ 3. 众筹介绍 ...

    基于JSP和MySQL实现的易买网电商网站设计.zip

    资源包含文件:课程论文报告word+项目源码+项目截图 首页需要展示商品分类、热门标签、导航、特价热销商品信息以及公共新闻动态,详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/126779524

    学生信息管理系统java课程设计(含源代码)(1).doc

    " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义一个滚动...

    JSP页面中如何用select标签实现级联

    举个简单的例子,拿教务系统来说,我们要查询教学计划信息,查询条件是入学批次、学生层次(专升本、高升专)、专业、课程。 它们之间有什么级联关系呢?入学批次影响学生层次(某个入学批次可能只有专升本或者高升...

    学生信息管理系统java课程设计报告含源代码.doc

    " "a " " " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义...

    java-ee电子商城系统课程设计.doc

    青 岛 工 学 院 Java EE开发与应用课程设计报告 电子商城系统 组长 xxxxxxx学号 xxxxxxxxxxxxx 组员 xxxxxxx 学号 xxxxxxxxxxxxxx 组员 xxxxxxx 学号 xxxxxxxxxxxxxx 指导教师 ________ xxxxxxxxx___________ 学 院 ...

    tomato_land:jsp+jstl+mysql实现的简单论坛

    这是一个简单论坛,修改自:() 的博客项目,作为课程设计使用 主要修改了前端页面的样式,后台代码略微改动,其实也没改什么,很多功能都没有完全实现 去掉了标签功能 精简后留下很多冗余代码和脚手架,没什么时间就...

    学生信息管理系统java课程设计(含源代码).doc

    " "a " " " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义...

    源码基于JSP的内容管理系统(hibernate3+struts2+spring2).rar

    它提供了丰富的标签库和验证功能,使得开发动态网页变得更加简单。同时,Struts2还支持国际化,可以方便地实现多语言切换。Spring2作为一个轻量级的容器框架,负责管理对象的生命周期和依赖关系。它采用了IoC(控制...

    基于javaweb+ssm+redis+elk+layui+jsp的全栈学习的博客项目源码+数据库+说明.zip

    2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 # 项目...

    [其他类别]Noka tag 软件标签 v3.0_noka3.9.rar

    ssm整合开发,小程序毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统...

    [其他类别]网页中文本框自校验的标签_input.rar

    ssm整合开发,小程序毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统...

    基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台

    开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。现在几乎只要软件开发项目,越来越多的公司采用富客户端技术,由于extjs过于宠大,及学习成本较高,更...

    学生信息管理系统java课程设计.doc

    " "a " " " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义...

    学生信息管理系统java课程设计源代码.doc

    " "a " " " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义...

Global site tag (gtag.js) - Google Analytics