JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

小编 2026-06-27 阅读:979 评论:0
什么是JSTLJSTL全称为 JSP Standard Tag Library 即JSP标准标签...

什么是JSTL

JSTL全称为 JSP Standard Tag Library 即JSP标准标签库

JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!

为什么要使用JSTL

  • EL表达式不够完美,需要JSTL的支持!在JSP中,我们前面已经用到了EL表达式,体会到了EL表达式的强大功能:使用EL表达式可以很方便地引用一些JavaBean以及其属性,不会抛出NullPointerException之类的错误!但是,EL表达式非常有限,它不能遍历集合,做逻辑的控制。这时,就需要JSTL的支持了
  • Scriptlet的可读性,维护性,重用性都十分差!JSTL与HTML代码十分类似,遵循着XML标签语法,使用JSTL让JSP页面显得整洁,可读性非常好,重用性非常高,可以完成复杂的功能!
  • 在JSP中不推荐使用scriptlet输出,推荐使用JSP标签。

使用JSTL标签库步骤:

  1. 导入jstl.jar和standard.jar开发包
  2. 在JSP页面中用tablib指令引入需要用到的JSTL标签

core标签库

  • core标签库是JSTL的核心标签库,实现了最基本的功能:流程控制、迭代输出等操作
  • core标签库的前缀一般是c

c:out

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 简单使用一下
    <%        session.setAttribute("name", "zhongfucheng");    %>        //<c:out/>标签支持标签体,default属性上的数据可以写在标签体中    //<c:out value="${name}" escapeXml="true">您要的数据找不着</c:out>    <c:out value="${name}" default="您要的数据找不着" escapeXml="true"/>    
  • 我们发现上面的代码实现的效果和EL表达式是一样的它出色的地方就多了两个属性,default和escapeXml属性。如果我们用到这两个属性,我们就使用该标签,如果没有用到这两个属性就用EL表达式就可以了。

c:set

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 该标签有5个属性,用起来有稍微有些复杂了!现在要记住的就是:var属性操作的是Integer、Double、Float、String等类型的数据,target属性操作的是JavaBean或Map对象的数据,scope代表的是Web域,value是值,property是对象的属性

使用var属性

  • 既然var属性只能操作Integer、Double、String等类型,那么存在var属性就一定没有property属性(property代表的是对象的成员属性,Integer、String这些类型哪来的成员变量呀)

  • 下面的代码流程是这样的:创建了一个name的变量,设置的值为zhongfucheng,范围是page

    <c:set var="name" value="fucheng" scope="page"/>        ${name}
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 当然了,set标签也支持标签体,value的值可以写在标签体里边
    <c:set var="name" scope="page">        zhongfucheng    </c:set>
  • 使用var属性和scope属性实现计数器
    <%--由于下面变量需要做加法运算,所以要定义出来,不然服务器是不知道我的变量是Integer类型的--%>    <%        Integer sessionCount = 0;        Integer applicationCount = 0;    %>    <c:set var="sessionCount" value="${sessionCount+1}" scope="session"/>        <c:set var="applicationCount" value="${applicationCount+1}" scope="application"/>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

使用target属性

  • 使用target属性与之配对的是property属性,target属性只能操作JavaBean或Map对象,property就是对应的成员变量或key了。
  • 既然target属性操作的是JavaBean或Map对象,那么一定是通过EL表达式来获取到对象了。taget属性如果获取不到数据会抛出异常!使用target属性就一定没有scope属性(scope属性代表的是保存范围,target的值都是获取来的,难道你还能改变人家的范围?)
    <%--创建出JavaBean对象,设置为session范围的属性--%>    <jsp:useBean id="person" class="domain.Person" scope="session"/>        <%--获取到person对象,设置age属性的值为32--%>    <c:set target="${person}" property="age" value="32"/>        ${person.age}
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

c:remove

remove标签就相当简单了,只有var和scope属性,代表的是删除域范围的属性

  • 下面简单来测试一下吧:
    <%--创建出JavaBean对象,设置为session范围的属性--%>    <jsp:useBean id="person" class="domain.Person" scope="session"/>        <%--获取到person对象,设置age属性的值为32--%>    <c:set target="${person}" property="age" value="32"/>        ${person.age}    <br>        <%--删除session属性--%>    <c:remove var="person" scope="session"></c:remove>    ${person.age==null?"存在session的person对象被删除了!":"我还在呢!"}
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

c:catch

该标签主要用来处理程序中产生的异常。

catch标签也十分简单,只有一个var属性,var属性封装了异常的信息!

    <%--创建出JavaBean对象,设置为session范围的属性--%>    <jsp:useBean id="person" class="domain.Person" scope="session"/>        <c:catch var="message">            <%--target属性只能是EL表达式,现在我是字符串,获取不到对象,肯定会抛出异常的!--%>        <c:set target="person" property="age" value="32"/>        </c:catch>        ${message}
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

c:if

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

JSTL提供了if标签完成分支语句的实现,test属性是不可或缺的

