JSP自定义标签
jsp试题

[题型]:单选题第1题. 自定义标签的配置文件放在________A. WebRootB. libC. classesD. WEB-INF答案: D[题型]:单选题在J2EE中,重定向到另一个页面,以下()语句是正确的A. request . sendRedirect(“http :// www . svse . com . cn”);B. request . sendRedirect t();C. response . sendRedirect(“http: // www . svse . com . cn”);D. response .sendRedirect();答案: C[题型]:单选题EL表达式,${10 mod3},执行结果为:A. 10 mod 3B. 1C. 3D. null答案: B[题型]:单选题在JSP页面中,能够完成输出操作的内置对象是A. outB. responseC. requestD. config答案: A[题型]:单选题给定以下JSP代码片段,有2个客户依次浏览该JSP;且每个客户只浏览一次,第2个客户会看到浏览器显示()。
<%int x = 1; %><%!int x = 10; %>X =<%=x%>A. x=1—B. x=2C. x=10D. x=11答案: A[题型]:单选题如果只希望在多个页面间共享数据,可以使用__________作用域A. request,sessionB. application sessionC. request,applicationD. pageContext request答案: A[题型]:单选题request.setAttribute("user","svse");session.setAttribute("user","bob");使用{user}则显示A. nullB. svseC. bobD. 啥也没有答案: B[题型]:单选题考虑下面JSP文件代码片断:<HTML>< BODY>< jsp:include page=”test2.jsp”><jsp:param name=”username”value=”svse”/>< /jsp:include>< /BODY>< /HTML>以下()代码片断放置在test2.jsp中不会导致错误A. <jsp:getParamname=”username”/>B. <jsp:include param=”username”/>C. <%=request.getParameter(“username”)%>D. <%=request.getAttribute(“username”)%>答案: C[题型]:单选题—在HTTP协议中,用于发送大量数据的方法是A. getB. postC. putD. options答案: B[题型]:单选题J2EE 中,()类型的()方法用于得到会话A. HttpServletRequest、getSessionB. HttpServletResponse、newSessionC. HtttpSession、newInstanceD. HttpSession、getSession答案: A[题型]:单选题MVC中的M V C 分别用_______、_______、_____表示A. jsp servlet javabeanB. HTml javabean jspC. javabean jsp servletD. servlet html jsp答案: C看到这里了[题型]:单选题pageContext.setAttribute("user","tom");request.setAttribute("user","bob");显示"bob",则可以使用A. {request.getAttribute("user")}B. {er}C. {user}D. {er}答案: D[题型]:单选题<%String count="100";pageContext.setAttribute("cnt",count);%>Count:{t 100} 显示为—A. 100100B. 运行异常C. 200D. 没有任何显示答案: C[题型]:单选题在JSP中,只有一行代码:<%=AB%>,运行将输出A. A BB. ABC. 113D. 没有任何输出,因为表达式是错误的答案: D[题型]:单选题在J2EE中,假如HttpSession的getLastAccessTime()方法返回值为x,getCreationTime()方法返回值为y,则为x - y()A. 两个连续请求之间间隔的最长时间B. 最近的两个连续请求之间的时间间隔C. 最后使用session发送请求的时间和session创建时间的间隔D. 最后使用session发送请求的时间答案:C[题型]:单选题Jsp中有如下代码:<%Cookie c = new Cookie(“name” , “admin”);c.setMaxAge(10000);response.addCookie(c);%>以下哪句代码可以正确显示”admin”A. ${}B. ${.value}C. ${ name}D. ${name.value}答案: B[题型]:单选题以下()可用于检索session属性userid的值A. session. getAttribute(“userid”);—B. session. setAttribute(“userid”);C. request. getParameter(“userid”);D. request. getAttribute(“userid”);答案: A[题型]:单选题test.jsp文件中有如下一行代码:<jsp:useBean id=”user” scope=”__” class=”erBean”>要使user对象可以作用于整个应用程序,下划线中应添入()A. pageB. requestC. sessionD. application答案: D[题型]:单选题JSP中有三大类标签,分别是A. HTML标记JSP标记Servlet标记B. CSS标记HTML标记Javascript标记C. 动作标记脚本标记指令标记D. 指令标记脚本标记HTML标记答案: C[题型]:单选题在JSP中,只有一行代码:${1+2},运行将k输出()A. 1+2B. 3C. nullD. 没有任何输出,因为表达式是错误的答案: B[题型]:单选题下面__________方法可以返回当前请求的请求方式A. request.getAttribute()B. session.getMethod()C. request.getMethod()D. request.getRequestURI()答案: C[题型]:单选题只能够传递字符串类型数据的方式是_________A. 表单URL重写B. session对象表单C. 隐藏域setParameter方法D. 都可以答案: A[题型]:单选题某JSP中有如下代码:<%pageContext.setAttribute(“a”,”page”);request.setAttribute(“a”,”request”);session.setAttribute(“a”,”session”);application.setAttribute(“a”,”application”);%>有:${a}则显示结果为:A. pageB. requestC. sessionD. application答案: A //优先级page---->request----->session[题型]:单选题以下哪项陈述是错误的A. 在WEB项目的共享数据范围内,application是范围最广泛的B. 当我们在一个JSP页面新开窗口时,新开窗口的页面也共享session范围内的数据C. 当在JSP页面中通过指令将页面请求转发到的页面中,可以共享一个page范围内的数据D. 当用户重新打开一个浏览器窗口时,原session对象不再有效答案: C[题型]:单选题下面关于JSP作用域对象的说法错误的是A. request对象可以得到请求中的参数B. session对象可以保存用户信息C. application对象可以被多个应用共享D. 作用域范围从小到达是request、session、application答案: C[题型]:单选题以下代码能否编译通过,假如能编译通过,运行时得到什么输出结果()。
jsp自定义标签中的Function函数

jsp⾃定义标签中的Function函数在taglib中我们发现有⼀个标签叫做<function>,这次简单介绍<function>标签的基本⽤法,<function>标签可以做什么呢?它可以让我们在jsp⽤直接调⽤某个⽅法,根据⾃定义的⽅法返回指定的值,兼容jstl标签,省去了在jsp中直接使⽤<%!%>来定义⽅法体再调⽤的繁琐.如果你⽤过el语⾔的话估计会很快上⼿,其实<function>标签就是⼀个拥有⽅法体的el语⾔.注意:function所定义的⽅法必须需要是静态的,如果不是静态的话jstl是不能识别所定义的⽅法.Java代码如下:package org.lxh.taglib;import java.util.List;public class FunctionTag {public static String hello(String name) {return name;}public static Integer bbq(List list) {return list.size();}}⽅法必须静态,可以定义有返回值或者void类型的⽅法.tld:<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><tlib-version>1.0</tlib-version><short-name>my</short-name><uri></uri><function><!--EL页⾯调⽤名字--><name>hello</name><!--指定标签的处理类,指定了标签由哪个Java类来处理。
自定义标签(Custom Tag)

一、概述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接口。
JSTL

JSTL(JSP标准标签库)介绍JSTL(JSP标准标签库)介绍作者:令少爷(shaoye@)前言从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Stan dard Tag Library)的诞生。
因为工作中需要用到JSTL,但网上却苦于找不到有关JSTL的中文资料,所以就有了这篇文章。
JSTL简介JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。
JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomc at 4.x。
但是在即将推出的JSP 2.0中是作为标准支持的。
JSTL目前的最新版本为1.02,最终发布版为1.0。
JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。
标签库目前支持四种标签:标签URI前缀示例Core/jstl/corec<c:tagname ...>XML pr ocessing/jstl/xmlx<x:tagname ...>I18N capable form atting/jstl/fmtfmt<fmt:tagname ...>Database access (SQL)/jstl/sqlsql<sql:tagname ...>Core支持JSP中的一些基本的操作;XML processing支持XML文档的处理;I18N capable formatting支持对JSP页面的国际化;Database access (SQL)支持JSP对数据库的操作。
由于本人水平有限,本文仅介绍Core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。
EL语言介绍EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。
第三章 JSP标记

