JSTL

1.什么是JSTL

JSTL(JavaServer Pages Standard Tag Library)-JSP标准标签库,由SUN公司推出的,由Apache Jakarta 组织负责维护的用于编写和开发JSP页面的一组标准标签。

2.版本

STL的发布包有两个版本:

  • Standard-1.0 Taglib
  • Standard-1.1 Taglib

3.标签函数库

JSTL所提供的标签函数库主要分为五大类:

  • 核心标签库(Core tag library)
  • I18N 格式标签库 (I18N-capable formatting tag library)
  • SQL标签库(SQL tag library)
  • XML 标签库 (XML tag library)
  • 函数标签库(Functions tag library)

4.优点

(1)提供一组标准标签

(2)可用于编写各种动态JSP页面

(3)用于访问数据库,有条件地执行代码和支持国有化

JSTL基本概念

标签(Tag)

标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的

标签库(Tag library)

由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库

标签库描述文件(Tag Library Descriptor)

标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的,一般以.tld作为文件的扩展名

标签处理类(Tag Handel Class)

标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能

在Web应用中使用JSTL

Jar包

  1. 要在Web应用中使用JSTL,需要用到JSTL的jar包,分别是jstl.jarstandard.jar
  2. MyEclipse6.5的开发环境中含有JSTL jar包,在创建Web工程时在“J2EE Specification Level”选项下勾选为“Java EE 5.0”,则JSTL的jar包自动添加到Web应用的lib目录下

核心标签库的使用

标签库内容

核心标签库

  • 通用标签
  • 条件标签
  • 迭代标签

通用标签库

  • set
  • remove
  • out
<!--将level 4这个的值存储到范围为session的userLevel变量之中-->
<c:set var="userLevel" value="level 4" scope="session"/> <!--将JavaBean的属性值存储至范围为pageScope的cid变量之中-->
<c:set var="cid" value="${acc.accId}"/> <!--将标签体里面的值存储至范围为sessionScope的users变量之中-->
<c:set var="users" scope="session"> bush, tom, jack
</c:set>
<!--将value的值存储至范围为sessionScope的名为acc的JavaBean实例的accName属性之中-->
<c:set target="${acc}" property="accName" value="猪八戒" scope="session"/> <!--将标签体里面的值存储至范围为pageScope的名为acc1的JavaBean实例的accName属性之中-->
<c:set target="${acc1}" property="accName">
${acc.accName}
</c:set>
  <c:remove var="users"/>
删除后,输出1:<br>userLevel= <c:out value="${pageScope.userLevel}"/><br>
cid= <c:out value="${cid}"/><br>
users= <c:out value="${users}"/><br>
<jsp:useBean id="acc1" class="bean.Account" scope="session"/>
<c:set target="${acc}" property="accName" value="猪八戒"/>
<c:set target="${acc1}" property="accName">
${acc.accName}和猪小戒
</c:set>
输出2:
<br>
acc.accName=<c:out value="${acc.accName}"/> <br>
acc1.accName=<c:out value="${acc1.accName}"/> <br>
</body> </html>

条件标签

  • if
  • choose

<c:if>用于进行条件判断,如果它的test属性为true,那么就计算标签体的内容,如果为false,就忽略标签体的内容

<c:choose>标签的作用类似于Java语言的switch语句,它用于执行条件语句块

<c:choose>
<c:when test="${acc.balance < 0}">
<font color="red">开户金额不能是负数!</font>
</c:when>
<c:when test="${ user.age>=0&&acc.balance <10 }">
<font color="red">开户金额至少是10元!</font>
</c:when>
<c:otherwise>
<font color="green">开户金额OK!</font>
</c:otherwise>
</c:choose>
</body> </html>
<%@ page contentType="text/html; charset=gbk" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<jsp:useBean id="acc" class="bean.Account" scope="session"/>
<c:set value="${param.accId}" target="${acc}" property="accId" />
<c:set value="${param.accPwd}" target="${acc}" property="accPwd" />
<c:set value="${param.balance}" target="${acc}" property="balance" />
<html>
<body>
<c:if test="${acc.accId =='95599' && acc.accPwd==' 888'}" var = "result" scope= "page"/>
<c:if value="${result}">
欢迎你!<c:out value ="acc.accName"/>
</c:if >
<c:if value="${!result}">
你的卡号或密码不正确,请重新输入!
</c:if >

