自定义标签库
- 格式:doc
- 大小:83.50 KB
- 文档页数:13
Word_VBA-增加自定义标签的操作说明1.在word2007中显示“开发工具”面板”:
点击,,勾选
确定,退出。
2.进入“开发工具”界面,选择Visual Basic
在Normal路径下的Microsoft Word点击右键,
在右侧拷贝并粘贴以下代码:
Sub AddCommentsPrivate()
ments.Add Range:=Selection.Range
Selection.TypeText Text:=Chr(13) & Chr(10) & "业务部:" & Chr(13) & Chr(10) & "撰写人:" & Chr(13) & Chr(10) & "添加时间:" & Now()
End Sub
保存并关闭该编辑工具。
3.点击,
在“自定义”命令下拉列表中选择“宏”
将左侧的宏,含有名为“AddCommentsPrivate”子程序的选项选中,并添加到右侧,确定。
而后左上角的快速访问工具栏中增加了一个按键,以后直接点击该按键即可增加自定义标签。
该功能可以在所有word文件中进行增加标签的操作。
备注说明:
以后为了修改,可以在“开发面板”进入下面界面:
直接修改相关代码,并保存即可。
Chr(13):回车符
Chr(10):换行符
&:字符相加符号。
一、概述JSP中有一块重要的技术:自定义标签(Custom Tag),最近这几天在学习Struts的时候发现Struts中使用了很多自定义标签,如html、bean等。
所以我就做了个简单的试验,学习一下这种技术。
首先介绍一下这种技术吧!1.优点:取代了JSP中的Java程序,并且可以重复使用,方便不熟悉Java编程的网页设计人员。
2.开发流程:(1)编写JSP,在JSP中使用自定义标签。
(2)在web.xml中指定JSP中使用的标签的.tld(标签库描述文件)文件的位置。
(3) .tld文件中指定标签使用的类。
3. 自定义标签的分类:(1)简单标签:如< mytag:helloworld/>(2)带属性标签:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>(3)带标签体的标签:在自定义标签的起始和结束标签之间的部分为标签体(Body)。
Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。
<mytag:che ckinput dbname = “<myBean.getDBName()>”><mytag:log message=”Table Name”><mytag:checkinput />(4)可以被Script使用的标签:定义了id和type属性的标签可以被标签后面的Scriptlet使用。
<mytag:connection id = “oraDB” type = “DataSource” name = “Oracle”><%oraDB.getConnection(); %>4.接口及其他实际上,自定义标签的处理类实现了Tag Handler对象。
JSP技术在javax.servlet.jsp.tagext中提供了多个Tag Handler 接口,JSP1.2中定义了Tag、BodyTag、IterationTag接口,在JSP2.0中新增了SimpleTag接口。
一、选择题1,修改服务端口时,需要修改的文件是________。
A. web.xmlB. Server.xmlC. config.xmlD. bin.xml2,下列哪种开发语言是弱类型语言_______。
A. C/C++B.JSPC. JavaD. JavaScript3,在JSP中,要定义一个方法,需要用到以下________元素。
A. <%= %>B. <% %>C. <%! %>D. <%@ %>4,JSP页面经过编译之后,将创建一个________。
A. appletB. servletC. applicationD. exe文件5,在Java EE中的MVC设计模式中,________ 负责接受客户端的请求数据A.JavaBeanB.JSPC.ServletD.HTML6,URL是Internet中资源的命名机制,URL由三部分构成________。
A)协议、主机DNS名或IP地址和文件名B)主机、DNS名或IP地址和文件名、协议C)协议、文件名、主机名D)协议、文件名、IP地址7,下列设置颜色的方法中不正确的是________A)<body bgcolor=”red”>B)<body bgcolor=”yellow”>C)<body bgcolor=”#FF0000”>D)<body bgcolor=”#HH00FF”>8,<title></title>标记在<head></head>标记之间,<title></title>标记之间的内容将显示到________A)浏览器的页面上部B)浏览器的标题栏上C)浏览器的状态栏中D)浏览器的页面下部9,<p align=”段落对齐方式”>标记中,align属性为段落文字的对齐方式,不能取的值为________。
利用Word制作标签在日常工作和生活中,我们经常需要使用各种标签,如文件标签、物品标签、邮寄标签等。
利用Word软件可以轻松制作出符合自己需求的标签。
本文将介绍如何使用Word制作标签,帮助您提高工作效率和美化标签的外观。
一、准备工作在开始制作标签之前,首先需要明确标签的尺寸、形状和样式。
一般情况下,标签的尺寸和形状可以根据实际需要进行设置。
Word提供了多种预设的标签尺寸和形状供选择,也可以自定义标签尺寸。
另外,还可以选择合适的字体、字号、颜色和样式,以便使标签更加美观和易识别。
二、选择标签尺寸和形状在Word软件中,选择“邮件ings”选项卡,点击“标签”的按钮,弹出一个标签对话框。
在对话框中,可以选择各种预设的标签厂商和标签型号。
如果没有合适的预设选项,可以点击“新建标签”按钮,自定义标签尺寸和形状。
三、设置标签内容在标签对话框中,可以设置标签的内容。
如果需要批量制作相同内容的标签,可以在“地址”栏中输入需要的文本内容。
这里可以利用Word的文本编辑功能,包括字体、字号、加粗、倾斜、下划线等设置,调整标签内容的样式。
标签对话框还提供了对齐方式、距离等设置,可以根据实际需求进行调整。
四、打印标签设置好标签内容后,点击“打印”按钮,弹出打印对话框。
在对话框中,可以选择打印机和打印设置,如纸张大小、打印方向等。
点击“打印”按钮,即可开始打印标签。
五、其他技巧和注意事项1. 标签打印时,可以选用特殊的标签纸,以保证打印质量和效果。
2. 如果需要打印不同内容的标签,可以在Word中创建数据源文件,以便批量打印不同内容的标签。
3. 在打印过程中,可以预览每个标签的效果,以确保打印正确无误。
4. 可以保存标签模板,以便今后再次使用或修改。
总结:通过Word软件,我们可以轻松制作出符合需求的标签,提高工作效率和美化标签的外观。
根据实际需要选择标签尺寸和形状,设置标签内容并根据需求进行调整,最后通过打印完成标签制作。
自定义兴趣标签15字
1、喜欢录视频、拍照片、记录生活。
2、喜欢看番剧、喜欢看电影、电视剧。
3、喜欢把看过的电影番剧之类的记录下来。
4、喜欢用xx浏览器搜所需所想了解事物人。
5、喜欢用网站下载小说到xx有声几倍速阅读。
6、喜欢整理自己看过的所有东西书籍。
7、我爱读书爱,我希望与书相伴到永远!
8、我的爱好是做奥数,这是个很特殊的爱好。
9、我认为只有“热爱”才是最好的老师。
10、人生本来就是一场即兴演出,我喜欢这句话。
11、我喜欢将每段旅程,变成我的舞台。
12、我喜欢看书,书是精神的食粮,给我以知识。
13、我喜欢看书,书给我乐趣,陪伴着我度过童年。
14、爱好就是你的方向,你的兴趣就是你的资本。
15、我的爱好和别的同学不一样,是制作电脑网页。
16、每一个人都有一个爱好,我的是打乒乓球。
17、因为我爱画画,所以我画画的历史也比较“悠久。
”
18、我爱读书,爱它文字的缠绵与诗情画意。
19、我爱读书爱,爱它丰富的内涵和哲理。
20、我爱读书爱,爱它用含蓄的语言,教会我怎样做人。
JSTL标签库引入:/harderxin/article/details/7090501自定义标签:我们可以自己去定义一些jsp标签。
自定义包含两个:java类,tld文件(标签的描述文件)标签库JSTL(JSP Standard Tag Library):因为在jsp中使用java代码去控制页面的显示(即:用小段的<%%>),可读性很差,这样后期维护会比较麻烦,所以引入了Java标签库。
n 常用的JSTL标签库:n 核心标签库:/jsp/jstl/core包含Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
n 格式化标签库:/jsp/jstl/fmt用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
n XML 标签库:/jsp/jstl/xml用来访问XML 文件的工作,这是JSTL 标签库的一个特点。
n 函数标签库:/jsp/jstl/functions用来读取已经定义的某个函数。
n 数据库标签库:/jsp/jstl/sql可以做访问数据库的工作。
J2EE 1.4:使用Java标签库首先要在项目中引入jstl.jar和standard.jar两个jar包,MyEclipse 中有这个功能;Standard.jar中有tld文件(是一个xml文档),这是关于JSTL标签的说明文件,对应的java 类就是加载这些说明,然后对我们写的JSTL标签进行解析处理。
JAVAEE 5.0:javaee5.0类库已经自带了jstl相关的jar包。
不需要再添加,可以直接使用jstl。
其次要在页面中加入这样一个标签头[gjw1]<%@ taglib prefix="c"uri="/jsp/jstl/core" %><c:out>标签用于显示变量数据。
<c:out value="${a}" default="空"[c2]escapeXml="true" [c3]></c:out><c:set>标签的常用属性(将值存储到作用域或为JavaBean 中的变量属性赋值):示例:<c:forEach items="${li}" var="str" begin="0" end="9" step="1" varStatus="ind"><b>${fn:substring(str,1,fn:length(str))}</b><c:if test="${(ind.index+1)%3==0}"><br></c:if></c:forEach><c:forEach items='${fn:split("a,b,c",",")}'[gjw17]var="cc" >${cc} <br></c:forEach>扩展知识点:JSTL的格式化标签库。
JSP扩展制作自定义分页标签●分页标签:当查询数据的记录很多的时候,我们通过控制每页显示的记录数来对页面显示友好性进行控制。
●显示效果:当第一次进入到该页面的时候,显示为首页记录,比如每页显示5条记录。
单击下一页图片时,可以翻转到下一页5条记录。
也操作的过程中,也可以直接跳转到最后一页和第一页。
●编码思路:在该SQL语句中,关键的代码是红色代码部分,其中top5是指每页可以查询的记录条数,而主查询中的not in 是指排除子查询中的记录条数。
如果每次进行查询时,都可以有规律的对子查询中的记录进行排除查询,那么我们就可以很快得到下一页,上一页,首页和尾页的5条记录了。
注意:order by 非常重要,不管是在子查询还是在主查询中,都必须对记录进行排序,或则,当页数发生改变时,不能准确定位到下一页的5条记录。
代码实现思路利用自定义标签实现分页标签的全部思路。
分页标签要定义的几个部分:PageTag.java:TagSupport的实现子类。
在该类的doStartTag()方法中,我们要实现对页面分页标签的所有涉及参数初始值的设效果如下:其中,只要我们每次提交的表单是指向同一个查询语句,我们就在页面动态的将计算好的页面编号传递给表单提交对象。
✓标签已经完成,结合前面说明的数据库查询语句,我们就可以进行分页标签的使用了。
●实现环节:(全部代码)✓第一步:(1)建立一个标签文件:PageTag.java,实现主要的分页数据计算,和页面分页样式的显示功能。
所有页面可以直接引用该分页标签。
该类实现TagSupport的继承。
第二步:写完标签类后,需要为该标签类申明好配置文件。
第三步:分页标签写完以后,就可以对查询的代码进行分页处理了。
我们分别创建一段标准的查询代码,并让其查询结果显示在一JSP页面上,这个部分一共由1个控制器:QueryServlet.java,1一个数据持久对象JavaBean:Employee.java和1个数据连接工厂类:DBCon.java,一对业务逻辑实现接口QueryEmployee.java和QueryEmployeeImp.java (1)数据库连接类DBCon.java(2)数据库持久化对象:JavaBean(3)声明业务逻辑接口和接口实现类:。
.net导出excel自定义模板内容标签[]本文主要介绍了在C#语言中通过使用.NET导出Excel 自定义模板内容标签[]的方法。
在业务工作中,经常需要导出数据到Excel来进行数据分析和统计。
而Excel表格的排版和布局对数据展示的效果至关重要。
为了满足不同业务场景的需求,我们需要动态地生成Excel表格。
而使用.NET导出Excel自定义模板则可以满足这个需求。
首先,我们需要准备一个Excel模板文件。
在这个模板文件中,我们可以设定表格的样式、格式和排版。
然后在C#语言中,我们通过使用Excel模板,将数据源中的数据填充到模板文件中。
而在模板文件中,需要指定某些标记,用来表示数据应该填充的位置和格式。
这些标记就是本文所说的内容标签[]。
下面我们将用一个简单的示例来说明:1. 创建一个Excel模板,并在特定位置添加模板标记[]我们可以在Excel模板文件中创建一个表格,并在需要填充数据的单元格位置添加一些标记符号。
例如,在A2单元格中添加[],该单元格就作为数据填充的位置。
2. 加载Excel模板文件在C#代码中,我们可以使用Excel操作库,如NPOI、EPPlus等来操作Excel文件。
其中,我们使用EPPlus来操作Excel文件,如下:```C# using OfficeOpenXml; using System.IO;using System.Collections.Generic;// 加载Excel模板文件 using (var stream = new FileStream("Template.xlsx", FileMode.Open, FileAccess.Read)) { using (var package = new ExcelPackage(stream)) { // 获得Excel工作簿 var workbook = package.Workbook; // 获得Excel工作表 var worksheet = workbook.Worksheets[0];// 定义数据源 var data = newList<string> { "Tom", "Kate", "Jerry" };// 填充数据到Excel模板中worksheet.Cells["A2"].Value = data[0]; } } ```3. 填充数据源中的数据到Excel模板中在代码中,我们将数据源data中的第一个元素填充到Excel模板A2单元格中。
[JSP]⾃定义标签库taglib⾃定义标签的步骤⼤概有三步:1.继承javax.servlet.jsp.tagext.*下提供的⼏个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。
2.在tld⽂件中配置标签库信息,以及标签与实现类的映射。
3.在jsp⽂件中引⽤⾃定义标签。
标签APITag接⼝doEndTag():执⾏当前标签实例的结束标签。
在doStartTag()执⾏后调⽤doStartTag():执⾏当前标签实例的开始标签。
getParent():获取当前标签的⽗标签release():释放当前标签的状态setPageContext(PageContext):设置当前标签的页⾯setParent(Tag):设置当前标签的⽗标签TagSupport类TagSupport类是实现Tag接⼝的⼀个模板类。
它实现了Tag接⼝的⼤部分⽅法,⽤户只需要实现doStartTag()和doEndTag()⽅法。
SimpleTag接⼝(JSP2.0)JSP2.0的接⼝,⽐Tag接⼝更简单。
doTag():执⾏当前标签的所有处理任务。
getParent():获取当前标签的⽗标签。
setJspBody():提供当前标签的实体为⼀个JspFragment对象setJspContext(JspContext):设置JSP页⾯的setParent(JspTag):设置当前标签的⽗标签。
SimpleTagSupport类(JSP2.0)SimpleTagSupport类是实现SimpleTag接⼝的⼀个模板类。
它实现了SimpleTag接⼝的⼤部分⽅法,⽤户只需要实现doTag()⽅法。
tld标签库描述⽂件tld全称为Tag Library Description,即标签库描述⽂件。
tld⽂件⽤来配置标签库的基本信息。
taglib主要元素taglib.tld指明推荐使⽤的prefix。
概括地说,自定义标签编写包括四个步骤:1.编写标签处理类2.编写标签描述tld文件3.配置web.xml文件4.在jsp页面中声明并调用标签编写标签处理类1)放在一个包中,即package **;2)导入必要的包:import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.*等。
3)在编译标签处理类时,须将jsp-api.jar(位于tomcat的common\lib 目录下)文件加入到classpath中标签描述文件tld文件由一系列元素组成,涉及的元素很多,其中必需的元素有:<taglib>:根元素<tlib-version>:标签库版本号<uri>:标签库唯一uri的元素<tag>:描述每个标签处理器及属性的元素以下是<tag>标签下的元素:<name>:与标签库名字前缀一起使用的标签名字<tag-class>:标签处理类的名称,包括包的名字<body-content>:描述标签处理器使用标签体的方式<attribute>:描述相关属性信息配置web.xml文件作用:声明标签库引用<taglib><taglib-uri>与tld文件中的uri一致</taglib-uri><taglib-location>tld文件的路径</taglib-location></taglib>在jsp页面中声明并调用1)<%@taglib uri=”与tld文件中的uri一致”prefix=”使用时的前缀名字”%>2)使用格式:<前缀名字:tag名字相关属性赋值>程序举例(实现简单的文本框)java程序:package tags;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;public class Textbox extends TagSupport{private String lable="";private String name="";private String value="";private String maxlength="20";public void setLable(String lable){ble=lable;}public void setName(String name){=name;}public void setValue(String value){this.value=value;}public void setMaxlength(String maxlength){this.maxlength=maxlength;}public int doStartTag(){try{JspWriter out=pageContext.getOut();out.print("<label>"+lable+"</label>");out.println("<input value='"+value+"' name='"+name+"' size='"+maxlength+"' id='textbox' >"); }catch(Exception e){System.out.println("failed");}return EVAL_BODY_INCLUDE;}}tld文件:<?xml version="1.0" encoding="ISO-8859-1" ?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"version="2.0"><tlib-version>1.0</tlib-version><uri>/mytag</uri><tag><name>textbox</name><tag-class>tags.Textbox</tag-class><body-content>empty</body-content><attribute><name>lable</name><required>false</required></attribute><attribute><name>name</name><required>true</required></attribute><attribute><name>value</name><required>true</required></attribute><attribute><name>maxlength</name><required>false</required></attribute></tag></taglib>web文件<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee web-app_2_4.xsd"version="2.4"><taglib><taglib-uri>/mytag</taglib-uri><taglib-location>/WEB-INF/tlds/tag.tld</taglib-location></taglib></web-app>jsp页面<%@page contentType="text/html;charset=gb2312"%><%@taglib uri="/mytag" prefix="my"%><html><head><title>jsp自定义标签的简单使用实例</title></head><body><my:textbox lable="用户名:" name="username" value="" /><br><my:textbox lable="密 码:" name="username" value="" /> </body></html>。
thinkphp自定义模板标签thinkphp内置的foreach和include等模板标签使用是非常方便的,但是内置的那些标签只能满足常用功能,个性化的功能就需要我们自己编写自定义模板标签了。
thinkphp的模板标签放在ThinkPHP/Library/Think/Template/TagLib目录下,其中Cx.class.php就是foreach、if等标签定义的地方。
实现自定义模板标签最简单的方法就是直接在Cx.class.php文件中增加即可,但为了方便以后的迁移升级;本着尽量不改变原框架文件的原则,建议自定义新的标签文件。
1:修改Application/Common/conf/config.php增加如下一条配置;1 'TAGLIB_BUILD_IN' => 'Cx,Common\Tag\My', //加载自定义标签cx是内置的标签库,Common\Tag\My是自定义的标签库位置;示例是在Application/Common/Tag目录下建的My.class.php2:新建My.class.php文件命名空间要和配置项中填写的一致;如下图;闭合标签就是单标签;比如a标签、img标签等等;非闭合标签就是对标签;比如div、p标签等等;这里以自定义的ueditor和recommend标签为例;自定义的闭合标签比较适合用来引文件;自定义的对标签比较适合调取数据库的数据并前台页面遍历显示;<?phpnamespace Common\Tag;use Think\Template\TagLib;class My extends TagLib {protected $tags=array(// 标签定义: attr 属性列表 close 是否闭合(0 或者 1 默认1) alias 标签别名 level 嵌套层次'ueditor'=> array('attr'=>'name,content','close'=>0),'recommend'=>array('attr'=>'limit','level'=>1));/***引入ueidter编辑器*@param string $tag name:表单name content:编辑器初始化后默认内容*/public function _ueditor($tag){$name=$tag['name'];$content=$tag['content'];$link=<<<php<script id="container" name="$name" type="text/plain">$content</script><script type="text/javascript" src="__PUBLIC__/static/ueditor1_4_3/u editor.config.js"></script><script type="text/javascript" src="__PUBLIC__/static/ueditor1_4_3/u editor.all.js"></script><script type="text/javascript">var ue = UE.getEditor('container');</script>php;return $link;}// 置顶推荐文章标签 cid为空时则抓取全部分类下的推荐文章public function _recommend($tag,$content){if(empty($tag['cid'])){$where="is_show=1 and is_delete=0 and is_top=1";}else{$where='is_show=1 and is_delete=0 and is_top=1 and cid='. $tag['cid'];}$limit=$tag['limit'];// p($recommend);$php=<<<php<?php\$recommend=M('Article')->field('aid,title')->where("$where" )->limit($limit)->select();foreach (\$recommend as \$k => \$field) {\$url=U('Home/Index/article',array('aid'=>\$field['aid']));?>php;$php.=$content; //拼字符串的过程。
JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。
在概念上说,标签库是非常简单和可以重用的代码构造。
自定义标签有着丰富的特点,它们可以:1.可以通过调用页面传递的属性进行自定义;2.可以访问对于JSP页面可能的所有对象;3.可以修改由调用页面产生的响应。
4.可以相互间通信。
你可以创建并初始化一个JavaBean组件,创建一个变量引用标签中的bean,接着在其它的标签中引用该bean.5.可以在一个标签中嵌套另一个,可以在JSP页面中进行复杂的交互。
自定义标签为在JSP项目中创建易于重用的代码打开了一扇大门。
你所需要的只是标签库和它的文档说明。
通过实现接口或者继承现有的类,我们就可以开发自定义的标签。
常用的接口有:TagSupport类该类是IterationTag的缺省实现。
除了实现原有方法外,本身还增加了一些有用的其他方法和成员变量。
下表列出其中重要的几个:BodyTagSupport类该类同时继承了TagSupport类,并实现BodyTag接口。
除了前表所示方法,该类还提供了一些其它方法便于使用。
实现Tag接口所有的标签处理器都需要间接或直接的实现这个接口。
下面列出Tag接口定义的方法和常量:setPageContext()方法setPageContext()方法是一个定制标签声明周期内第一个要被调用的方法。
完整写法是:public void setPageContext(PageContext);jsp引擎会将jsp页转换时隐含创建的pageContext对象,作为参数,调用setPageContext方法。
通常的做法会将这个参数保存为本标记处理器的参数。
setParent()和getParent()方法当标签嵌套使用时,外层的标签被成为父标签,内部的被称为子标签。
完整的写法是:public void setParent(Tag);public Tag getParent();其中setParent方法对父标签对象进行设置。
而getParent方法用以获得父标签对象。
setter方法当定制标签中包含属性时,在标签处理器中有和javaBean相同的设置机制。
即每一个属性XXX,都有对应的setXXX()方法。
这些方法的调用是在setPageContext()和setParent()之后,doStartTag()之前。
(就是说所有的属性-即实例变量-必须完全赋值,因为随后的方法可能会调用到它们)doStartTag()方法该方法标志着真正的标签处理开始。
当前三阶段的方法执行完后,jsp 引擎就会调用doStartTag()方法了。
完整写法是:public int doStartTag() throws JspException;该方法给了标签处理器一个初始化计算和校验属性值合法性的机会。
如果初始化失败或属性值不合法,则抛出JspException异常,或其子类,如JspTagException。
初始化计算过后,该方法将决定是否继续对标签体进行计算。
作为结果,返回一个整数常量(EVAL_BODY_INCLUDE或SKIP_BODY),用以指示是否跳过标签体的执行。
除此之外不返回任何其它值。
doEndTag()方法执行完doStartTag()方法后,就该执行doEndTag()了。
完整写法是:public int doEndTag() throws JspException;该方法标志着真正的标签处理结束。
同样该方法将决定是否继续执行jsp文件中该标签之后的内容。
它也会返回一个整数常量(EVAL_PAGE 或SKIP_PAGE),用以指示页面后续内容是否跳过。
注意此处的范围是页,并不是转换单位。
所以计算不计算全都是针对该页而言。
release()方法最后,jsp引擎将调用release方法,当标签处理结束,标签处理器对象不再使用时。
完整写法是:public void release();注意。
一个页面内同时有多个相同标签时,jsp引擎会只会为该标签创建一个对象。
只有等该页内相同标签全部处理完了。
jsp引擎才会调用release()方法,将该标签对象从内存清理掉。
自定义标签的开发包括两个部分的开发:(1)开发标签的处理程序(java类)(2)标签描述文件(.tld文件)自定义标签的种类有许多,可以根据实际项目的需要进行编写。
但为了不重复的开发,jsp标准推出JSTL(标准标签库)。
在JSP应用程序中添加自定义标签的能力可以使工作重点放到以文档为中心的开发方式上。
可以使 Java 代码不出现在 JSP 页中,从而使这些页面更容易维护。
在创建自定义标签之前,需要创建一个标签处理程序。
标签处理程序是一个执行自定义标签操作的 Java 对象(Java类)。
在使用自定义标签时,要导入一个标签库——即一组标签/标签处理程序对,这样页面编译时才能处理你的自定义标签。
通过在 Web 部署描述符(web.xml)中声明库导入它,然后用指令taglib将它导入 JSP 页。
如果JSP容器在编译JSP文件时遇到了自定义标签,那么它就检查标签库描述符(tag library descriptor)(TLD)文件以查询相应的标签处理程序。
TLD 文件对于自定义标签处理程序,就像 Web 部署描述符对于 servlet 一样。
对正文进行操作——即对在开始和结束标签之间的内容进行操作的——标签必须实现 BodyTag 接口。
我们将称这些标签为正文标签。
我们将不对其正文操作的标签称为简单标签。
简单标签可以实现Tag接口,尽管不要求它们这样做。
要记住不对其正文操作的标签仍然有正文,只不过,它的标签处理程序不能读取这个正文。
要构建简单标签,我们需要完成以下步骤:1. 创建实现了Tag接口(准确地说是javax.servlet.jsp.tagext.Tag)的标签处理程序类。
2. 创建一个 TLD 文件。
3. 在标签处理程序 Java 类中创建属性。
4. 在 TLD 文件中定义与标签处理程序 Java 类中定义的属性对应的属性。
5. 在 TLD 文件中声明 scriptlet 变量。
6. 实现 doStartTag() 方法。
在标签处理程序类中,根据属性将值设置到 scriptlet 变量中。
在jsp1.2时代已经有标记库了,并且功能强大,但标记库的编程和调用都比较复杂,导致真正使用到WEB开发中的还是不多。
JSP2.0推出的简单标记库扩展解决了以上的问题。
简单标记库相对JSP1.2中的标记库来说,优点在于对后台程序员来说,结构更简单,实现接口更少,可以轻松实现后台程序。
JSP 2.0中加入了新的创建自制标记的API:javax.servlet.jsp.tagext.SimpleTag,该API定义了用来实现简单标记的接口。
和JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag()和doEndTag()方法,而提供了一个简单的doTag()方法。
这个方法在调用该标记时只被使用一次。
而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。
从这个方面来讲,SimpleTag可以和IterationTag达到同等的作用。
但SimpleTag的方法和处理周期要简单得多。
在SimpleTag中还有用来设置JSP内容的setJspBody()和getJspBody()方法。
Web容器会使用setJspBody()方法定义一个代表JSP内容的JspFragment对象。
实现SimpleTag标记的程序可以在doTag方法中根据需要多次调用getJspBody().invoke()方法以处理JSP内容。
自定义标签的分类:(1)不带主体和属性的简单标签:如< mytag:helloworld/>(2)不带主体但有属性的标签:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>(3)带标签体和属性的标签:在自定义标签的起始和结束标签之间的部分为标签体(Body)。
Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。
<mytag:checkinput dbname ="<myBean.getDBName()>"><mytag:log message="Table Name"><mytag:checkinput />(4使用脚本变量的标签:定义了id和type属性的标签可以被标签后面的Scriptlet使用。
<mytag:connection id = "sqlDB" type ="DataSource" name ="SQL_Server"><%sqlDB.getConnection(); %>传统的标签必须实现javax.servlet.jsp.tagext.Tag接口,在Tag接口中,主要定义的是和标签生命周期相关的方法,比如:doStartTag(),doEndTag()等。
在Tag中,可以通过PageContext对象来访问JSP页面的上下文。
结合标签的生命周期标签的处理过程:1当容器创建一个新的标签实例后,通过setPageContext()来设置标签的页面上下文。
2使用setParent方法设置这个标签的上一级标签,如果没有上一级嵌套,设置为null。
3设置标签的属性,这个属性在标签库描述文件中定义,如果没有定义属性,就不用调用此类方法。
4调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,当返回EVAL_BODY_INCLUDE时,就计算标签的Body,如果返回SKIP_BODY,就不计算标签的Body。
5调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE,当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面其他的部分;如果返回SKIP_PAGE,容器将在标签结束时停止计算JSP页面其他的部分。
6调用release方法释放标签程序占用的任何资源。
开发标签时可以有两种选择,已从是实现原始的接口,另一种是从TagSupport类继承。
14.2.1 实现Tag接口按照下面的步骤进行:1)开发标签实现类2)编写标签描述文件,tld为扩展名。
3)在Web.xml中映射标签库的使用。
4)在JSP网页中调用标签。