13
page指令的 指令的info属性 指令的 属性
该属性为JSP页面准备一个字符串,属性值是 页面准备一个字符串, 该属性为 页面准备一个字符串 某个字符串, 某个字符串,如: <%@ page info = “How do you do ?” %> 在页面中使用getServletInfo()方法获取 方法获取info属 在页面中使用 方法获取 属 性的值。 性的值。
20
b.jsp:
<%@ page contentType="text/html;charset=GB2312" %> <FORM action="" method=post> <INPUT type="text" name="txt" > <input type="submit" value="提交 提交"> 提交 </FORM> <% String s = request.getParameter("txt"); if (s != null) { try { double number = Integer.parseInt(s); out.print("<P>"+Math.sqrt(number)); } catch(NumberFormatException e) { out.print("<P>"+"请输入数字字符 请输入数字字符"); 请输入数字字符 } } %>
在 jsp文件中 , 下面包中的类会自动导入, jsp 文件中, 下面包中的类会自动导入 , 文件中 所以不必再显式的导入: 所以不必再显式的导入: ng.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
JSP自定义标签的实现

J S P自定义标签 的实现
J S P自定义标签的实现
蒋波 任 继念 崔蔚
( 中国工程物理研究院工学院,四川绵阳,6 2 1 9 0 0 )
摘
要
文章介绍了实现 自定义标签 需要 的接 口和基类 ,也通过具体例子说明 自定义标签的实现方法和在
J S P页中的应用 。
关键词 T a g S u p p o r t 类;B o d y T a g S u p p o r t 类 ;T L D;t a g l i b指令
T a g . S KI P B OD Y 表 示标签 的体 内容 应该 忽略 , T a g . E V AL B O DY I NC L UD E表示 体 内容应 该被 处理 ,
收稿 日期 :2 0 1 4 . 0 1 - 0 6
笙! 星 墨 塑
塾 兰 皇 型 垫
然后 控制 转 移 到 d o Af t e r B o d y 方 法 上 ,这 个 方法 也返 回两 个可 能值 之一 ,T a g . S KI P _ BO DY将控 制转 移
容的情形 , 而T a g与 I t e r a t i o n T a g 接 口和对应的 T a g S u p p o  ̄类适用于标签体内容为空或直接把体内容传 递到页面 的简单情形,没有体 内容的标签也可直接实现更简单的 T a g 接 口。
I t e r a t i o n T a g接 口的执行 流程 如 图 1右 半部分所 示 ,第 一步 是获得 适 当类 的一个 实例 ,或者 从 J S P 容器 的标 签 处理 器 资源 池 ,或 者产 生一个 新 实例 ,然 后 ,标 签 处理器 属性被 设置 ,这 包括 J S P 容器调 用T a g接 口的 s e t P a g e C o n t e x t( )方 法指 定 当前 的 P a g e C o n t e x t 对 象 ,调用 s e t P a r e n t( )提供 对 当前标
JSP课件-12标准标签
迭代标签库
迭代标签用于多次计算标签体 迭代标签库中的标签有: 迭代标签库中的标签有:
迭代标签
forEach
forTokens
迭代标签库
<%@ taglib uri="/jstl/core_rt" prefix="c" %> <%! String [] numbers = { "1", "2", "3", "4" }; %> <c:set var="member" value="Joe:Petter;Ryan|John" scope="page" /> <BODY> forEach 标签将遍历对象集 <c:forEach var="numbering" items="<%= numbers %>"> 合并显示1 合并显示1到4之间的数字 <c:out value="${numbering}" /> </c:forEach> <c:forTokens items="${pageScope.member}" delims=":;|" var="membername"> <c:out value="${membername}" /> <br /> forTokens 将遍历用所提供的分 </c:forTokens> 隔符分隔的值并显示所有的名称 </BODY>
自定义Java类继承于标签 类继承于标签API 自定义 类继承于标签 编写标签描述文件 配置web.xml 配置 使用自定义标签
JSTL标签库
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自定义标签。
自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码。
JSP开发人员使用标签库创建标签.标签库是按照功能或实现进行分组的自定义标签的集合。
网络上常见的CMS内容管理系统都是采用模板的形式来实现,基本上所有的CMS系统都有一套自己的模板标签书写方法,简称自定义标签。
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)属性完成,所以在同一个页面中使用相同前缀的元素都属于这个标签库。
任务2-3 完善小小留言板[26页]
2.3.1 自定义标签
3.标签库构成 一个标签库由以下几部分构成:标签处理器、 标签库描述文件、应用程序部署描述符文件、 在JSP页面中的标签库声明。
(1)标签处理器(tag handler)
使用JSP自定义标签时,是由一个特殊的Java类来 决定怎样自定义标签的。这个Java类就是标签处 理器(tag handler)。
JSTL包含两个部分:标签库和EL (Expression Language,表达式语言),
JSTL--一般标签
(1)<c:out>。该标签用于在JSP中显示数 据。
属性主要有:
value:输出信息,可以是EL表达式或常量。该参 数是必须的。
default:value为空时的显示信息。 escapeXml:其值为true时避开特殊的XML字符集。
(2)创建标签配置文件。创建完处理器类后,要 创建标签库描述符来描述标签库中的每个标签。
(3)注册TLD文件。在web.xml文件中需要加入相 应配置,以便JSP引擎定位JSP自定义标签所关联 的TLD文件。
(4)在JSP页面中使用自定义标签。
2.3.2 JSTL简介
JSTL(JavaServer Pages Standard Tag Library),是一个不断完善的开放源代码 的JSP标准标签库,是由Apache和Jakarta 小组来维护的。JSTL至少运行在支持 JSP1.2和Servlet2.3规范的容器上,在 JSP2.0中是作为标准予以支持的。
TLD文件是一个XML格式的文件,它包含标 签库中所有标签的元信息。如标签名称、 所需包含的属性、相关联的标签处理器类 名等。这个文件由JSP容器读取并处理。
(3) web.xml文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、自定义标签的体系结构自定义标签需要有一个相应的标签处理类,当服务器遇到自定义标签时会调用标签处理类。
多个自定义标签组成一个自定义标签库,标签库有一个描述文件,该描述文件对库中的标签进行声明。
开发自定义标签其实就是定义标签处理类和编写标签库描述文件的过程。
1.1、什么是自定义标签库JSP容器遇到<jsp:forward>标签时会执行页面转发的操作。
如果希望在JSP中实现用类似于JSP标签的方式完成特定操作,可以通过自定义标签来完成。
自定义标签库是自定义标签的集合。
自定义标签在使用中会以下面几种形式出现:(1)简单格式简单格式不带标签体、不嵌套自定义标签。
例如:<yourDate:displayDate/>,your为前缀,displayDate为标签名称。
这种标签可以带有属性,例如:<mi:iterate name=”contact” type=”com.j2ee.Contact”/>,name和type 是自定义标签使用的两个属性。
(2)带有标签体自定义标签之间包含标签体,例如:<mt:iterate>Hello</mt:iterate>(3)自定义标签的嵌套使用嵌套使用标签是指自定义标签中又使用了自定义标签,例如:<map:mapdefine id=”deleteParams”><map:mapEntry id=”id” name=”cd” property=”id”/><map:mapEntry id=”method” value=”delete”/></map:mapDefine>自定义标签库由一下成员组成:???? 标签处理程序???? 标签库描述文件(TLD)1、标签处理程序自定义标签的处理功能是由标签处理程序定义的。
因此,自定义标签的开发主要是标签处理程序的开发。
标签处理程序的开发有固有的规范,即开发实现特定接口的Java类。
运行时,JSP对应的Servlet会建立本页面使用的自定义标签处理类的一个实例。
标签处理类的规范由Tag接口定义。
如果要建立带标签体的标签处理类,可以实现BodyTag接口。
BodyTag接口是Tag接口的子接口。
Tag接口中,主要定义的是和标签生命周期相关的方法,主要方法有:(1)当容器创建一个新的标签后,通过setPageContext方法来设置标签的页面上下文。
(2)使用setParent方法设置这个标签的上一级标签,如果没有上一级嵌套,设置为null。
(3)设置标签的属性,这个属性在标签库描述文件中定义,如果没有定义属性,就不调用该类方法。
(4)调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,当返回EVAL_BODY_INCLUDE时,就计算标签体,如果返回SKIP_BODY 时,就不计算标签体。
(5)调用doEndTag方法,这个方法可以返回EVAL_PAGE和SKIP_PAGE,当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面的其他部分,如果返回SKIP_PAGE,容器将在标签结束时停止计算JSP页面的其他部分。
(6)调用release方法释放标签处理程序占用的资源。
为了简化开发,JSP规范又定义了一些辅助类。
例如:Tag接口对应辅助类为TagSupport类。
BodyTag接口对应BodyTagSupport类。
2、标签库描述文件标签库描述文件(Tag Library Descriptor)包含了自定义标签的描述信息。
它把自定义标签和对应的处理程序关联起来。
一个标签库对应一个标签库描述文件,一个标签库描述文件可以包含多个自定义标签的声明。
<!–文件名:mytag.tld –><?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""/dtd/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>1.2</tlib-version><jsp-version>1.2</jsp-version><short-name>mytag</short-name><description>This taglib provides tag example</description><tag><name>repeat</name><tag-class>edu.jsp.tag.SimpleTag</tag-class><body-content>scriptless</body-content><attribute><!–设置java类中变量,调用java文件中的setNum()方法–><name>num</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>相应的标签处理类文件:package edu.jsp.tag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;import java.util.HashMap;import java.io.IOException;public class SimpleTag extends SimpleTagSupport{private int num;public void doTag() throws JspException, IOException{for (int i=0; i<num; i++){getJspContext().setAttribute("count1",String.valueOf(i + 1)); getJspBody().invoke(null);}}public void setNum(int num){this.num = num;//这个用来设置num的值,这个方法将在tld文件中调用this.num = num;}}1.2、使用自定义标签的好处使用自定义标签的好处是:(1)加快Web应用开发的速度。
可以有效地使表示逻辑和应用逻辑相分离。
(2)提高代码的可重用性(3)使JSP程序更加容易维护然而,实际上相当多的JSP开发人员排斥自定义标签,宁愿在JSP文件插入大量的JSP Scriptlet。
这主要是因为学习自定义标签需要时间,开发自定义标签也需要时间,所以为了“节省时间”,他们放弃了自定义标签,结果往往要耗费大量的时间在JSP的调试和维护上。
自定义标签和JavaBean有区别:???? JavaBean不能操作JSP形式的内容,而自定义标签可以处理JSP形式的标签体。
???? 自定义标签比JavaBean更能将复杂的操作缩减为十分简洁的形式。
???? 建立自定义标签比JavaBean困难。
2、自定义标签开发实例2.1、自定义标签——Date下面定义一个名为myDate的自定义标签。
完成这个自定义标签的步骤如下:(1)定义标签处理类:DisplayDate。
(2)定义标签库描述文件:date.tld。
(3)在web.xml中加入对自定义标签库的声明。
(4)在date.jsp中引用自定义标签myDate。
1、定义标签处理类——DisplayDatepackage my.date;import java.io.*;import java.util.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;public class DisplayDate extends TagSupport{public DisplayDate(){super();}public int doStartTag() throws JspException{JspWriter out = pageContext.getOut();try{out.print(new Date());}catch (IOException ioe){System.out.println("Failed to show date");}return this.SKIP_BODY;}}例子中,只覆盖了doStartTag方法,通过pageContext对象获得out对象,通过out对象页面输出日期信息。
TagSupport类定义了get/setParent和setPageContext方法,get/setParent 方法允许标签嵌套。
另外TagSupport类还定义了一个可以被子类使用的pageContext实例变量(protexted PageContext pageContext),这个变量由setPageContext方法设置。
2、创建TLD文件——date.tldTLD文件对应于一个自定义标签库,里面有包含库中所有自定义标签的声明。
TLD 文件对自定义标签处理程序的作用,与Web部署描述符对Servlet的作用类似。
TLD文件列出了从标签名到标签处理程序的映射。
TLD文件通常保存于Web应用程序的WEB-INF目录下,并且要在web.xml文件中声明。
下面是date.tld文件内容:<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""/dtd/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>1.2</tlib-version><jsp-version>1.2</jsp-version><short-name>date</short-name><description>This taglib provides tag to show date.</description><tag><name>displayDate</name><tag-class>my.date.DisplayDate</tag-class><body-content>empty</body-content></tag></taglib>我们仔细分析一下这些标签:???? TLD文件有一个导言。