迭代标签

  • forEach
  • forTokens

<c:forEach>标签的作用是遍历集合中的元素或者是有条件的重复计算标签体的内容

例子:使用迭代标签来遍历隐式对象header和cookie集合中的元素

<%@ page contentType="text/html; charset=gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>显示请求头的内容和Cookie内容</title>
</head>
<body>
读取请求头的信息<br>
<table border="1">
<tr bgcolor="green"><td>请求头</td><td>请求名</td></tr>
<c:forEach items="${header}" var="head" varStatus="status">
<c:if test="${status.count % 2 !=0}">
<tr bgcolor="pink"> <td>${head.key}</td><td>${head.value}</td></tr>
</c:if>
<c:if test="${status.count % 2 ==0}">
<tr bgcolor="white"> <td>${head.key}</td><td>${head.value}</td></tr>
</c:if>
</c:forEach>
</table>
<br>
读取cookie里的信息 <br>
<table border="1" width="300">
<tr bgcolor="green"><td>cookie名</td><td>cookie值</td></tr>
<c:forEach items="${cookie}" var="cook" varStatus="st">
<c:choose>
<c:when test="${st.count % 2 != 0}">
<tr bgcolor="pink"> <td>${cook.key}</td><td>${cook.value}</td></tr>
</c:when>
<c:otherwise>
<tr bgcolor="white"> <td>${cook.key}</td><td>${cook.value}</td></tr>
</c:otherwise>
</c:choose>
</c:forEach>
</table>
</body>
</html>

<c:forEach>标签还有另外的用法就是重复做标签体内指定的事情,相当与for或while循环

例子:根据步长循环输出数

<%@page contentType="text/html; charset=gbk"%>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<html>
<head>
<title>循环输出数</title>
</head
<h4>循环输出数,步长为1</h4>
<c:forEach var="i" begin="1" end="10">
<c:out value="${i}"/>&nbsp;&nbsp;
</c:forEach>
<h4>循环输出数,步长为2</h4>
<c:forEach var="i" begin="1" end="10" step="2">
<c:out value="${i}"/>&nbsp;&nbsp;
</c:forEach>
</body>
</html>

<c:forEach var="accs" items="${accs}" begin="2" end="8" step="2">
<tr>
<td><c:out value="${accs.accId}"/></td>
<td><c:out value="${accs.accName}"/></td>
<td><c:out value="${accs.accPwd}"/></td>
</tr>
</c:forEach>

<c:forTokens>这个标签专门用于处理字符串的迭代,可以指定一个或者多个分隔符

例子:分别使用“|”、“|,”、“_”作为分隔符来分割的字符串是“bule,red,green|yellow|pink,black|white”

<h4>使用"|"作为分割符</h4>
<c:forTokens var="token" items="bule,red,green|yellow|pink,black|white" delims="|">
<c:out value="${token}"/>&copy;
</c:forTokens>
<h4>使用"|,"作为分割符</h4>
<c:forTokens var="token" items="bule,red,green|yellow|pink,black|white" delims="|,">
<c:out value="${token}"/>&copy;
</c:forTokens>
<h4>使用"_"作为分割符</h4>
<c:forTokens var="token" items="bule,red,green|yellow|pink,black|white" delims="_">
<c:out value="${token}"/>&copy;
</c:forTokens>

国际化标签的使用

概念

国际化的英文是Internationalization,在第一字母I和最后一个字母N之间共有18个字母,所以简称I18N

国际化是指在软件的设计阶段,就应该使软件具有支持多种语言和国家或地区的功能

一个软件支持国际化,应该具备这些特征:

–当软件需要支持新的语言时,不需要修改其代码

–文本、消息和图片从源程序中提取出来,存储在外部

