一:JSTL标准标签库
Jstl (java Server Pages Standdard TagLibraey)标准标签库是sun公司制定的一套标准标签库
Jstl标签库是有五个功能不同的标签库组成的,在jstl1.1规范中,为这五个标签库指定了URI和建议使用的前缀
标签库 | URI | 前缀 |
Core | http://java.sun.com/jsp/jstl/core | c |
I18N | http://java.sun.com/jsp/jstl/fmt | fmt |
SQL | http://java.sun.com/jsp/jstl/sql | sql |
XML | http://java.sun.com/jsp/jstl/xml | x |
Functions | http://java.sun.com/jsp/jstl/functions | fn |
Core:JSTL核心标签是最常用的JSTL标签
I18N:JSTL格式化标签用来格式化并输出文本、日期、时间、数字。(也被称为国际化标签)
SQL: JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签
XML: JSTL XML标签库提供了创建和操作XML文档的标签。
Functions: JSTL包含一系列标准函数,大部分是通用的字符串处理函数。
二:自定义标签
自定义标签可以把HTML代码和Java代码进行有效的分离。
Jsp规范中定义了多个用于开发自定义标签的接口和类,它们都位于javax.servlet.jsp.tagext包中,
这些接口与类的关系:
SimpleTag是所有简单标签处理类的父接口,这个接口中定义了5个方法
方法 | 功能描述 |
void setJSPContext(JspContext pc) | 用于将jsp页面的内置对象pageContext对象传递给标签处理器,标签处理器可以通过pageContext与jsp页面进行通信jspContext是pageContext的父类 |
Void setParent(JspTag parent) | 用于将当前标签的父标签处理器对象传递给当前标签处理器,如果当前标签没有父标签,jsp容器不用调用这个方法 |
JspTag getParent() | 返回当前标签的父处理器对象,如果当前标签没有父标签则返回null |
Void setJspBody(JspFrangment jspBody) | 用于把代表标签体的jspFragment对象传递给标签处理器对象 |
void doTag() | 用于完成所有的标签逻辑,包括输出,迭代,修改标签体内容等,在doTag()方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知jsp容器不再执行jsp页面中位于结束标签后面的内容,这等效于传统标签的doEndTag()方法中返回的SKIP_PAGE常量 |
编写自定义标签步骤:
1. 编写标签处理器(java类)
传统标签开发通过继承TagSupport类或者BodyTagSupport类
简单标签开发通过继承SimpleTagSupport类
2. 编写标签描述符文件(tld)
<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<!-- 描述 自定义标签版本的一种描述 -->
<description>Pager 1.0 core library</description>
<!-- 显示的名称 导包进行的一个展示 -->
<display-name>Pager core</display-name>
<!-- 版本号 -->
<tlib-version>1.0</tlib-version>
<!-- 短名 -->
<short-name>fkjava</short-name>
<!-- uri :导包 -->
<uri>http://yyf.pager-tags</uri>
<!-- 定义一个标签 -->
<tag>
<!-- 标签名 -->
<name>pager</name>
<!-- 标签处理类 -->
<tag-class>com.hrm.utils.PagerTag</tag-class>
<!-- 设置标签为空 -->
<body-content>empty</body-content>
<!-- 定义标签的属性 -->
<attribute>
<!-- 属性名 表示分页的第几页 -->
<name>pageIndex</name>
<!-- 必须的 -->
<required>true</required>
<!-- run time expression value 为true支持EL表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3. 在jsp页面导入和使用自定义标签