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

什么是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/>

  • 简单使用一下

    <%
        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/>

  • 该标签有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}
  • 效果:

  • 当然了,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"/>
  • 效果:

使用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}
  • 效果:

<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对象被删除了!":"我还在呢!"}

  • 效果:

<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}
  • 效果:

<c:if/>

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>
  • 注意地址栏的参数!


<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>
  • 效果:


<c:forEach/>

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>
  • 效果:

  • 遍历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>

  • 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>
  • 效果:


<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>
  • 效果图:


<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.youkuaiyun.com" charEncoding="UTF-8" />
  • 我们一看,是没有样式的:

  • 打印csdn的源代码:

    <c:import url="http://www.youkuaiyun.com" charEncoding="UTF-8" var="net"/>

    优快云的源码是:<br><br><br><br><br>
    <c:out value="${net}" escapeXml="true"></c:out>
  • 效果:


<c:param/>

  • 在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。标签可以嵌套在、或标签内,为这些标签所使用的URL地址附加参数。

  • 标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用标签的最大好处。


<c:url/>

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

  • 我们配合param标签来使用一下吧!

    <c:url value="2.jsp" var="url">
        <c:param name="name" value="中国!">
        </c:param>
    </c:url>

    <a href="${url}">我经过了URL地址重写!</a>

  • 效果:


<c:redirect/>

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

  • 简单使用一下,重定向到2.jsp,带了一个参数:

    <c:redirect url="2.jsp" >
        <c:param name="name" value="zhongfucheng">
        </c:param>
    </c:redirect>
  • 在2.jsp中获取到参数


fmt标签库

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

fn方法库

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

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
扣子(coze)实战|手把手教你搭建AI换装自动化工作流 摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。 阅读详情

相关推荐

Anolis龙蜥内核升级实战:从查询到配置的全流程指南

本文提供了一份详尽的Anolis龙蜥操作系统内核升级实战指南。文章从升级的必要性出发,逐步讲解了升级前的系统检查与备份、从官方源获取正确内核包、分步安装与验证、配置默认启动项以及升级后的功能验证与安全回滚方案。旨在帮助运维人员安全、平稳地完成内核升级,以获取性能提升、新硬件支持及重要的安全漏洞修复。

qq_27496129的博客 571

JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

weixin_43883849的博客 2665

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 333

JSTL

1.JSTL简介 JSTL是原SUN公司提供的一套标准标记库,包括c.tld、fmt.tld、x.tld、sql.tld四个主要标记库。 (1)c.tld:c.tld称为核心标记库,包含一些Web应用常用标记,如循环、分支、表达式赋值和基本输入/输出等,是最常使用的标记库。(2)fmt.tld:fmt.tld称为格式化/国际化标记库,包括用来解析数据的标记,如日期等。(3)sql.tld:sq...

Bruce_Up的博客 334

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 479

中国30米分辨率城市建成区数据集 (1972-2023年)

全国城市建成区空间分布数据(1972-2023年),利用Google Earth Engine平台,基于Landsat系列遥感影像提取了1972–2023年城市不透水面,后经过不透水面聚集密度计算方法计算了不透水面聚集密度,通过阈值划分提取了城市建成区,并设置了建成区面积阈值,去除了噪点,获取了全国城市建成区空间分布数据集。该提取能准确刻画城市形态,提取精度高,保持了建成区的完整性。数据集包括41期数据,1972年,1978年,1985-2023年逐年,分辨率为30米,有栅格和矢量两种格式。

地球资源数据云的官方博客 5824

fmt 标签

摘自:http://blog.csdn.net/yiluoak_47/article/details/7305295 使用<fmt>标签应先导入 <%@ taglib prefix="fmt" uri="http://Java.sun.com/jsp/jstl/fmt" %> 其uri可在fmt.tld文件下 日期格式化 <fmt:formatDate va...

征客 874

FPGA 核脉冲梯形成型 Verilog 实现:从 MATLAB 到 50MHz 采样率部署

本文详细解析了FPGA实现核脉冲梯形成型的完整流程,从MATLAB仿真到50MHz采样率的Verilog硬件部署。重点探讨了梯形成型算法对负指数信号的优化处理,包括定点数量化、流水线架构设计及资源优化技巧,为核辐射探测与高能物理实验提供高效解决方案。