–软件应该根据用户的语言和地理位置,对与特定文化相关的数据,如日期、时间和货币,进行格式化

–支持非标准的字符集

Web应用程序中的国际化是指Web服务器可以根据不同的客户端的当地的语言环境来显示与语言环境匹配的页面内容和对数字、货币等进行格式化,符合当地用户的文化习惯

我们通过更改IE浏览器的语言设置来修改客户端的语言环境

支持国际化的Java类

//返回客户浏览器的首选的语言环境
Locale local = request.getLocale();
//返回支持多语言环境Enumeration对象,按优先级降序排列的Locale对象集合
Enumeration enum = request.getLocales();
  • Web应用程序的国际化依赖于两个特定的Java类,分别是java.util.Locale类和java.util.

    ResourceBundle类
  • Locale类的实例表示了特定的地理、政治和文化地区
  • Locale对象本身并不执行和国际化想关的格式化或解析工作,它仅仅负责向本地敏感的类提供本地化信息
  • ResourceBundle类称为资源包,它包含特定于语言环境的对象
  • 当程序需要一个特定于语言环境的资源时(如String),程序可以从适合当前用户语言环境的资源包中加载它
  • Java虚拟机在启动时会自动查询本地的操作系统,为运行环境设置默认的Locale
  • Web容器在其本地环境中通常会使用默认的Locale,对于特定的客户端,Web容器会从HTTP请求头中获取Locale信息
  • 在Web应用中,用户不需要创建Locale对象实例,Web容器会负责创建Locale实例

JSTL中的国际化常用标签

  • <fmt:setLocale>

    用于重新指定客户端的语言环境

    <fmt:setLocale value="zh_tw"/> 表示设置客户端的本地环境为繁体中文
  • <fmt:bundle>

    <fmt:bundle>标签用来创建I18N的本地化上下文,并将资源包加载在其中,资源包的名称由<fmt:bundle>标签中的basename属性指定

    <fmt:bundle  basename="basename">
    标签体内容
    </fmt:bundle>
  • <fmt:setBoundle>

    用来创建I18N的本地化上下文,并将资源包存储在某个作用域范围中

    <fmt:setLocale value="zh_CN"/>
    <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
  • <fmt:message>

    用来给出资源包的输出值

    <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
    <fmt:bundle basename="applicationAllMessage">
    <fmt:message key="userName" /> <br>
    <fmt:message key="passWord" bundle="${applicationBundle}" />
    </fmt:bundle>

实例:帐号注册页面的国际化例子

message_en.properties和message_zh_CN.properties资源文件

page_title0=\u94F6\u884C\u5E10\u53F7\u6CE8\u518C\u9875\u9762
page_mes1=\u8BF7\u8F93\u5165\u4F60\u7684\u4E2A\u4EBA\u4FE1\u606F
page_mes2=\u5E10\u53F7\uFF1A
page_mes3=\u540D\u5B57\uFF1A
page_mes4=\u5BC6\u7801\uFF1A
page_mes5=\u5F00\u6237\u91D1\u989D\uFF1A
page_action1=\u6CE8\u518C
<head><fmt:setBundle basename="message"/>
<title><fmt:message key="page_title0" /></title>
</head> <body>
<form action="showinfo.jsp" method="post">
<fmt:message key="page_mes1"/> <br>
<fmt:message key="page_mes2"/><input type="text" name="accId"><br>
<fmt:message key="page_mes3"/><input type="text" name="accName"><br>
<fmt:message key="page_mes4"/><input type="password" name="accPwd"><br>
<fmt:message key="page_mes5"/><input type="text" name="balance"><br>
<input type="submit" value='<fmt:message key="page_action1"/>'>
</form> </body>

格式化标签的使用

