常用JSTL标签详解

JSP标准标签库(JSTL)

jsp标准标签库(jstl)是一个JSP标签集合,它封装了jsp应用的通用核心功能。
JSTL支持通用的、格式化的任务。比如:迭代、条件判断、XML文档操作、国际化标签、SQL标签。除了这些它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别:

  1. 核心标签
  2. 格式化标签
  3. SQL标签
  4. XML标签
  5. JSTL函数

使用任何库,你必须在每个JSP文件中的头部包含标签。

1.核心标签

核心标签是最常用的JSTL标签。引用核心标签库的语法:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 描述
用于在JSP中显示数据,就像<%= … >
用于保存数据
用于删除数据
用来处理产生错误的异常状况,并且将错误信息储存起来
与我们在一般程序中用的if一样
本身只当做的父标签
的子标签,用来判断条件是否成立
的子标签,接在标签后,当标签判断为false时被执行
检索一个绝对或相对 URL,然后将其内容暴露给页面
基础迭代标签,接受多种集合类型
根据指定的分隔符来分隔内容并迭代输出
用来给包含或重定向的页面传递参数
重定向至一个新的URL
使用可选的查询参数来创造一个URL

标签

标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是标签可以直接通过"."操作符来访问属性。

语法格式:

out value="" default="" escapeXml=""/>

属性

属性 描述 是否必要 默认值
value 要输出的内容
default 输出的默认值 主体中的内容
escapeXml 是否忽略XML特殊字符 true

标签

标签标签用于设置变量值和对象属性.

语法格式:

set var="" value="" target="" property="" scope=""/>

属性

属性 描述 是否必要 默认值
value 要存储的内容 主体中的内容
target 要修改的属性所属的对象
property 要修改的属性
var 存储数据的变量
scope var属性的作用域 Page

标签

标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。

语法格式:

var="" scope=""/>

属性

属性 描述 是否必要 默认值
var 要移除的变量名称
scope var属性的作用域 所有作用域

标签

标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。

语法格式:

""> ... 

属性

属性 描述 是否必要 默认值
var 用来储存错误信息的变量 None

标签

标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

语法格式:

if test="" var="" scope=""> ... if>

属性

属性 描述 是否必要 默认值
test 条件
var 用于存储条件结果的变量
scope var属性的作用域 Page

, , 标签

标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而标签中对应有,switch语句中有default,而标签中有

语法格式:


    ""/>
        ...
    
    ""/>
        ...
    
    ...
    ...
    
        ...
    

属性

标签的属性如下:

属性 描述 是否必要 默认值
test 条件

标签

标签提供了所有行为标签所具有的功能,同时也允许包含绝对URL.

语法格式:

import
   url=""
   var=""
   scope=""
   varRender=""
   context=""
   charEncoding=""/>

属性

属性 描述 是否必要 默认值
url 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源
context 当使用相对路径访问外部context资源时,context指定了这个资源的名字。 当前应用程序
charEncoding 所引入的数据的字符编码集 ISO-8859-1
var 用于存储所引入的文本的变量
scope var属性的作用域 Page
varReader 可选的用于提供java.io.Reader对象的变量

, 标签

这些标签封装了Java中的for,while,do-while循环。
相比而言,标签是更加通用的标签,因为它迭代一个集合中的对象。
标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

语法格式:

Each
    items=""
    begin=""
    end=""
    step=""
    var=""
    varStatus=""> 
  
Tokens
    items=""
    delims=""
    begin=""
    end=""
    step=""
    var=""
    varStatus="">

属性

标签有如下属性:

属性 描述 是否必要 默认值
items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称

标签与标签有相似的属性,不过还有另一个属性:

属性 描述 是否必要 默认值
delims 分隔符

标签

标签用于在标签中指定参数,而且与URL编码相关。
在标签内,name属性表明参数的名称,value属性表明参数的值。

语法格式:

param name="" value=""/>

属性

属性 描述 是否必要 默认值
name URL中要设置的参数的名称
value 参数的值 Body

标签

标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。

语法格式:

<c:redirect url="" context=""/>

属性

属性 描述 是否必要 默认值
url 目标URL
context 紧接着一个本地网络应用程序的名称 当前应用程序

标签

标签将URL格式化为一个字符串,然后存储在一个变量中。
标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括中指定的参数。

语法格式:

var=""
  scope=""
  value=""
  context=""/>

属性

属性 描述 是否必要 默认值
value 基础URL
context 本地网络应用程序的名称 当前应用程序
var 代表URL的变量名 Print to page
scope var属性的作用域 Page

2.格式化标签

