前言
前面介绍了EL表达式,其实EL表达式基本上是和JSTL核心标签库搭配一起使用才能发挥效果的。接下来让我们一起来认识一下吧!
在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为、行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,
它能够获取各种对象,各种值,并且还不会抛出NullPointerException之类的错误,但是EL表达式功能还是有限,例如不能遍历集合等,因此为了完善JSP,让其完全不使用java代码,就有了jstl标签库,
使用jstl和EL的配合使用,基本上可以实现所有的功能,显示数据,遍历数据等。
一、JSTL概述
1.1、JSTL标签库简介
JSP虽然为我们提供了EL表达式用来替代JSP表达式,但是由于EL表达式仅仅具有输出功能,而不替代页面中的JSP脚本片段。
为了方便开发使用Sun公司又定义了一套通用的标签库名为JSTL(JSP Tag Standard Tag Library),里面定义很多我们开发中常用的方法,方便我们使用。JSTL的标准由Sun公司定制,Apache的Jakarta小组负责实现。
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
1.2、为什么要使用标签
JSP是用来显示数据的,前面我们在JSP中的HTML中嵌入java代码,与<%%>等混在一起,可读性和可维护性都很差,而且使用java脚本不便于代码重用,要实现比较复杂的显示功能,
也不方便,而JSP标签和HTML代码很类似,使用JSP标签显得JSP整洁而干净,可读性好,标签能够重复使用,所以就像我们上面说的,我们慢慢意识到不足,就自然在一步步改进,从使用JSP行为,
使用EL,在使用标签,都是为了一个目的,让JSP更加完全,方便,只显示数据,而不嵌入逻辑代码。这个涉及到了分层思想,后面说讲解到。
1.3、使用JSTL
使用JSTL必须在项目中导入两个jar包:
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.5.jar
然后还需要在JSP页面中通过taglib标签引入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix用来指定前缀名,我们通过该名来使用JSTL
uri相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库。
使用JSTL
<c:out value="hello"></c:out>
这个例子标识,调用前缀为c的标签的out方法,向页面中输出value属性中的字符串。
JSTL的使用非常像html标签。
注意:在MyEclipse中使用java5.0版本以上会自动导入jar包
打开c.tld可以查到uri的地址:http://java.sun.com/jsp/jstl/core
在JSP中使用JSTL添加这段代码来引包:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1.4、JSTL标签库组成
JSTL由五个不同功能的标签库组成
介绍JSTL各个标签库:
1)核心标签库中包含了实现WEB应用中的通用操作的标签。例如,用于输出一个变量内容的<c:out>标签、用于条件判断的<c:if>标签、用于迭代循环的<c:forEach>标签。
2)国际化/格式化标签库中包含实现WEB应用程序的国际化的标签。例如,设置JSP页面的本地信息、设置JSP页面的时区、绑定资源文件,使本地敏感的数据(例如数值、日期等)按照JSP页面中设置的本地格式显示。
3)数据库标签库中包含用于访问数据库和对数据库中的数据进行操作的标签。例如,从数据源中获得数据库连接、从数据库表中检索数据等。由于在软件分层的开发模型中,JSP页面仅用作表现层,
我们一般不在JSP页面中直接操作数据库,而是在业务逻辑层或数据访问层操作数据库,所以,JSTL中提供的这套数据库标签库没有多大的实用价值。
4)XML标签库中包含对XML文档中的数据进行操作的标签。例如,解析XML文档、输出XML文档中的内容,以及迭代处理XML文档中的元素。
因为XML广泛应用于WEB开发,对XML文档的处理非常重要,XML标签库使处理XML文档变得简单方便,这也是JSTL的一个重要特征。
5)JSTL中提供的一套EL自定义函数包含了JSP页面制作者经常要用到的字符串操作。例如,提取字符串中的子字符串、获取字符串的长度和处理字符串中的空格等。
二、core标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
讲解<c:out/>、<c:set/>、<c:remove/>、<c:if test=""/>、<c:choose />、<c:forTokens />、<c:catch /> 、<c:url />、 <c:redirect />、<c:forEach/>
2.1、<c:out/>标签
out :将指定内容输出到浏览器,默认支持el表达式。
格式:
<c:out value="" default="" escapeXml />
value:输出的值,可以为EL表达式
default:如果value属性的值不存在,会输出default属性值
excapeXml:如果为true,则会为value中的特殊字符进行转义,默认为true。
举例:
<c:out value="faker"></c:out><br />
<c:out value="${empty eng}"></c:out><br />
<c:out value="${eng}" default="没有eng对象"></c:out> <br />
<c:out value="<a>我是妞妞妞</a>" escapeXml="false"></c:out><br />
结果:
2.2、<c:set/>和<c:remove/>标签
1)<c:set/>
set标签:给指定作用域设置内容
格式一:
<c:set value=" " var=" " scope=" " />
value:设置值
var:设置属性
scope:设置作用域(page、reqeust、session、application)
注:其实作用就相当于pageContext.setAttribute(var,value,scope);
举例:
结果:
图中只介绍set标签的一种用法,其中var不能接受EL表达式,只能是字符.
格式二:
<c:set target="" property="" value="" />
target:跟var类似,但是它能够接受EL表达式,可以是一个对象,一个map等,和var进行互补。(要修改的域对象的属性名(必须是JavaBean或者Map)
property:对象中的属性名
value:属性赋值
举例:
使用哪种set标签,就看自己的需求了。
2)<c:remove/>标签
2.3、<c:if test=""/>标签
<c:if>用于实现if语句的判断功能
格式:
<c:if test=" " var=" " scope=" "></c:if>
test:设置if判断的条件,用于判断标签体是否被执行(参数类型:boolean)
var:用于指定接收判断结果的变量名(参数类型:boolean)
scope:指定判断结果保存到哪个域(参数类型:String)
举例:
<c:set var="loginUser" value="angelbaby" scope="session"></c:set>
<c:if test="${not empty sessionScope.loginUser }"> <%--当loginUser不为空时返回true-->
欢迎angelbaby
</c:if>
<c:if test="${empty sessionScope.loginUser }">
<a href="">登录</a>
</c:if>
2.4、<c:choose />、<c:when>、<c:otherwise>标签
<c:choose>、<c:when>、<c:otherwise>三个标签配合使用,功能类似于Java中的if/else
<c:choose>是<c:when>和<c:otherwise>的父标签
<c:when>的属性
test:用于设置判断条件,若正确则c:when中的代码执行,否则不执行(参数类型:boolean)
<c:otherwise>
作用:如果所有的<c:when>都没有执行则执行<c:otherwise>的标签体
举例1:
举例2:
<c:choose>
<c:when test="${param.age>=18 }">
您已经成年
</c:when>
<c:otherwise>
您未成年
</c:otherwise>
</c:choose>
2.5、<c:forEach/>标签
<c:forEach>用于对多个对象的集合进行迭代,重复执行标签体,或者重复迭代固定的次数。(增强的for循环)
格式:
<c:forEach items="" var="" />
var:用于存放遍历的每一项内容,存放在page作用域,只能在循环体中使用(也就是设置遍历出对象的名称)(参数类型:String)
items:需要遍历的对象(参数类型:数组、字符串和各种集合)
举例:
1)items为字符串或字符串数组
为字符串,直接输出。为字符串数组,遍历输出
结果:
2)items为list集合
结果:
3)items为map集合
结果:
4)普通for循环
begin:从1开始
end:到10结束
step:每次加2
var:循环的变量
2.6、<c:forTokens > 标签
将自定义字符串,按照指定字符进行分割,并遍历输出
格式:
<c:forTokens items="" delims="" var=""></c:forTokens>
items:自定义字符串
delims:指定字符
var:遍历的变量名。
举例:
结果:
2.7、<c:catch > 标签
相当于try catch
格式:
var:捕捉后的异常对象
举例:
结果:
2.8、<c:url />标签
记得讲session的时候,如果cookie禁用了,那么只能将url进行重写才能让session继续生效,而使用的api是response.encodeURL();就是将SESSIONID当作参数带过来,而url标签的作用就是实现类似功能
格式:
<c:url value="" var="" scope="" />
value:设置要处理的URI地址,注意这里要以/开头(可接受参数:String)
var:如果写了该变量,那么就会将其重写后的url存入page作用域中,如果scope没有的话,默认就是page,否则以scope属性值为准,在作用域范围内就可以直接拿着这个变量使用了。(修改后存储到域对象中的uri属性名)
scope:作用域范围,默认是page。( 可接受参数:String)
举例:
测试:
访问后点击超链接
没有关闭cookie,所以不会将SESSIONID写入url中 。
2.9、<c:redirect />标签
<c:redirect>主要用于将请求重定向到另一个资源地址
格式:
uri:指定要重定向到的目标地址,注意这里指定绝对路径会自动加上项目名( 参数类型:String)
举例:
2.10、<c:import />标签
类似于JSP的include行为和include指令,JSTL也提供了include功能的标签<c:import/>,不过import标签功能更强大,甚至可以把Internet上的网页包含进来。
<c:import url="http://www.baidu.com" charEncoding="utf-8"/>
举例:
结果:
三、fmt标签库
3.1、fmt标签库概述
为了简化WEB应用的国际化开发,JSTL中提供了一个用于实现国际化和格式化功能的标签库,我们将其简称为国际化标签库,JSP规范为国际化标签库建议的前缀名为fmt。
国际化标签库中包括了一组用于实现WEB国际化功能的标签,这组标签封装了Java语言中java.util和java.text这两个包中与国际化相关的API类的功能。
国际化标签库中提供了绑定资源包和从资源包中的本地资源文件内读取文本内容的标签,也提供了对数值和日期等本地敏感的数据按本地化信息进行显示和解析的标签,还提供了按本地特定的时区来调整时间的标签。
3.2、fmt的使用
使用前:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
这个标签库其实用的不多,我们就简单介绍一下
1)<fmt:requestEncoding/>设置编码
标签只有一个属性,value
相当于Java中的request.setCharacterEncoding("");
post提交中文参数,使用<fmt:requestEncoding value="utf-8"/>来设置编码,就不会出现中文乱码了。
get提交中文参数,该标签就会失效,除非到TOMCAT的server.xml中,将URLEncoding设置为UTF-8(默认为ISO-8859-1)。
2)<fmt:setLocale/>显示所有地区的数据格式
大概就讲这些了,如果要用的话,到时候在详细查资料!喜欢 就点个“推荐”哦!
JavaWeb(五)之JSTL标签库的更多相关文章
-
JavaWeb总结(七)—JSTL标签库
一.JSTL标签库介绍 JSTL标签库的使用时为了弥补HTML标签的不足,规范自定义标签的使用而诞生的.使用JSTL标签的目的是不希望在JSP中出现Java逻辑代码. 二.JSTL标签库的分类 1.核 ...
-
JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)
JSTL JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用: 提供给Java Web开发者一个标准通用的标签函数库 和E ...
-
JavaWeb基础—EL表达式与JSTL标签库
EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...
-
JavaWeb学习篇之----自定义标签&;&;JSTL标签库详解
今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...
-
【JavaWeb】JSTL 标签库
JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...
-
JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...
-
javaweb学习总结(二十八)——JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
-
javaWeb学习总结(9)- JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
-
JavaWeb学习笔记(九)—— JSTL标签库
一.JSTL概述 1.1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...
随机推荐
-
Openstack+Kubernetes+Docker微服务实践之路--Kubernetes
经过几番折腾终于搞定Kubernetes了,我们要在Openstack上部署Kubernetes集群,使用最新工具Kubeadm来安装,由于不能直接访问Kubernetes的源,我们需要一台可以穿墙的 ...
-
React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
-
ASP------如何读取文件内容
<body> @{ var dataFile = Server.MapPath("~/App_Data/Persons.txt"); Array list = File ...
-
nodejs fs 模块的用途
/*** New node filefs 操作*/var fs = require(“fs”); /*创建文件 var fileName = “anps_hsj”;fs.mkdir(fileName, ...
-
折腾Java设计模式之解释器模式
解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...
-
Android APK反编译(二)
参考:APK反编译 工具介绍 apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件) ...
-
[原][openstack-pike][controller node][issue-4][horizon] dashboard access too low reasons[dashboard 访问太慢]
本文持续更新... 原因一: 访问dashboard 很慢. 输入了用户名和密码还有project后,一直处于首页状态,等很久才进入(暂且不考虑硬件.硬件暂时假设都满足条件) 首先想到的是memca ...
-
牛客网练习赛23 F 托米的游戏
链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...
-
babel-loader和webpack UglifyJS一起使用时console的问题
一起使用babel-loader和webpack UglifyJS时,babel会优先处理一遍代码,编译后的代码才进入webpack进行打包和优化操作. 出处:https://www.tangshua ...
-
C++ - 类的虚函数\虚继承所占的空间
类的虚函数\虚继承所占的空间 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24236469 char占用一个字节, 但不满足4的 ...