支持格式化的Java类

  • Web应用程序的格式化标签依赖于三个特定的Java类,分别是java.util.TimeZone类、java.text.

    DateFormat类和java.text.NumberFormat
  • TimeZone类的实例包含了一个与格林威治标准时间(GMT)相比较得出的以微秒为单位的时区偏移量,它还可以用来处理夏令时
  • 在Java中,使用时区ID来表示一个时区,美国太平洋时区的时区ID 是"America/Los_Angeles"
  • DateFormat类是用来格式化日期/时间的抽象类,它以与语言无关的方式格式化并解析日期或时间
  • 使用DateFormat提供的类方法,可以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间Formatter,用来格式化Date对象
  • DateFormat可帮助进行格式化并解析任何语言环境的日期
  • 在实际的应用中,我们一般使用的比较多的是DateFormat类的子类SimpleDateFormat,因为它能够很方便的使用自定义日期和时间的模式来格式化Date对象
  • NumberFormat类是所有数值格式的抽象基类,该类提供格式化和解析数值的接口。NumberFormat类可用于格式化和解析任何语言环境的数值

格式化标签

<fmt:timeZone>
<fmt:formatDate>
<fmt:formatNumber>
<fmt:setTimeZone>
<fmt:parseDate>
<fmt:parseNumber>

<fmt:setTimeZone>这个标签都用于设定页面时间的时区

<fmt:timeZone>这个标签用于在标签体内使用value指定的时区

<fmt:formatDate>标签用于格式化日期

<body><fmt:setLocale value=" en_US "/>
<fmt:timeZone value="GMT-8">
<jsp:useBean id="now" class="java.util.Date" scope="page" />
<fmt:formatDate value="${now}" type="date" /><br>
<fmt:formatDate value="${now}" type="time" /><br>
<fmt:formatDate value="${now}" type="both" /><br>
<fmt:formatDate value="${now}" type="date" timeStyle="default" /><br>
<fmt:formatDate value="${now}" type="date" dateStyle="full" /><br>
<fmt:formatDate value="${now}" type="time" timeStyle="default" /><br>
<fmt:formatDate value="${now}" type="time" timeStyle="short" /><br>
<fmt:formatDate value="${now}" type="time" timeStyle="medium" /><br>
<fmt:formatDate value="${now}" type="time" timeStyle="long" /><br>
<fmt:formatDate value="${now}" type="time" timeStyle="full" /><br>
<fmt:formatDate value=“${now}” type=“both” pattern="EEEE, MMMM d, yyyy HH:mm:ss Z" /><br>
<fmt:formatDate value="${now}" type="both"
pattern="d MMM yy, h:m:s a zzzz" /><br>
</fmt:timeZone></body>

  • <fmt:parseDate>标签用于解析一个日期,并将结果作为

    java.lang.Date类型的实例返回。<fmt:parseDate>标签和<fmt:formatDate>标签的作用正好相反
  • <fmt:formatNumber>标签用来格式化数字,实际上是对应

    java.util.NumberFormat 类
<fmt:formatNumber value="12" type="currency" pattern=".00元"/>
将显示 12.00元
<fmt:formatNumber value="12" type="currency" pattern=".0#元"/>
将显示 12.0元
<fmt:formatNumber value="1234567890" type="currency"/>
将显示 ¥1,234,567,890.00 (当前Web服务器的语言环境设定为zh_CN)
<fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/>
将显示 123,456.79
<fmt:formatNumber value="12" type="percent" />
将显示 1,200%

<fmt:parseNumber> 标签用于解析一个数字,并将结果作为 java.lang.Number 类的实例返回。<fmt:parseNumber>标签和<fmt:formatNumber>标签的作用正好相反

总结

  • 通用标签用于在JSP页面里面创建、删除和显示中的变量值
  • 条件标签用于支持JSP页面中的各种条件
  • 迭代标签用于遍历某个集合中的元素
  • 国际化标签用来根据客户端的不同语言环境显示不同的页面内容
  • 格式化标签可以格式化数字、时间和货币