weixin_30920513的博客 388

访问系统出现 Unable to read TLD "META-INF/c.tld(或fmt.tld)" from JAR file 错误

org.apache.jasper.JasperException: Unable to read TLD "META-INF/fmt.tld" from JAR file "file:/D:/Program%20Files/tomcat-6_HFZZJ/webapps/HFZZJ/WEB-INF/lib/standard.jar": org.apache.jasper.JasperExcepti

晨港飞燕的专栏 6183

PDF与OFD电子发票解析技术实战:从格式转换到精准识别

本文深入探讨了PDF与OFD电子发票解析技术的实战应用,从格式转换到精准识别,提供了全面的解决方案。通过OFD转PDF技术、动态定位算法和多重校验机制,显著提升电子发票识别效率与准确率,助力企业财务数字化转型。

weixin_42565652的博客 163

声音事件检测metric:PSDS

这项工作为多声道声音事件检测(SED)系统的性能评估定义了一个新的框架,它克服了传统的collar-based事件决定、事件F-cores和事件错误率的限制。拟议的框架引入了对事件检测的定义,该定义对标签的主观性更为稳健。它还采用了多声道接收器操作特性(ROC)曲线,以提供比F1分数更全面的系统性能洞察力,并建议将这些曲线简化为单一的多声道声音检测分数(PSDS),这允许系统独立于操作点(OPs)进行比较。所提出的方法还能更好地了解不同声音类别的数据偏差和分类稳定性。

Maestro_T的博客 2727

java引入core标签库_JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

什么是JSTLJSTL全称为 JSP Standard Tag Library 即JSP标准标签库。JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!为什么要使用JSTLEL表达式不够完美,需要JSTL的支持!在JSP中,我们前面已经用到了EL表达式,体会到了EL表达式的强大功能:使用EL表达式可以很方便地引用一些Jav...

weixin_35020039的博客 627

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7532

JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y什么是JSTLJSTL全称为...

3y 500

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jsp中删除_JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y什么是JSTLJSTL全称为 JSP Standard Tag Library 即JSP标准标签库。JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!为什么要使用JSTL...

weixin_39927623的博客 119

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring Boot集成ArcSoft离线人脸识别:从选型到生产级后端实践

人脸识别作为身份核验的核心技术,在考勤签到、门禁通行、身份认证等场景中扮演着关键角色。离线人脸识别与在线API相比,核心优势在于数据不出内网,原始照片与特征数据全部留在本地服务器,同时采用买断式授权,长期成本更可预期。Spring Boot作为主流后端框架,通过JNI与C++人脸引擎协作,能够将人脸检测、特征提取与1:1/1:N比对封装为标准化接口。实际工程落地中,像素格式转换、动态库加载、引擎并发复用等问题远比调用API复杂。从选型考量到图像格式陷阱,再到对象池并发优化,Spring Boot集成ArcS

weixin_33912453的博客 262

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JSTL标签库(JSP标准标签库)

JSTL标签库(JSP标准标签库) JSTL(JSP Standard Tag Library,核心标签库)是 JSP 标签的集合,它封装了 JSP 应用的通用核心功能。 JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签。JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面。 JSTL 包含 5 类标签库:core 标...

雪崩时没有一片雪花是无辜的! 1007

第九节、JSTL标签库

文章目录JSTL标签概述JSTL的core标签库JSTL的fmt标签JSTL的fn标签库JSTL的SQL标签库JSTL的XML标签库 JSTL标签概述 分类: core标签库(核心标签库),包括有通用标签(输出标签)、流控制标签和循环控制标签等。 fmt标签库,格式化、国际化标签库。 fn标签库,函数标签库。 XML标签库,关于XML操作的标签库。 SQL标签库,操作数据库的标签库。 JSTL的core标签库 <c:set>标签用于在某个范围中设定某个值,这个范围可以是request、pa

qq_42148307的博客 278

java jstl标签库_Java Web(七) JSTL标签库

在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为、行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它能够获取各种对象,各种值,并且还不会抛出NullPointerException之类的错误,但是EL表达式功能还是有限,例如不能遍历集合等,因此为了完善JSP,让其完全不使用java代码,就有了jst...

weixin_40000301的博客 148
上一篇: JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】...
下一篇: IDEA常用设置
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值