JSP自定义标签
第24讲JSP自定义标签示例(1)精品PPT课件
EmptyTag.tld
标签处理器代码
标签处理器代码EmptyTag.java
package hnkjxy.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
i…m…port javax.servlet.jsp.JspWriter;
<tag>
<name>WithAttrTag</name>
<tag-class>hnkjxy.tag.WithAttrTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>count</name>
<rtexprvalue>true</rtexprvalue>
JSP自定义标签示例(1)
《Java企业技术》
JSP自定义标签示例
本讲主要内容:
❖ 空标签实现示例 ❖ 带属性的标签实现示例
空标签实现示例
空标签示例
……
<%@taglib uri="/WEB-INF/EmptyTag"
prefix="Tld"%>
<html>
<head>
<title>标签示例</title>
让其自动添加
<uri>/WEB-INF/EmptyTag</uri>
<tag>
<name>EmptyTag</name>
自定义标签(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接口。
jsp面试题库选择题
1) 对于JSP的通用规则,描述正确的是:A. JSP标记不区分大小写。
B. 指令和脚本元素的语法不是基于XML的,但有替代的基于XML的语法。
C. 在标记中出现的属性值可以不用引号括起来,比如:<%@ page language="Java" %>和<%@ page language=java %>是等同的。
D. 在标记中使用字符/(正斜杠)作为转义字符。
E. 如果URL不是以”/”开始的,就被解释为相对于当前的JSP路径。
2) 对于标记,描述正确的是:A. 一般来说,是、标记的子标记。
B. 如果有代码:,则在中可以使用(“name”);把属性name的值取出来。
C. 如果有代码:,则在中可以使用(“name”);把属性name的值取出来。
D. 如果标记不放在标记内,也就是不作为标记的子标记,则使用浏览器查看时会显示错误页面。
3) 在有如下代码段:webmaster在Servlet中如何把webmaster的值取出来A. 使用RequestDispatcher的getInitParameter(“webmaster”)方法B. 使用ServletContext的getIni tParameter(“webmaster”)方法C. 使用ServletConfig的getInitParameter(“webmaster”)方法D. 使用GenericServlet的getInitParameter(“webmaster”)方法4) 在有如下代码段:teacherteacherCart在Servlet中如何把servlet名:teacher取出来A. 使用Servlet的getServletName方法。
B. 使用ServletConfig的getServletName方法。
C. 使用ServletContext的getServletName方法。
D. 使用ServletRequest的getServletName方法。
T13 自定义标签
2、使用自定义标签 、
<xf:helloworld /><br> <xf:hello>清华IT</xf:hello>
复杂的自定义的标签-1 复杂的自定义的标签
带属性设置的标签
例子: 例子:HelloAttTag
带body的自定义标签 的自定义标签
BodyTag接口 主要处理带正文的标签 接口:主要处理带正文的标签 接口
是一个标记接口,它有一个直接子接口 是一个标记接口,它有一个直接子接口: Tag接口, 它是经典的、必须实现的接口。 接口, 接口 它是经典的、必须实现的接口。
public interface JspTag { }
JspTag与Tag接口介绍 与 接口介绍
public interface Tag extends JspTag { public final static int SKIP_BODY = 0; public final static int EVAL_BODY_INCLUDE = 1; public final static int SKIP_PAGE = 5; public final static int EVAL_PAGE = 6; void setPageContext( PageContext pc ); void setParent( Tag t ); Tag getParent( ); int int doStartTag( ) throws JspException; doEndTag( ) throws JspException;
<description>继承 继承TagSupport抽象类创建标签 抽象类创建标签</description> 继承 抽象类创建标签
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应用与开发技术课后习题答案
第1章1.什么是静态网页?什么是动态网页?两者的区别是什么?试举例说明。
答:在设计中,纯粹HTML格式的网页通常被称为“静态网页”,早期的一般都是由静态网页制作的。
静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。
你编的是什么它显示的就是什么、不会有任何改变。
静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型。
静态网页的网址形式通常为:.example./eg/eg.htm,也就是以.htm、.html、.shtml、.xml等为后后缀的。
在HTML格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字母等,这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。
我们将静态网页的特点简要归纳如下:(1)静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”;(2)网页容一经发布到服务器上,无论是否有用户访问,每个静态网页的容都是保存在服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;(3)静态网页的容相对稳定,因此容易被搜索引擎检索;(4)静态网页没有数据库的支持,在制作和维护方面工作量较大,因此当信息量很大时完全依靠静态网页制作方式比较困难;(5)静态网页的交互性交叉,在功能方面有较大的限制动态网页是与静态网页相对应的,也就是说,网页URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见形式,而是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”,如有这样一个动态网页的地址为:/ip/index.asp?id=1这就是一个典型的动态网页URL形式。
这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字容的,也可以是包含各种动画的容,这些只是网页具体容的表现形式,无论网页是否具有动态效果,采用动态技术生成的网页都称为动态网页。
jsp技术简介
JSP技术简介什么是JSP?JSP(JavaServer Pages)是一种用于创建动态网页的技术。
它允许开发人员将动态内容(如数据库查询结果或用户输入)嵌入到HTML页面中。
与静态网页不同,JSP页面可以根据不同的请求和数据来生成不同的输出。
JSP是基于Java编程语言的,因此开发人员可以使用Java的强大功能来实现复杂的业务逻辑。
同时,它也是在服务器端运行的,这意味着用户无需下载任何插件或软件,并且可以通过任何支持HTTP协议的浏览器访问到JSP页面。
JSP的优点1.易于学习和使用:与其他服务器端技术相比,JSP是学习曲线较为平缓的。
它是用HTML和Java代码混合编写的,因此对于熟悉HTML和Java的开发人员来说,上手相对容易。
2.代码重用:JSP页面可以通过组件、标签库和自定义标签等方式实现代码的重用。
这使得开发人员可以更加高效地开发和维护项目。
3.动态内容生成:JSP允许开发人员在HTML页面中嵌入Java代码,这使得动态内容的生成变得非常简单。
开发人员可以使用Java的强大功能处理和操作数据,从而提供与用户交互的动态页面。
4.可扩展性:JSP技术是基于Java的,可以与其他Java技术(如Servlet和EJB)无缝集成。
这使得开发人员能够构建复杂的企业级应用程序,并实现高度的可扩展性。
5.跨平台性:由于JSP是在服务器端运行的,所以它可以在任何支持Java的操作系统上运行。
这意味着开发人员可以使用一套代码在不同的操作系统上部署应用程序。
JSP的工作原理JSP的工作原理可以简单概括为以下几个步骤:1.编写JSP页面:开发人员编写JSP页面,它包含了HTML和Java代码。
Java代码通常使用特殊的标签(<% %>)来标识。
2.编译为Servlet:当第一次访问JSP页面时,容器会将JSP页面编译成一个Servlet。
这个过程是自动的,开发人员无需手动进行。
3.创建Servlet实例:每次有请求到达JSP页面时,容器都会为该请求创建一个Servlet实例。
JSP试题及答案
JSP试题及答案第6章自定义标签一、选择题:(1)下面对于标签的说法中错误的是。
A)JSP标签用于调用JavaBean组件中的操作和执行B)JSP标签简化了JSP页面的开发和维护C)JSP技术没有提供了在自定义标签中封装其他动态功能的机制D)自定义标签通过封装反复执行的任务使它们可以在多个应用程序中重复使用E)自定义标签通常是以标签库的形式出现的(2)自定义标签有丰富的功能。
它们可以。
A)通过从调用页面传递的属性进行定制B)访问JSP页面可以使用的所有对象C)修改由调用页面生成的响应D)彼此通信。
E)彼此嵌套(3)当我们要在JSP页面中使用自定义标签时需要。
A)在tld文件中定义标签B)创建一个标签处理器C)引入这个标签的标签库,并指定前缀名D)在JSP页面中使用page指令E)在JSP页面中使用taglib指令(4)下面关于Tag接口说法中正确的是。
A)setPageContext()方法为初始化方法B)setParent()方法用来设置标签的上一级标签C)doStartTag()方法返回EVAL_BODY_INCLUDE和SKIP_BODY,返回EVAL_BODY_INCLUDE计算正文内容,返回SKIP_BODY不计算body。
D)doEndTag方法,EVAL_P AGE或者SKIP_P AGE,当返回值为EVAL_P AGE,jsp容器将继续执行jsp页面的内容,否则不执行E)release()方法用来释放标签程序占用的任何资源(5)下列关于BodyTagAPI说法中错误的是。
A)setPageContext(pageContext)用来设置页面的上下文对象B)setParent(Tag) 用来设置上一级标签,如果没有上一级标签C)doAfterBody()用来设置缓冲区,这个缓冲区可以存放解析后的bodyD)setBodyContent(BodyContent) 用来先计算正文内容后,如果doStartTag返回的是EVAL_BODY_INCLUDE,那么执行这个方法,如果此方法返回的是IterationTag.EV AL_BODY_AGAIN,那么就在此计算正文内容,然后再调用此方法E)doInitBody()用来为setBodyContent()方法做准备工作第7章JSTL一、选择题:(1)下列对于JSTL的说法正确的是。
jstl if else用法
jstl if else用法JSTL(JSP标准标签库)是一组JSP自定义标签,用于简化JSP页面中的逻辑处理和数据显示。
在JSTL中,可以使用if-else标签来实现条件判断。
以下是if-else标签的用法:1. 导入JSTL库:在JSP页面中,需要先导入JSTL库,以便使用标签库中的标签。
可以使用以下语句导入JSTL库:```<%@ taglib prefix="c" uri="/jsp/jstl/core" %> ```2. 使用if-else标签:在JSP页面中,可以使用<c:if>标签来实现条件判断。
它的语法如下:```<c:if test="${条件表达式}"><!-- 此处为满足条件时的内容 --></c:if>```其中,`${条件表达式}`为需要判断的条件表达式,如果条件表达式为真,则执行if标签内的内容。
除了<c:if>标签,还可以使用<c:choose>和<c:when>标签来实现条件判断。
它们的语法如下:```<c:choose><c:when test="${条件表达式}"><!-- 此处为满足条件时的内容 --></c:when><c:otherwise><!-- 此处为条件不满足时的内容 --></c:otherwise></c:choose>```其中,可以有多个<c:when>标签,用于判断多个条件。
例如,以下示例代码展示了如何使用if-else标签判断变量num 的值是否大于10:```<c:if test="${num > 10}"><p>${num}大于10</p></c:if><c:if test="${num <= 10}"><p>${num}小于等于10</p></c:if>```通过使用if-else标签,可以根据条件来展示不同的内容,实现页面上的动态逻辑处理。
JSP语法(Tablib指令)
JSP语法(Tablib指令) Taglib 指令 定义⼀个标签库以及其⾃定义标签的前缀。
JSP 语法 <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 例⼦ <%@ taglib uri="" prefix="public" %> <public:loop> . . </public:loop> 描述 % @ taglib %指令声明此JSP⽂件使⽤了⾃定义的标签,同时引⽤标签库,也指定了他们的标签的前缀。
这⾥⾃定义的标签含有标签和元素之分。
因为JSP⽂件能够转化为XML,所以了解标签和元素之间的联系很重要。
标签只不过是⼀个在意义上被抬⾼了点的标记,是JSP元素的⼀部分。
JSP元素是JSP语法的⼀部分,和XML⼀样有开始标记和结束标记。
元素也可以包含其它的⽂本、标记、元素。
⽐如,⼀个jsp:plugin元素有jsp:plugin开始标记和/jsp:plugin结束标记,同样也可以有jsp:params和jsp:fallback元素。
你必须在使⽤⾃定义标签之前使⽤% @ taglib %指令,⽽且你可以在⼀个页⾯中多次使⽤,但是前缀只能使⽤⼀次。
属性 uri="URIToTagLibrary" Uniform Resource Identifier (URI)根据标签的前缀对⾃定义的标签进⾏惟⼀的命名,URI可以是以下的内容: Uniform Resource Locator(URL),由RFC 2396定义,查看。
Uniform Resource Name(URN),由RFC 2396定义。
⼀个相对或绝对的路径 prefix="tagPrefix" 在⾃定义标签之前的前缀,⽐如,在中的public,如果这⾥不写public,那么这就是不合法的。
JSP课件-11自定义标签
doEndTag()
EVAL_BODY_AGAIN 或 EVAL_BODY_BUFFERED SKIP_PAGE
计算JSP页面 中剩余内容
从当前JSP 页面中返回
TagSupport类与 类与BodyTagSupport类 类与 类
IteratorTag接口在实现上有很多方法需要我们自 接口在实现上有很多方法需要我们自 己手写实现,其实有TagSupport这个子类,我们 这个子类, 己手写实现,其实有 这个子类 来进行编程更加方便! 来进行编程更加方便! BodyTag接口也有一个实现类:BodyTagSupport, 接口也有一个实现类: 接口也有一个实现类 在实际开发过程中我们往往使用自定义类继承这 两个子类来实现. 两个子类来实现. 规范中, 在JSP2.0规范中,我们还有两个新的成员: 规范中 我们还有两个新的成员:
开发自定义标签
.java tld Web.xml JSP
自定义标签的两个重要的组成部分: 自定义标签的两个重要的组成部分:标签描述文 件(tld)和标签处理程序(.java) )和标签处理程序( )
标签处理程序是执行业务逻辑的 Java类 类 容器在编译自定义标签的时候, 当JSP容器在编译自定义标签的时候,根据 文件就可 容器在编译自定义标签的时候 根据tld文件就可 以找到真正实现业务功能的标签处理程序. 以找到真正实现业务功能的标签处理程序.这时标签处 理程序,得到JSP传递过来的信息,进行业务计算后, 传递过来的信息, 理程序,得到 传递过来的信息 进行业务计算后, 将结果用网页的形式在页面上显示出来. 将结果用网页的形式在页面上显示出来.
总结
自定义标签在 JSP 页面中嵌入少量的 Java 代码 标签格式. 自定义标签遵循标准 HTML 标签格式. 可以通过创建 Java 类或创建标签文件来实现自定 义标签 类文件实现的自定义标签, 使用 Java 类文件实现的自定义标签,需要标签处 理程序和标签库描述符文件 类文件实现的自定义标签, 用 Java 类文件实现的自定义标签,必须扩展或实 现 javax.servlet.jsp.tagext 包
自定义标签编写步骤
概括地说,自定义标签编写包括四个步骤: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>。
JSP三大指令和七大动作标签
JSP的基本构成JSP页面主要由指令标签,注释,嵌入Java代码,JSP动作标签,HTML标记语言等五个元素组成。
【1】指令标签1.1 page指令<%@ page attr1=”value1” atrr2=”value2”.......%>page指令的常用属性如下:(1) language属性该属性用于设置JSP页面使用的语言,目前只支持Java语言。
例:<%@ page language=”java” %>(2) extends属性该属性用于设置JSP页面所继承的Java类,JSP和Servlet都可以继承指定的父类,但该属性并不常用.(3) import属性该属性用于设置JSP所导入的类包,JSP页面可以嵌入Java代码片段,这些Java代码在调用API时需要导入相应的类包。
例:<%@page import=”java.util.*” %> (4) pageEncoding属性该属性用于定义JSP页面的编码格式,指定的文件编码格式。
例:<%@ page pageEncoding=”UTF-8” %>(5) contentType属性该属性用于设置JSP页面的MIME类型和字符编码,浏览器会根据些解释页面。
例:<%@ page contentType=”text/html;charset=utf-8” %>(6) session属性该属性用于定义JSP页面是否使用session会话对象,其值是boolean类型,默认值为true. Eg:<%@ page session=”true” %>(7) buffer属性该属性用于设置out对象所使用的缓冲区大小,默认大小是8KB,单位只能是8的倍数。
Eg:<%@ page buffer=”128KB” %>(8) autoFlush属性该属性用于定义JSP页面缓冲存满时是否自动刷新缓存。
在JSP页面中使用自定义标记
在该 文 件 中 , 用 < @ tg b ui 使 % al r =” y ut i m c s —
tg pei a ” rf x=”mya ” % ) 令 来 引 入 自定 义 标 记 。 tg 指
I 创 建 自定 义 标 记
3 创 建 自定 义 标 记 举 例
3 1 创 建 标 记 处 理 程 序 类 .
这是 一 个 简 单 的 X ML文 件 , 展名 为 t 。 它 扩 l d
定义 了 自定 义标 记 与 处 理它 的 Jv a a类 ( 多 个 类 ) 或
该 例 的标记 处 理程 序类 ( urnD t.aa 清单 c r tae jv ) e
口定 义 标 记 处 理 程 序 的 所 有 基 本 方 法 , 要 包 括 主
2 标 记 库 的 工 作 机 制
当 Srlt容 器 处 理 自定 义 标 记 时 , 根 据 ev e 会 tg b指 令 的 ui al i r属性 在 w b x l e .m 中找 到包含 该 自定 义标 记 的 t l d文 件 的 位 置 , 后 加 载 它 ( 果 该 t 然 如 l d 已经 加 载 , 不 会 再 次加 载 ) 接 着会 调 用 t 则 。 l 件 d文 中指 定 的类 来 处 理 该 自定 义 标 记 。这 个 过 程 与 用 Jv aa类 文 件 处 理 JP 页 面 的 JvB a S aa en调 用 的 方 式 基 本 一样 。
在 JP中 , S 自定 义 动 作 是 通 过 J P页 面 中 的 白 S 定 义标记 调用 的 , 自定 义 标 记 通 过 封 装 为 J P页 面 S 提供 了可 重用 、 可维 护 及 可 移 植 的 解 决 方 案 。 自定 义标 记也 为在 动 态 We b页 中将 表 示 逻 辑 与 业 务 逻 辑分 离提 供 了一种 标 准 化 的机 制 , 页面 设 计 者 可 使 以将 注意 力放 到表 示 上 , 而应 用 程 序 开 发 人 员 编 写
JSP taglib指令
JSP taglib 指令<% @ taglib %>指令声明此JSP 文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
首先要开发自己的标签库(taglib ),为标签库编写配置文件(以.tld 为后缀的文件),然后在JSP 页面中使用该自定义标签。
然后,通过该指令使用用户自定义标签。
这样增加了代码的重用程度,提高了开发效率。
这里自定义的标签含有标签和元素之分。
因为JSP 文件能够转化为XML ,所以了解标签和元素之间的联系很重要。
实际上,标签只是一个在意义的标记,是JSP 元素的一部分。
JSP 元素是JSP 语法的一部分,和XML 一样有开始标记和结束标记。
元素也可以包含其它的文本、标记和元素。
和标签库,prefix 表示在JSP 页面里引用这个标签的前缀,这些前缀不可以是jsp 、jspx 、java 、javax 、sun 、servlet 和sunw 等。
1.实现标签行为实现标签行为是将scriptlet 代码从原先所在的地方移到一个Java 类中,也就是创建一个Java 类的JavaBean 或者Servlet 文件,用于处理数据内容。
文件名:Tag.javaJSTL (JSP Standard Tag Library ,JSP 标准标签库)是一个不断完善的开放源代码的JSP 标签库,是由apache 的jakarta 小组来维护的。
JSTL 只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x 。
在JSP 2.0中也是作为标准支持的。
类。
然后,再创建一个doEndTag( )方法,并在该方法中通过“pageContext.getOut().println()”语句在页面中输入文本内容。
TagSupport类主要是标签处理类是否需要与标签体交互,如果需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport。
JSP中自定义标签的实现与部署
0I 技术论坛 0 T
SIN E E H O O YIF R A I N CE C &T C N L G O M TO N
20 08年
第 2 期 3
J P中 自定义标签的实现与部署 S
周 建 儒
( 川信息 职 业技术 学 院 四川 广元 四
【 摘
681) 2 0 7
2 自定 义 J . SP标 签 的 处 理 过 程
时 , 别 出 自定 义标 签 。 识 2在 JP文 件 中使 用 自定 义 标 签 。 . S
T g aa命 令 编 译 此 jv j aa文 件 ,将 编 译 后 的 M T g ls 件 必 须 y a .as文 c 1在 JP中 引 入 标 签 库 , JP引 擎 标 识 JP页 面 中 tgb命 令 My a.v . S 当 S S al i 放 在 m tg文 件 夹 中 。 ya 3 b容 器 根 据 J P文 件 中 的 pei 性 的 值 ,获 得 标 签 库 中 . We S rf x属
2安 装 T mct 务 器 (o a5O . o a服 T mct.)
C: r g a F l s p c e S fwa e F u d to \ o a . \ o r m ie  ̄ a h o P t r o n a in T mc t5 0
Sr gs Q ey ” e c a—d a des uhr sa =‘T’ ; t n t ur= Sl t u i, d rs, tos tt U ; i r e a e ” s t: o nc. etSae n0 t e cn et rae t met; a c t R sh e rsl =s t. eue ur(r ur) eu St eut t e x etQ eys Q ey; a e t w i ( shn x0 hl r u . t) ee e
jstl标签
jstl标签JSP标签1.jsp便签的作⽤ jsp标签作⽤:替换jsp脚本 1)流程判断(if for循环) 2)跳转页⾯(转发,重定向) 3)…………2.jsp标签分类 1)内置标(动作标签):不需要在jsp页⾯导⼊标签 2)jstl便签:需要在jsp页⾯中导⼊标签 3)⾃定义标签:开发者⾃⾏定义,需要在jsp页⾯中导⼊标签3.动作标签 转发标签:<jsp:forward> 包含标签:<jsp:include> 参数标签:<jsp:param> 原理:包含与被包含的页⾯先各⾃翻译成java源⽂件,然后再运⾏时合并在⼀起。
静态包含 vs 动态包含的区别 1)语法不同 静态包含语法:<%@incle file="被包含的页⾯"%> 动态包含语法:<jsp:include page="被包含的页⾯"> 2)参数传递不同 静态包含不能向被包含页⾯传递参数 动态包含可以向被包含页⾯传递参数 3)原理不同 静态包含:先合并在翻译 动态包含:先翻译在合并JSTL1.概念javaServer Pages Tag Library JSP标准标签库 是由Apache组织提供的开源的免费的jsp标签 核⼼标签库(c标签)(⽤的多) 国际化标签(fmt标签库) EL函数库(fn函数库) xml标签库(x标签库) sql标签库(SQL标签库)2.作⽤:⽤于简化和替换jsp页⾯上的java代码3.使⽤步骤: 1.导⼊jstl相关的jar架包 因为是web项⽬,遵守规范,要在WEB-INF⽬录下创建lib⽬录,然后右键lib⽬录选择Add as Libary… -->>Module Libay(重点) 2.引⼊标签库:taglib指令: <%@ taglib prefix="c" uri="/jsp/jstl/core"%> 3.使⽤便签 4.核⼼便签库的常⽤标签 单条件判断 <c:if test=""></c:if> 多条件判断 <c:choose> <c:when test=""></c:when> <c:otherwise></c:otherwise> </c:choose> 循环数据 <c:forEach begin=" " end=" " step=" " var=" " items=" " varStatus=" " ></c:forEach> 重定向 <c:redirect url=" " ><c:redirect> JavaBean1.JavaBean是⼀种开发规范,也可以说是⼀种技术。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP自定义标签(Custom Tag)
V1.0
1 JSP自定义标签简介
1.1 基本概念
JSP的自定义标签是用户自定义的JSP元素。
自定义标签与JavaBean类似,都封装了Java的代码。
当JSP转换为Servlet并执行时,WEB容器便会调用这些操作。
1.2 自定义标签的功能
1、取代了JSP页面的JA V A代码。
2、自定义标签是可重用的组件。
3、可通过从调用页面所传递的属性参数进行定制。
1.3 编写和调用JSP自定义标签的基本流程
一个自定义标签的编写和调用包括三个流程:
1、编写后台JA V A处理程序。
2、编写标签库描述文件(Tag Library Descriptor)。
3、在XML文件中进行自定义标签配置。
4、在JSP页面引用标签。
1.4 JSP自定义标签解析过程
在JSP中使用标签库中的标签,都需要按照以下的方式引入标签库:
当在JSP中使用了标签库中的标签,JSP页面加载时,WEB容器根据所使用标签名称前缀获取JSP页面声明taglib中的uri属性值。
然后根据所获取的uri的值在web.xml 文件中查找相对应的元素,对获取对应的标签库描述文件(WEB-INF文件夹下的.tld文件)。
根据JSP页面使用的标签的后缀从tld文件中获取相对应的属性,调用JA V A文件,创建TAG的Handler实例。
最后WEB容器调用这个实例doStartTag/doEndTag方法完
成标签的处理。
2 JSP自定义标签创建和使用
自定义标签功能的实现要求在后台必须有一个相关的JA V A类的支持,但并不是任意编写一个JA V A类就能处理JSP标签,这个类也必须实现指定的规范才能用于支持JSP 标签,这些规范表现形式也是接口和类,主要接口/类的描述如下:
javax.servlet.jsp.tagext.Tag接口,所有处理JSP标签的类必须实现该接口。
该接口中声明了6个方法,如果直接从该接口生成类则必须实现所有的6个方法,通常不会直接通过该接口生成标签的处理类。
javax.servlet.jsp.tagext.TagSupport类,该类实现了Tag接口,用于创建不带标记体的自结束标签,这些标签中可以带属性。
javax.servlet.jsp.tagext.BodyTagSupport类,该类继承了TagSupport,用于创建带标记体的标签。
通常我们自定义的标签,编写处理程序时使用TagSupport和BodyTagSupport即可,不需要涉及到标签体的,继承TagSupport,需要用标签体的,用BodyTagSuppor。
以下是开发和使用一个JSP自定义标签的全过程:
1、开发标记处理类,该类要继承TagSupport或BodyTagSupport。
2、创建标记库描述符文件*.tld,在该文件中为标记处理类指定标签名、声明标签
属性。
3、在XML文件中配置自定义标签。
4、在JSP中引用标签库。
5、在JSP中使用标JSP 标签。
3 标签库描述文件(Tag Library Descriptor)
标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。
它是一个配置文件,和web.xml是类似的。
*.tld文件必须放在WEB-INF 文件下。
3.1 TLD文件中各元素含义
3.2 TLD文件编写示例
4 TagSupport类
本文档主要是通过继承TagSupport类来创建不带标记体的自定义标签。
4.1 TagSupport类的主要属性
1、parent:表示嵌套了当前标签的上层标签处理类。
2、pageContext:表示WEB应用中的pageContext对象。
该成员的功能与JSP的内
置对象pageContex完全相同。
通过该对象可以得到其他的JSP对象的引用。
如:JspWriter out=pageContext.getOut();这一语句可以得到JSP内置对象out的引用,通过out我们就可以向客户端浏览器中输出内容了。
要使用其他几个JSP 对象原理与此相同。
4.2 使用TagSupport注意点
1、JSP容器在调用doStartTag和doEndTag方法之前,会先调用setPageContext()
和setParent()方法,设置pageContext和parent属性。
因此在标签处理类中可以直接访问pageContext变量。
2、在TagSupport的构造方法中不能访问pageContext成员变量,因为此时JSP容
器还没有调用setPageContext()方法对pageContext进行初始化。
5 TagSupport处理JSP自定义标签的方法
TagSupport类提供了两个处理处理自定义标签的方法:
5.1 doStartTag
在JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。
doStartTag()方法返回一个整数值,用来决定程序的后续流程:
1、EV AL_BODY_INCLUDE:包含标记体,本例中要编写自结束标记所以不使用
该值。
2、SKIP_BODY——跳过标记体,即不处理标记体,开发自结束标记应该使用该值。
5.2 doEndTag
在JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。
doEndTag()方法也返回一个整数值,用来决定程序的后续流程:
1、SKIP_PAGE:返回这个值,则终止页面执行。
2、EV AL_PAGE:返回该值则处理完当前标记后,JSP页面中止运行。
6 实例
在以下的实例中,主要是使用两种方式实现自定义标签:
1、使用上面所提到的,继承TagSupport类;
2、通过使用编写*.tag文件实现(JavaScript)。
个人认为第二种方式优于第一种方式,更为实用。
6.1 TagSupport方式实现
本例中利用自定义标签达到分页组件的效果。
1、编写后台JA V A处理类
2、编写.tld文件(该文件必须放在WEB-INF目录下)
3、在web.xml文件中添加该标签库
4、在页面上引入该标签库
5、在页面中使用该标签
启动服务,在浏览器中输入http://localhost:8080/rpc/tagTest.jsp,可以看到如下的显示结果:
以上的是使用TagSupport完成的简单的示例,在实际中,只需要在其中添加需要的属性,和相关的逻辑处理,便可以达到分页的效果。
下面这种结合JQuery实现的分页表格,可以完成无刷新分页,在实际中较上一种更为实用。
6.2 TAG文件+JQuery实现
这种方式的基本思路是在JavaScript文件中完成翻页的逻辑处理,将参数传递到服务端完成数据的获取,并将数据转换为HTML文本返回。
1、新建一个WEB项目,并在WebRoot目录下创建一个scripts文件夹,在该文件
夹下创建名为CustomPage的JS文件和引入所需的jQuery文件。
在CustomPage.js中添加如下代码:
2、在WEB-INF下创建tags目录,在其下添加CustomTag.tag文件,代码如下:
3、编写后台的Servlet类:
修改web.xml配置文件
编写JSP页面
部署项目,在浏览器中输入http://localhost:8088/page/index.jsp,结果如下:。