【Javaweb】JSP标准标签库的更多相关文章

  1. JavaWeb:JSP标准标签库

    JavaWeb:JSP标准标签库 说明 什么是JSTL? JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍 ...

  2. JSP 标准标签库(JSTL)

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  3. JSP 标准标签库(JSTL)之最常用的JSTL标签总结

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-t ...

  4. jsp标准标签库

    抄袭自:http://www.cnblogs.com/hongten/archive/2011/05/14/2046005.html JSP标准标签库     Pass by xkk ,and aut ...

  5. JSTL的全称:JSP Standard Tag Library, jsp 标准标签库

    JSTL的全称:JSP Standard Tag Library, jsp 标准标签库 JSTL的作用     提供给Java web开发人员一个标准通过的标签函数库和EL来取代传统直接在页面上嵌入j ...

  6. JSTL(JSP Standard Tag Library ,JSP标准标签库)

    JSTL标签之核心标签   JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断.数据管 ...

  7. JSP标准标签库(JSTL)--JSTL简介与安装

    对于MVC设计模式来讲,我们一直强调,在一个JSP钟scriptlet代码越少越好,但是只靠以前的概念很难实现,因为标签的开发特别麻烦,所以为了简化标签,也为了让标签更具备一些通用性,所以一般在开发中 ...

  8. JSP 标准标签库JSTL

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供 ...

  9. JSP标准标签库:JSTL

    JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能. jstl出现的目的同el一样也是要代替jsp页面中的脚本代码. ...

  10. JSTL(JSP标准标签库)

    JSP标准标签库(JavaServer Pages Tag Library, JSTL)是一个定制JSP标签库的集合,封装了JSP应用的通用核心功能.用来解决像遍历Map或集合.条件测试.XML处理, ...

随机推荐

  1. kmemleak 和kasan 的区别

    kmemleak 和kasan 都是 Linux 内核中的一些工具和特性,用于帮助进行内存错误检测和修复.然而,它们之间有一些区别: 功能:kmemleak 用于检测内核中未释放的内存泄漏,它可以跟踪 ...

  2. DiTAC:不知如何提升性能?试试这款基于微分同胚变换的激活函数 | ECCV'24

    非线性激活函数对深度神经网络的成功至关重要,选择合适的激活函数可以显著影响其性能.大多数网络使用固定的激活函数(例如,ReLU.GELU等),这种选择可能限制了它们的表达能力.此外,不同的层可能从不同 ...

  3. ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南

    作者:运维有术 前言 知识点 定级:入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 ...

  4. 函数计算平台 OpenFunction 在自动驾驶领域的应用

    嘉宾 | 霍秉杰 整理 | 王新 出品 | CSDN 云原生 2022 年 5 月 10 日,在 CSDN 云原生系列在线峰会第 4 期"ApacheSkyWalking 峰会"上 ...

  5. 华为Ensp拓扑,使用MSTP、OSPF、DHCP、VRRP、链路聚合、CHAP

    OSPF+DHCP+VRRP+Eth-trunk+PPP(CHAP)+MSTP 实验目标: LSW1和LSW2核心交换机互为备份,配置链路聚合,设备冗余设计,LSW1和LSW2作为核心交换机配置DHC ...

  6. windows涉及所有协议及默认端口

    名称 协议 端口 说明 echo tcp/udp 7 echo服务 discard tcp/udp 9 用于连接测试的空服务 systat tcp/udp 11 链接端口系统状态 daytime tc ...

  7. 在使用asm包进行动态类加载的时候的打包问题

    如图所示,开发时使用的jdk包下面的asm包,在进行打包时提示asm包不存在,打包方式使用如下: 目前提供两种解决方案: 1:修改打包方式,将jdk的包也打进去: <plugin> < ...

  8. Ubuntu安装Edge浏览器,好用的浏览器!!

    秉持着简介的原则,我这里把重要的步骤记录下来,减少废话的使用量,大大缩短你们看的时间,好吧.. 步骤 首先,使用以下命令更新您的系统: sudo apt update 然后,使用以下命令安装Micro ...

  9. Mac终端zsh设置快捷键的两种方法

    vim ~/.zshrc # 第一种 alias test_1='command' # 第二种 function test_2() { command }

  10. 共享存储ISCSI

    建立共享iscsi磁盘组 资源环境 服务端:192.168.2.131 客户端:192.168.2.[110,169] 服务端磁盘: [root@centos ~]# lsblk NAME MAJ:M ...