格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签的语法:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
使用指定的格式或精度格式化数字
解析一个代表着数字,货币或百分比的字符串
使用指定的风格或模式格式化日期和时间
解析一个代表着日期或时间的字符串
绑定资源
指定地区
绑定资源
指定时区
指定时区
显示资源配置文件信息
设置request的请求编码

标签

标签用于格式化数字,百分比,货币。

语法格式:

value=""
  type=""
  pattern=""
  currencyCode=""
  currencySymbol=""
  groupingUsed=""
  maxIntegerDigits=""
  minIntegerDigits=""
  maxFractionDigits=""
  minFractionDigits=""
  var=""
  scope=""/>

属性

属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT类型 Number
pattern 指定一个自定义的格式化模式用与输出
currencyCode 货币码(当type=”currency”时) 取决于默认区域
currencySymbol 货币符号(当type=”currency”时) 取决于默认区域
groupingUsed 是否对数字分组 (TRUE 或 FALSE) true
maxIntegerDigits 整型数最大的位数 Print to page
minIntegerDigits 整型数最小的位数 Page
maxFractionDigits 小数点后最大的位数
minFractionDigits 小数点后最小的位数 当前应用程序
var 存储格式化数字的变量 Print to page
scope var属性的作用域 Page

pattern属性

符号 描述
0 代表一位数字
E 使用指数格式
# 代表一位数字,若没有则显示0
. 小数点
, 数字分组分隔符
; 分隔格式
- 使用默认负数前缀
% 百分数
? 千分数
X 指定可以作为前缀或后缀的字符
在前缀或后缀中引用特殊字符

标签

标签用来解析数字,百分数,货币。

语法格式:

value=""
  type=""
  pattern=""
  parseLocale=""
  integerOnly=""
  var=""
  scope=""/>

属性

属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT类型 Number
parseLocale 解析数字时所用的区域 默认区域
integerOnly 是否只解析整型数(true)或浮点数(false) false
pattern 自定义解析模式(同formatNumber中的使用)
var 存储格式化数字的变量 Print to page
scope var属性的作用域 Page

标签

标签用于使用不同的方式格式化日期。

语法格式:

value=""
  type=""
  dateStyle=""
  timeStyle=""
  pattern=""
  timeZone=""
  var=""
  scope=""/>

属性

属性 描述 是否必要 默认值
value 要显示的数字
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 指定一个自定义的格式化模式用与输出
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 Print to page
scope var属性的作用域 Page

日期格式

符号 描述 实例
G 时代标志 AD
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 2002
M 月份数字。一位数的月份没有前导零。 April & 04
d 月中的某一天。一位数的日期没有前导零。 20
h 12 小时制的小时。一位数的小时数没有前导零。 12
H 24 小时制的小时。一位数的小时数没有前导零。 0
m 分钟。一位数的分钟数没有前导零。 45
s 秒。一位数的秒数没有前导零。 52
S 毫秒 970
E 周几 Tuesday
D 一年中的第几天 189
F 一个月中的第几个周几 2 (一个月中的第二个星期三)
w 一年中的第几周 27
W 一个月中的第几周 2
a a.m./p.m. 指示符 PM
k 小时(12 小时制的小时) 24
K 小时(24 小时制的小时) 0
z 时区 中部标准时间
转义文本
单引号

标签

标签用于解析日期。

语法格式:

value=""
   type=""
   dateStyle=""
   timeStyle=""
   pattern=""
   timeZone=""
   parseLocale=""
   var=""
   scope=""/>

属性

属性 描述 是否必要 默认值
value 要显示的数字
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 指定一个自定义的格式化模式用与输出
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 Print to page
scope var属性的作用域 Page

标签

标签用来将给定的区域存储在locale配置变量中。

语法格式:

setLocale value="" variant="" scope=""/>

属性

属性 描述 是否必要 默认值
value 指定ISO-639 语言码和ISO-3166 国家码
variant 特定浏览器变体
scope Locale配置变量的作用域 Page

3.SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle、mysql、sqlserver等等)进行交互的标签。引用SQL标签的语法:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
指定数据源
运行SQL查询语句
运行SQL更新语句
将SQL语句中的参数设为指定值
将SQL语句中的日期参数设为指定的java.util.Date 对象值
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

用的较少不做详细讲解

4.XML标签

JSTL XML标签库提供了创建和操作XML文件的标签。引用XML标签的语法:

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
标签 描述
与<%= … >,类似,不过只用于XPath表达式
解析 XML 数据
设置XPath表达式
判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
迭代XML文档中的节点
本身只当做的父标签
的子标签,用来判断条件是否成立
的子标签,接在标签后,当标签判断为false时被执行

