JavaWeb(五)之JSTL标签库
前言
前面介绍了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动作标签一样,只不过它不是 ...
随机推荐
- 自动化测试:behave
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 一、Nginx安装手册
1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有g ...
- WebApi Ajax 跨域请求解决方法(CORS实现)(作者:jianxuanbing)
概述 ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特别各 ...
- 制作Visual Studio 2017 (VS 2017) 离线安装包
史上功能最强大的Visual Studio 2017版本发布,但是由于版本更新速度加快和与第三方工具包集成的原因,微软研发团队没有为这个版本提供离线下载的安装文件.如果用户处在一个与外网隔离的网络环境 ...
- JDBC(一)之细说JDBC
Properties info = new Properties();//要参考数据库文档 info.setProperty("user", "root"); ...
- 【ctrl+A】与【ctrl+单击图层缩略图】有什么区别?
如果这图层没有透明区域的话那和ctrl+A的效果是一样的! 但如果图层有不透明区域,那选中的就是图层中所有不透明的区域!
- JSP小记
0.配置servlet的模板 1.找Jar文件:\Common\plugins (myeclipse.ini文件中查看) * com.genuitec.eclipse.wizards*.jar 2.找 ...
- Java第七周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...
- 201521123010 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123038 《Java程序设计》 第四周学习总结
201521123038 <Java程序设计> 第四周学习总结 1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.通过 ins ...