JSP自定义标签开发+TLD文件元素详解
el标签说明

cookie | java.util.Map |如同HttpServletRequest.getCookies( )
-----------------------------------------------------------------------------------------
header | java.util.Map |如同ServletRequest.getHeader(String name) | |返回String类型的值
------------------------------------------------------------------------------------------
headerValues | java.util.Map |如同ServletRequest.getHeaders(String name) | |。返回String []类型的值
PageScope | java.util.Map |取得Page范围的属性名称所对应的值
-------------------------------------------------------------------------------------
RequestScope | java.util.Map |取得Request范围的属性名称所对应的值
-------------------------------------------------------------------------------------
自定义标签(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接口。
第2章 JSP语法基础 2.3 JSP指令元素、2.4 JSP动作元素

第2章 JSP语法基础
2.3 JSP指令元素 2.4 JSP动作元素
JSP开发案例教程
本章内容
01 脚本元素 03 JSP指令元素
02 案例ch2.2_datetime: 时间格式化
04 JSP动作元素
05 案例ch2.5_include: 框架类型网页
06 小结与练习
2.3 JSP指令元素
指定在当前页
4
session
中是否允许 10 isThreadSafe 指定是否线程安全
session操作
5
buffer
指定处理页面 输出内容时的 11 缓冲区大小
autoFlush
是定当缓冲区满时是 否自动清空
指定当前页面
说明当前页面是否为
6
errorPage 运行异常时调 12 isErrorPage 其他页面的异常处理
该JSP动作表示获取或创建一个名称为guess的、属于类com.GuessNumber的、生命周期 为session的对象,详见本书案例ch5.4_guessNumber(猜数游戏)。
JSP开发案例教程
所有的动作元素需要两个属性:
id属性
id属性是动作元素的唯一标识,可以在 JSP页面中被引用。动作元素创建的id值 可以通过PageContext来调用。
可以使用绝对或相对URL。 ✓ tagDir属性指示前缀将被用于标识在WEB-INF/tags目录下的标签文件。
2.4 JSP动作元素
JSP开发案例教程
2.4 JSP动作元素
JSP动作元素
➢ JSP动作利用XML语法格式的标记,来控制JSP容器Servlet引擎的行为。 ➢ 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件
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的格式化标签库。
JSF导航,转换器,验证器,错误处理

转换日期:<f:convertDateTime>其中的pattern属性用 于指定日期的样式,例如:yyyy-mm-dd。 转换数字:<f:number> 注意:所有转换的错误信息都保存在FacesContext对象 中,通过<f:message>可输出错误信息。
JSF自定义转换器 自定义转换器
需要实现javax.faces.convert.Converter接口, getAsObject方法用于将获取的请求参数转换成对 应的对象,getAsString用于将对象转换成对应的 字符串输出。 部署convert通过在faces-config中添加 convert faces-config <converter>元素来实现,其子节点<converterid>指定转换器的名称 <converter-class>指定转换器对应的类型 为组件指定转换器: 通过子元素<f:convert>来实现,其属性convertId 用于指定部署的convert的id。
<navigation-rule>元素
<from-view-id>规定了来源页面. 例如: <from-view-id>/index.jsp</form-view-id> <from-view-id>/*</form-view-id> <from-view-id>/pages/*</form-view-id> <from-view-id>*</form-view-id> 其中的*代表了所有的view. 在一个<navigation-rule>中只能配置一个<fromview-id>元素.
第15章JSP标准标签库JSTL_core_luo

什么是JSTL
为了实现页面无脚本,还要借aServerPages Standard Tag Library)JSP标准标签库
JSTL 的优点
提供一组标准标签
可用于编写各种 动态 JSP 页面
用于访问数据库
JSTL组成
JSTL是由5个不同的功能的标签库组成的。在 JSTL1.1规范中,为5个标签库分别指定了不同的 URI,并对标签库的前缀做出了规定:
如果只在当前Web应用程序中使用,可以将这两个文件放到WEBINF\lib目录下。
另外还有一个standard-examples.war文件在下载的zip包 内。这是JSTL的例子程序。将此文件放到Tomcat的 webapps目录下,打开IE,输入 http://localhost:8080/standard-examples/ 就可以了。
index.jsp: <a href="servlet/StuSer">使用mvc模式 调用servlet获得bean的值,在输出到 jsp用el表达式获得</a>
C_out_1.jsp <%@ page contentType="text/html;charset=GBK"%> <%@ taglib uri="/jsp/jstl/core" prefix="c"%> <html> <body> <hr> <c:set value="刘丽" var="userName" scope="session"/> <c:out value="${userName}"/> <hr> <c:set var="password" scope="session"> yjhgmy </c:set> <c:out value="${password}"/> <hr> <c:out value="${}"/> <c:out value="${st.age}"/> </body> </html>
任务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文件
TLD文件配置详解jsp自定义标签
TLD文件配置详解(jsp自定义标签)TLD文件配置详解<tag><name>write</name><tagclass>org.apache.struts.taglib.bean.WriteTag</tagclass><bodycontent>empty</bodycontent><attribute><name>bundle</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>其中:<name>write</name>:这个Tag的名字<tagclass>org.apache.struts.taglib.bean.WriteTag</tagclass>:这个Tag 是由那个类实现的(这个class可以在struts.jar包中找到)<bodycontent>empty</bodycontent>:这个Tag可以直接结尾,不需要填写内容这里bodycontent有三个可选值jsp 标签体由其他jsp元素组成如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。
比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标签会按attributeName的实际值是什么就传入什么。
这个是最常用的一个。
empty 标签体必须为空在引用这个Tag的时候,可以<bean:writebundle="attributeName" />,而不必<bean:writebundle="attributeName" ></bean:write>tagdependent 由标签解释,不带jsp转换<attribute> </attribute>这里标识的是这个Tag的一个参数<name>bundle</name>这个参数的名字<required>false</required>这个参数是否是必填相如果为true则必须写这个参数,否则会报错<rtexprvalue>true</rtexprvalue>是说这个标签的值可以写入rtexprvalue:"RUN-TIME EXPRESSION VALUE",是否可以动态赋值,在jsp中如value="<%=attributeName%>"。
J2EE上--第8章 JSTL标准标签库
目标: 目标:
掌握JSTL核心标签库 核心标签库 掌握 掌握JSTL格式标签库 掌握 格式标签库 了解其它标签库 掌握自定义标签
第八章 JSTL标准标签库 标准标签库
重点: 重点:
掌握JSTL核心标签库 核心标签库 掌握 掌握JSTL格式标签库 掌握 格式标签库 掌握自定义标签
8.3格式标签库 格式标签库
4:使用fmt:message输出国际化的资源 :使用fmt:message输出国际化的资源 fmt:message 打开项目,修改studentAdd.jsp,输出国际化的资源, 打开项目,修改 ,输出国际化的资源, 它们会根据具体设置的国际化环境代码来调用对应的资源 它们会根据具体设置的国际化环境代码来调用对应的资源 文件,具体代码如下所示: 文件,具体代码如下所示:
8.3格式标签库 格式标签库
提示: 提示: 在创建资源文件时, 字符均被转义, 在创建资源文件时,所有的 Unicode 字符均被转义, 这是因为 Java 的资源绑定机制只接受用 ASCII 编码的 属性文件。要创建这个文件, 属性文件。要创建这个文件,既可以使用 IDE 中的字符 串资源编辑器, 串资源编辑器,也可以使用 Unicode 编辑器创建一个 Unicode 文件,然后用 JDK 的 nativetoascii 工具转换它。 文件, 工具转换它。
<table border="0" cellspacing="0" cellpadding="0" align="center" width="100%"> <tr class="fontB"> <td align="center"> <fmt:message key="studentNo"></fmt:message></td> </tr><tr class="fontB"> <td align="center" bgcolor="#F0F0F0"> <fmt:message key="studentName"></fmt:message> </td> </tr>……
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的说法正确的是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标 签 含 义 <taglib> TLD文件的根元素
<tlib-version> 此标签库的版本
<jsp-version> 此标签库依赖的JSP版本。
<short-name>
<description> <display-name> <icon>
<uri> 当在JSP中使用标签时,此标签库首选或者建议的前缀。
当然可以完全忽略这个建议
描述信息
图形工具可显示的一个简短名称
图形工具可显示的图标
指定使用该标签库中标签的URI
<validator> <listener> <function> 关于该库的TagLibraryValidator信息 指定事件监听器类
定义一个在EL中使用的函数
<tag> 定义一个标签
<tag>元素的子元素 标 签 含 义
<description> <display-name> <icon>
<name> 指定针对标签的信息
开发工具用于显示的一个简短名称 可被开发工具使用的图标
标签名称
<tag-class> <tei-class> Java标签处理器类的名称。
注意这是处理器类的全限定名称,比如com.xx.tag.TableTag
Javax.servlet.jsp.tagext.TagExtraInfo类的一个可选子类
<body-content>
<variable>
<example>
此标签的主体部分的内容。
其值可为scriptless\tagdependent\empty,默认为empty 定义脚本变量信息
使用该标签例子的可选的非正式描述
<attribute> 包含了此标签的一个属性的元数据
<attribute>的子元素 标 签 含 义
<description> <name> 有关描述的文本信息
在jsp标签中使用的属性名称
<required>
<rtexprvalue> <type>
指定属性是必须的还是可选的,默认为false,表示属性可选。
如果该值为true,则jsp页面必须为该属性提供一个值。
可能的值true、false、yes、no
指定属性是否能接受请求时表达式的值,默认为false,表示不能接受请求时表达式的值。
可能值:true、false、yes、no
属性的数据类型,该元素只能用在当<rtexprvalue>设
置为true时。
它指定当使用请求时属性表达式(<%= %>)返回类型。
默认string
实例(继承SimpleTagSupport类方式):
编写一个DateTag标签,输出系统时间。
<c1:date/>,输出的格式:2011年11月9日
step1: 写一个java类,继承SimpleTagSupport类
step2: override doTag()方法,在该方法里,实现相应的处理逻辑
package mytag;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class DateTag extends SimpleTagSupport{
@Override
p ublic void doTag() throws JspException, IOException {
PageContext ctx = (PageContext)getJspContext();
JspWriter out = ctx.getOut();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
out.println(sdf.format(new Date()));
}
step3: 在.tld文件当中,描述该标签
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="/xml/ns/j2ee"
x mlns:xsi="/2001/XMLSchema-instance"
x si:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
v ersion="2.0">
<tlib-version>1.1</tlib-version>
<short-name>c1</short-name>
<uri>/mytag1</uri>
<tag>
<name>date</name>
<tag-class>mytag.DateTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
step4: 使用taglib导入标签(jsp中)
<%@taglib prefix="c1" uri="/mytag1" %> <c1:date/>。