用的较少不做详细讲解

5.JSTL函数

JSTL包含一系列函数,大部分是通用的字符串处理函数。引用JSTL函数的语法:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
标签 描述 示例
测试输入的字符串是否包含指定的子串 , <要查找的子字符串>)}”>…
测试输入的字符串是否包含指定的子串,大小写不敏感 同上
测试输入的字符串是否以指定的后缀结尾 , <要查找的子字符串>)}”>…
跳过可以作为XML标记的字符 ${fn:escapeXml(<要转义标记的文本>)}
返回指定字符串在输入字符串中出现的位置 ${fn:indexOf(<原始字符串>,<子字符串>)}
将数组中的元素合成一个字符串然后输出 ${fn:join([数组], <分隔符>)}
返回字符串长度 ${fn:length(collection
将输入字符串中指定的位置替换为指定的字符串然后返回 ${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 ${fn:split(<带分隔符的字符串>, <分隔符>)}
测试输入字符串是否以指定的前缀开始 同fn:endsWith()
返回字符串的子集 ${fn:substring(, , )}
返回字符串在指定子串之后的子集 ${fn:substringAfter(, )}
返回字符串在指定子串之前的子集 ${fn:substringBefore(, )}
将字符串中的字符转为小写 ${fn.toLowerCase()}
将字符串中的字符转为大写 ${fn.toUpperCase()}
移除首位的空白符 ${fn.trim()}

自定义标签

自定义标签是用户自定义的jsp语言元素。当jsp包含一个自定义的标签时将被转为servlet。标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。

你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。

创建“Hello”标签

我们创建一个自定义标签,标签格式为:

<ex:Hello />

要创建自定义的JSP标签,首先需创建处理该标签的java类,创建一个HelloTag类,如下:

public class HelloTag extends SimpleTagSupport {

    //重写父类的方法
    public void doTag() throws JspException,IOException{
        JspWriter out = getJspContext().getOut();
        out.println("Hello Custom Tag!");
    }
}

以上代码重写了doTag()方法,方法中使用了getJSPContext()方法来获取当前的JspContext对象,并将“Hello Custom Tag!”传递给JspWriter对象。

编译以上类,并将其复制到环境变量CLASSPATH目录中。最后创建如下标签库:webapps\ROOT\WEB-INF\custom.tld

<taglib>
  <tlib-version>1.0tlib-version>
  <jsp-version>2.0jsp-version>
  <short-name>Example TLDshort-name>
  <tag>
    <name>Helloname>
    <tag-class>com.runoob.HelloTagtag-class>
    <body-content>emptybody-content>
  tag>
taglib>

接下来我们可以在jsp中使用自定义的标签:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tagtitle>
  head>
  <body>
    <ex:Hello/>
  body>
html>

以上程序输出结果:

Hello Custom Tag!

自定义标签属性

你可以在自定义标准中设置各种属性,要接收属性,值自定义标签类必须实现setter方法, JavaBean 中的setter方法如下所示:

public class HelloTag extends SimpleTagSupport {

   private String message;

   public void setMessage(String msg) {
      this.message = msg;
   }

   StringWriter sw = new StringWriter();

   public void doTag()
      throws JspException, IOException
    {
       if (message != null) {
          /* 从属性中使用消息 */
          JspWriter out = getJspContext().getOut();
          out.println( message );
       }
       else {
          /* 从内容体中使用消息 */
          getJspBody().invoke(sw);
          getJspContext().getOut().println(sw.toString());
       }
   }

}

属性的名称是”message”,所以setter方法​​是的setMessage()。我们在TLD文件中使用的元素添加此属性:

<taglib>
  <tlib-version>1.0tlib-version>
  <jsp-version>2.0jsp-version>
  <short-name>Example TLD with Bodyshort-name>
  <tag>
    <name>Helloname>
    <tag-class>com.runoob.HelloTagtag-class>
    <body-content>scriptlessbody-content>
    <attribute>
       <name>messagename>
    attribute>
  tag>
taglib>

我们在JSP文件中使用message属性:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tagtitle>
  head>
  <body>
    <ex:Hello message="This is custom tag" />
  body>
html>

注:还可以使用的属性

属性 描述
name 定义属性的名称。每个标签的属性名称必须是唯一的
required 指定属性是否是必须的或者可选的,如果设置为false为可选。
type 定义该属性的Java类类型 。默认指定为 String
description 描述信息

相关实例:

.....
    <attribute>
      <name>attribute_namename>
      <required>falserequired>
      <type>java.util.Datetype>
      <description>......fragment>
    attribute>
.....

你可能感兴趣的:(jsp)