var和scope属性我看来好像没什么用的(保存执行结果有什么用?)

  • 根据传递过来的参数的不同显示不同的页面!
    <%--如果带过来的名字是zhongfucheng,那么可以登陆--%>    <c:if test="${param.name=='zhongfucheng'}">        用户名:<input type="text" name="username"><br>        密码:<input type="password" name="password"><br>        <input type="submit" value="登陆">    </c:if>        <%--如果带过来的名字是ouzicheng,那么就是注册--%>    <c:if test="${param.name=='ouzicheng'}">        用户名:<input type="text" name="username"><br>        密码:<input type="password" name="password"><br>        <input type="submit" value="注册">    </c:if>
  • 注意地址栏的参数!

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:choose

if标签没有else的功能,如果需要类似于java中的if else流程就需要使用choose标签。

choose标签需要联合when和otherwise标签一起使用!

    <c:choose>        <c:when test="${param.name=='zhongfucheng'}">            你好啊,zhongfucheng        </c:when>        <c:when test="${param.name=='ouzicheng'}">            你好啊,ouzicheng        </c:when>        <c:otherwise>            你是谁啊?别随便过来!        </c:otherwise>    </c:choose>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:forEach

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

forEach为循环标签,相当于Java中的while和for

  • 之前我们在使用EL表达式获取到集合的数据,遍历集合都是用scriptlet代码循环,现在我们学了forEach标签就可以舍弃scriptlet代码了。

  • 向Session中设置属性,属性的类型是List集合

    <%        List list = new ArrayList<>();        list.add("zhongfucheng");        list.add("ouzicheng");        list.add("xiaoming");            session.setAttribute("list", list);    %>
  • 遍历session属性中的List集合,items:即将要迭代的集合。var:当前迭代到的元素
    <c:forEach  var="list" items="${list}" >        ${list}<br>    </c:forEach>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 遍历Map对象有稍微地不一样,我们来看一下,var属性保存的不是每个迭代的对象,而是Map.Entry。
    <%        Map map = new HashMap();        map.put("1", "zhongfucheng");        map.put("2", "xiaohong");        map.put("3", "xiaoming");            session.setAttribute("map",map);    %>        <c:forEach  var="me" items="${map}" >            ${me.key}  ${me.value}<br>        </c:forEach>

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • begin默认从0开始、end默认为集合的最后一个元素、step默认为1

  • varStatus代表着当前对象被迭代的信息,它有以下的属性
    • index【返回当前是第几个对象,从0开始计数】
    • count【已经遍历多少个对象了,从1开始计数】
    • first【是否是第一个】
    • last【是否是最后一个】
    • current【当前被迭代的对象】
    • begin【开始的位置】
    • end【最后的位置】
    • step【步长】
    <c:forEach  var="list" items="${list}" varStatus="varStatus" >            ${list}您的下标是:${varStatus.index}<br>        </c:forEach>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:forTokens

该标签类似于String类的split()和for循环的一种集合

它与forEach标签非常相似,都有begin、end、step、items、var、varStatus属性,不同的是forTokens标签的items属性里面是字符串,这个字符串会被delims属性的内容分割成多个字符串!

    <c:forTokens items="zhongfucheng,ouzicheng,xiaoming,xiaohong" var="name" delims="," >        ${name}    </c:forTokens>
  • 效果图:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:import

import标签类似于JSP行为<jsp:include/>和JSP指令<%include>

import标签的属性:

  1. url【指定要包含的路径,Internet所有的url都可以】
  2. context【访问同一个web容器的其他资源,以"/"开头】
  3. var【保存导入的文件的内容,以String类型存储】
  4. socpe【保存的范围,默认是page】
  5. charEncoding【字符编码】
  6. varReader【保存导入文件的内容,以Reader类型存储】

当然了,import标签功能更加更大!强大在哪里呢?import标签可以引入Internet网页上的内容,也就是说,csdn也可以引入进来!

  • 我们来用一下把!
    <c:import url="http://www.csdn.net" charEncoding="UTF-8" />
  • 我们一看,是没有样式的

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 打印csdn的源代码
    <c:import url="http://www.csdn.net" charEncoding="UTF-8" var="net"/>        CSDN的源码是:<br><br><br><br><br>    <c:out value="${net}" escapeXml="true"></c:out>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:param

  • 在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。


c:url

url标签十分实用!在浏览器禁用Cookie的时候,我们之前学Servlet时解决办法是:response.encodeURL()。url标签也可以实现这样的功能,再配合param标签使用,就十分实用了!

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 我们配合param标签来使用一下吧
    <c:url value="2.jsp" var="url">        <c:param name="name" value="中国!">        </c:param>    </c:url>        <a href="${url}">我经过了URL地址重写!</a>
  • 效果:

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


c:redirect

redirect标签用于实现Redirect功能,当然了,此标签也能够配合param标签使用!

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

  • 简单使用一下,重定向到2.jsp,带了一个参数
    <c:redirect url="2.jsp" >        <c:param name="name" value="zhongfucheng">        </c:param>    </c:redirect>
  • 在2.jsp中获取到参数

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】


fmt标签库

fmt标签库也叫做国际化标签库。这里就不详细说明了,等我讲到Web 国际化的时候才讲吧!

fn方法库

fn方法库也叫做EL函数库、fn标签库。这个在讲解EL表达式的时候有详细的说明,可转移到我EL表达式的博文中

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y

更多的文章可往:文章的目录导航
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表