技术标签: JAVA Java 脚本 详谈JavaWeb JSP jsp Jsp J2EE 详谈jsp java web Web WEB setter
1. 简单标签简介
由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。实现SimpleTag接口的标签通常称为简单标签。简单标签共定义了5个方法:
• setJspContext方法
用于把JSP页面的pageContext对象传递给标签处理器对象
• setParent方法
用于把父标签处理器对象传递给当前标签处理器对象
• getParent方法
用于获得当前标签的父标签处理器对象
• setJspBody方法
用于把代表标签体的JspFragment对象传递给标签处理器对象
• doTag方法
用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。
2. 执行相关
SimpleTag接口方法的执行顺序
当web容器开始执行标签时,会调用如下方法完成标签的初始化
– WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。
– WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。
– 如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。
– 如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。
• 执行标签时:
– 容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。
• javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素。
• WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象。JspFragment类中只定义了两个方法,如下所示:
JspFragment类
• getJspContext方法
– 用于返回代表调用页面的JspContext对象.
• public abstract void invoke(java.io.Writer out)
用于执行JspFragment对象所代表的JSP代码片段参数out用于指定将JspFragment对象的执行结果写入到哪个输出流对象中,如果传递给参数out的值为null,则将执行结果写入到JspContext.getOut()方法返回的输出流对象中。(简而言之,可以理解为写给浏览器)
JspFragment.invoke方法是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。例如:
– 在标签处理器中如果没有调用JspFragment.invoke方法,其结果就相当于忽略标签体内容;
– 在标签处理器中重复调用JspFragment.invoke方法,则标签体内容将会被重复执行;
– 若想在标签处理器中修改标签体内容,只需在调用invoke方法时指定一个可取出结果数据的输出流对象(例如StringWriter),让标签体的执行结果输出到该输出流对象中,然后从该输出流对象中取出数据进行修改后再输出到目标设备,即可达到修改标签体的目的。
注意:
1.标签后内容不输出(隐藏标签后内容)时,简单标签与传统标签有点不同,自定义的隐藏标签不能放在jsp的任何位置,只能在body标签内;而传统标签却可以。
2.
3.开发带属性的标签
自定义标签可以定义一个或多个属性,这样,在JSP页面中应用自定义标签时就可以设置这些属性的值,通过这些属性为标签处理器传递参数信息,从而提高标签的灵活性和复用性。
• 要想让一个自定义标签具有属性,通常需要完成两个任务:
– 在标签处理器中编写每个属性对应的setter方法
– 在TLD文件中描术标签的属性
• 为自定义标签定义属性时,每个属性都必须按照JavaBean的属性命名方式,在标签处理器中定义属性名对应的setter方法,用来接收JSP页面调用自定义标签时传递进来的属性值。 例如属性url,在标签处理器类中就要定义相应的setUrl(String url)方法。
• 在标签处理器中定义相应的set方法后,JSP引擎在解析执行开始标签前,也就是调用doStartTag方法前,会调用set属性方法,为标签设置属性。
在TLD中描述标签属性 attribute
元素名 |
是否必须指定 |
描 述 |
description |
否 |
用于指定属性的描述信息。 |
name |
是 |
用于指定属性的名称。属性名称是大小写敏感的,并且不能以jsp、_jsp、java和sun开头。 |
required |
否 |
用于指定在JSP页面中调用自定义标签时是否必须设置这个属性。其取值包括true和false,默认值为false,true表示必须设置,否则可以设置也可以不设置该属性。 |
rtexprvalue |
否 |
rtexprvalue是runtime expression value(运行时表达式)的英文简写,用于指定属性值是一个静态值或动态值。其取值包括true和false,默认值为false,false表示只能为该属性指定静态文本值,例如"123";true表示可以为该属性指定一个JSP动态元素,动态元素的结果作为属性值,例如JSP表达式<%=value %>。 |
type |
否 |
用于指定属性值的Java类型。 |
例子:
<tag>元素的<attribute>子元素用于描述自定义,标签的一个属性,自定义标签所具有的每个属性,都要对应一个<attribute>元素 。
<attribute>
<description>description</description>
<name>aaaa</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>ObjectType</type>
</attribute>
jbpm 和 drools介绍 本文讨论了一项新功能,该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装,设置和使用此功能之前,本文讨论了一些以前的概念,需要进一步理解才能进一步使用。 因此,本文分为以下几节: 安全管理提供者和功能 安装与设定 用法 笔记: 版本...
好记性不如烂笔头,刚开始学习TensorFlow,为了方便自己,同时为了帮助其他人更好的学习,我就简单的把自己的学习历程记录下来。TensorFlow的学习过程难免参考其他人的文章,我会尽量标注出引用文章的出处,如有遗忘,请联系我,我会尽快改正。好了,下面开始我的学习。 我们首先介绍一下TensorFlow。TensorFlow简介 TensorFlow是谷歌基于DistBelief进行研发的
bestboyxie话说DPDK~~其实dpdk中文文档太少了,好多大神都不愿意分享,所以我如果不写对不起谢大神名号啦~~DPDK = Data Plane Development Kit 数据平面开发套件,说白了就是做数据通讯的SDK。以前传统的数据平面实现主要是以一下几种形态出现;1、早期linux内核转发;使用linux内核协议栈实现二三层转发。使用netfite
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?
作者:wang.lan摘要:本篇文章主要讲解jmeter性能测试工具在生成测试报告方面一直有所欠缺,但是JMeter在3.0以后解决了这个问题.JMeter3.0以后引入了Dashboard Report,用于生成HTML页面格式图形化报告的扩展模块,但是请大家注意一个问题JMeter3.0直接生成报告会出现中文乱码,建议大家使用3.1之后的版本,我这里使用的是5.1.1。一、前提1、将已调试成功...
详细图解与命令记录我用dbimport还原 与dbexport 备份informix数据库,已经成功运行。
为什么80%的码农都做不了架构师?>>> ...
介绍RHEL 8 默认发布的MySQL版本8.0,它具有以下新功能:1. 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 带来了更好的性能**2. NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。3
QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上对程序员来说都是必懂知识点。下面我来一一解释一下。QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。每秒的响应请求数,也即是最大吞吐能力。TPSTransactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向
【转载来的文章:如有侵权,请联系我!我将马上删除!】首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使用微软的caffe-windows。之前很多人是用的微软的caffe配置,本教程真不是。适用平台64位 windows 10、64位 windows 7(我第一次安装配置的是win...
大家都知道HTML5通过Video或者Audio标签的src属性可以直接播放网络路径的视频或者音频,IOS对于直接读取文件是没问题的,但是如果需要输出数据的方式读取就有问题,是打不开文件的,为了完美支持html5的视频播放,必须支持byte-range请求。因为html5播放视频之前会发送一个只需文件少数字节的请求,确认服务端是否支持byte-range请求,支持才会继续发送请求剩余的文件数据。
文章目录1. 定义2. 搜索3. 插入4. 删除1. 定义二叉搜索树(Binary Search Tree, BST)又称为“二叉查找树”,它是一种二叉树,具有以下特点:① 若它的左子树不为空,则该左子树上所有节点的值都小于根节点的值。② 若它的右子树不为空,则该右子树上所有节点的值都大于根节点的值。二叉搜索树的属性是递归的:如果我们将任何节点视为“根(root)”,则这些属性将保持为真(true)。由于二叉搜索树中的节点排序方式,按(中序)顺序遍历(左节点,然后是根节点,然后是右节点)将始终