什么是JSTL和EL表达式

(JSP Standard Tag Library)

声明:本文部分原创,部分转载(侵删)

一、 JSTL简介

这部分是摘抄某博主博客内容,可惜很久了,当时忘记复制链接了,抱歉,侵删。

1.1、JSTL的介绍

> JSTL是JSP的标准标签库

> JSTL为我们提供了一些常用的标签,供我们日常开发使用(if 、 if...else 、遍历 、 日期格式化)

1.2、JSTL的标签库

1.2.1、core :核心标签库

- 核心标签库是我们JSTL中最常用的一个标签库,它里面封装很多常用的功能

- 核心标签库又称为c标签

1.2.2、fn :函数标签库

- 函数标签库中主要定义了一些字符串相关的方法,函数标签库需要结合EL表达式一起使用

- fmt :格式化标签库(国际化标签库)

- 对日期和数字进行格式化(国际化)操作

- 2016/1/18 1/18/2016 1000 1,000

1.2.3、sql : 数据库标签库【已淘汰】

- 在jsp中操作数据库的标签。已淘汰

- xml : xml标签库

- 在jsp解析xml的标签。已淘汰

1.3、导包

使用JSTL需要先导入两个jar包:

- taglibs-standard-impl-1.2.1.jar

- taglibs-standard-spec-1.2.1.jar

在页面中引入核心标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

1.4、JSTL如何使用核心标准库core

1.4.1、out

作用:将一个对象输出的页面中

参数:

value:要输出的内容,可以是一个EL表达式

default:当value属性为空时,要显示的内容(默认值)

escapeXml:是否自动转义特殊字符,默认值为true,自动转义

例子:

<c:out value="${code }" default="sunwukong" escapeXml="true" ></c:out>

1.4.2、set

作用:向域中设置一个属性

参数:

var:属性名

value:属性值

scope:要将属性放入到的域中,可选值:page request session application

如果不写,默认是page

例子:

<c:set var="username" value="sunwukong" scope="request" ></c:set>

1.4.3、remove

作用:移除域中的指定属性

参数:

var:要移除的属性的属性名

scope:要移除属性的域,可选值:page request session application

如果不指定,则移除四个域中属性

例子:

<c:remove var="username" scope="session"></c:remove>

1.4.4、if 判断

作用:可以java中的if类似

属性:

test:test需要一个布尔值,如果值为true,则执行标签体,否则不执行

例子:

<c:if test="${empty param.username}">请输出用户名!</c:if>

<c:if test="${fileinfo.type ne '文件夹'}">xxxxx<c:if> 没有c:else

##################

lt    小于

le    小于或者等于

gt    大于

ge    大于或者等于

eq    等于

ne    不等于

#############

1.4.5、choose when otherwise

作用:和if else 类似

choose有两个子标签,when otherwise,

when和otherwise必须做完choose的子标签出现,不能单独使用。

在choose可以指定多个when标签,但是只能指定一个otherwise,

多个when标签只会有一个执行,如果when都不满足条件,则执行otherwise。

<c:choose>

<c:when text=”xxx”>xxxx</c:when>

<c:otherwise>xxxx</c:otherwise>

</c:choose>

1.4.6、forEach

作用1:可以遍历一组数

属性:

begin:遍历的开始位置,注意不能小于0

end:遍历的结束位置

var:指定一个变量名

step(可选):指定遍历时的步长(每次自增的长度)

例子:

<c:forEach begin="1" end="10" step="1" var="index">

${index}

</c:forEach>

作用2:可以遍历集合

属性:

items:指定要遍历的集合,需要一个EL表达式

var:指定一个变量名

varStatus:遍历状态,获取当前元素遍历的状态(index count first last)

例子:

<c:forEach items="${list }" var="hero">

${hero} <br />

</c:forEach>

<c:forEach items="${list }" var="hero" varStatus="vs">

vs.last−−vs.last−−{vs.first }-vs.index−−−vs.index−−−{vs.count }---${hero} <br />

</c:forEach>

      ******************************************************************          

${vs.index} 输出行号,从0开始。

          ${vs.count} 输出行号,从1开始。

          ${vs.current} 当前这次迭代的(集合中的)项

          ${vs.first} 判断当前项是否为集合中的第一项,返回值为true或false

          ${vs.last} 判断当前项是否为集合中的最后一项,返回值为true或false

          <c:forEach begin='1' end='5' step='2' items='${list}' var='item'>

          begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

   ******************************************************************

注意:遍历Map时,是获取的map中的一个一个键值对,我们可以通过.key获取键,通过.value来获取值

<c:forEach items="${map}" var="stu">

stu.key−−−stu.key−−−{stu.value} <br />

</c:forEach>

1.4.7、url

作用:用来为绝对路径加上项目名

参数:

value:要设置的绝对路径

var:变量名,如果不指定var,则路径会直接输出,如果指定var,则路径会放入到page域中

例子:

<c:url value="/index.jsp" var="url">

<c:param name="username" value="sunwukong"></c:param>

<c:param name="age" value="18"></c:param>

<c:param name="gender" value="男"></c:param>

</c:url>

补充:

我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码

1.4.8、redirect

作用:请求的重定向

参数:

url:指定重定向的目标地址,注意会自动加上项目名,就不要写项目名

例子:

<c:redirect url="/index.jsp">

<c:param name="username" value="sunwukong"></c:param>

<c:param name="age" value="18"></c:param>

<c:param name="gender" value="男"></c:param>

</c:redirect>

补充:

我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码

1.3、JSTL如何使用函数标签库 fn

以下EL函数引用:https://www.cnblogs.com/plf112233/p/3585035.html(此链接包含自定义函数)

JSTL中的常用EL函数

~由于在JSP页面中显示数据时,经常需要对显示的字符进行处理,SUN公司针对于一些常用

处理定义了一套EL函数库供开发者使用。

1.3.1】、fn:toLowerCase

fn:toLowerCase函数将一个字符串中包含的所有字符转换为小写形式,并返回转换后的字符串,它接收一个字符串类型的参数,例如

fn:toLowerCase("Www.IT315.org") 的返回值为字符串“www.it315.org”

fn:toLowerCase("")的返回值为空字符串

1.3.2】、fn:toUpperCase

fn:toUpperCase函数将一个字符串中包含的所有字符转换为大写形式,并返回转换后的字符串,它接收一个字符串类型的参数。例如:

fn:toUpperCase("Www.IT315.org") 的返回值为字符串“WWW.IT315.ORG”

fn:toUpperCase("")的返回值为空字符串

1.3.3]、fn:trim

fn:trim函数删除一个字符串的首尾的空格,并返回删除空格后的结果字符串,它接收一个字符串类型的参数。需要注意的是,fn:trim函数不能删除字符串中间位置的空格。

例如,fn:trim(" www.it315.org ") 的返回值为字符串“www.it 315.org”。

1.3.4]、fn:split

(1)fn:split函数以指定字符串作为分隔符,将一个字符串分割成字符串数组并返回这个字符串数组。

(2)fn:split函数接收两个字符串类型的参数,第一个参数表示要分割的字符串,第二个参数表示作为分隔符的字符串。

(3)例如,fn:split("www.it315.org", ".")[1]的返回值为字符串“it315”。

1.3.5]、fn:length

(1)fn:length函数返回一个集合或数组大小,或返回一个字符串中包含的字符的个数,返回值为int类型。fn:length函数接收一个参数,这个参数可以是<c:forEach>标签的items属性支持的任何类型,包括任意类型的数组、java.util.Collection、java.util.Iterator、java.util.Enumeration、java.util.Map等类的实例对象和字符串。

(2)如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0。

1.3.6]、fn:join

(1)fn:join函数以一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串并返回合并后的结果字符串。fn:join函数接收两个参数,第一个参数是要操作的字符串数组,第二个参数是作为分隔符的字符串。

(2)如果fn:join函数的第二个参数是空字符串,则fn:join函数的返回值直接将元素连接起来。例如:

假设stringArray是保存在Web域中的一个属性,它表示一个值为{"www","it315","org"}的字符串数组,则fn:join(stringArray, “.")返回字符串“www.it315.org”

fn:join(fn:split("www,it315,org", ","), ".") 的返回值为字符串“www.it315.org”

1.3.7]、fn:indexOf

(1)fn:indexOf函数返回指定字符串在一个字符串中第一次出现的索引值,返回值为int类型。fn:indexOf函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,那么,不管第二个参数字符串在第一个参数字符串中出现几次,fn:indexOf函数总是返回第一次出现的索引值;如果第一个参数中不包含第二个参数,则fn:indexOf函数返回-1。如果第二个参数为空字符串,则fn:indexOf函数总是返回0。例如:

(2)fn:indexOf("www.it315.org","t3") 的返回值为5

1.3.8]、fn:contains

(1)fn:contains函数检测一个字符串中是否包含指定的字符串,返回值为布尔类型。fn:contains函数在比较两个字符串是否相等时是大小写敏感的。

(2)fn:contains函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,则fn:contains函数返回true,否则返回false。如果第二个参数的值为空字符串,则fn:contains函数总是返回true。实际上,fn:contains(string, substring)等价于fn:indexOf(string, substring) != -1。

(3)忽略大小的EL函数:fn:containsIgnoreCase

1.3.9]、fn:startsWith

(1)fn:startsWith函数用于检测一个字符串是否是以指定字符串开始的,返回值为布尔类型。

(2)fn:startsWith函数接收两个字符串类型的参数,如果第一个参数字符串以第二个参数字符串开始,则函数返回true,否则函数返回false。如果第二个参数为空字符串,则fn:startsWith函数总是返回true。例如:

(3)fn:startsWith("www.it315.org","it315")的返回值为false

(4)与之对应的EL函数:fn:endsWith

1.3.10]、fn:replace

(1)fn:replace函数将一个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。fn:replace方法接收三个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示源字符串中要被替换的子字符串,第三个参数表示要被替换成的字符串。例如:

(2)fn:replace("www it315 org", " ", ".")的返回值为字符串“www.it315.org”

1.3.11]、fn:substring

(1)fn:substring函数用于截取一个字符串的子字符串并返回截取到的子字符串。fn:substring函数接收三个参数,第一个参数是用于指定要操作的源字符串,第二个参数是用于指定截取子字符串开始的索引值,第三个参数是用于指定截取子字符串结束的索引值,第二个参数和第三个参数都是int类型,其值都从0开始。例如:

(2)fn:substring("www.it315.org", 4, 9) 的返回值为字符串“it315”

1.3.12】、fn:substringAfter

(1)fn:substringAfter函数用于截取并返回一个字符串中的指定子字符串第一次出现之后的子字符串。fn:substringAfter函数接收两个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示指定的子字符串,例如:

(2)fn:substringAfter(“www.it315.org”, “.”)的返回值为字符串“it315.org”。

(3)与之对应的EL函数为:fn:substringBefore

1.4、自定义标签

请看:https://mp.csdn.net/postedit/94563399

二、EL表达式

什么是EL表达式

替换JSP页面中的脚本表达式

2.1、EL表达式 获取数组长度

在jsp页面中不能通过${list.size}取列表长度,而是

先引入下面的taglib <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

然后使用函数 list的长度是:${fn:length(list)}

2.2、EL表达式 forEach 遍历数组和数字

<c:forEach items="${JsonArray}" var="fileinfo" begin="0" end="${fn:length(JsonArray)}">

${fileinfo}显示全部 或 ${fileinfo.name}显示指定属性

</c:forEach>

属性properties的用法:

[1] var="xx" 就是取别名 不取别名就是默认item 建议取别名

[2] varStatus="xx" 与行数有关的操作

比如<c:forEach items="${obj.path.split('/')}" var="p" varStatus="sta"></c:forEach>

当前遍历到的内容xx有很多属性:

xx.current:当前这次迭代的(集合中的)项

xx.index:当前这次迭代从 0 开始的迭代计数

xx.count:当前这次迭代从 1 开始的迭代计数

xx.first:用来表明当前这轮迭代是否为第一次迭代的标志,返回true/false

用法:<c:if test="${(sta.first)==false}">

xx.last:用来表明当前这轮迭代是否为最后一次迭代的标志,返回true/false

遍历数字:可以跳跃

<c:forEach begin='1' end='5' step='2' items='${list}' var='item'>

begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

2.3、EL表达式 set 变量的设置

<c:set var="p1" value=""></c:set>

获取变量的值:${变量名}

重新赋值:<c:set var="p1">${p1}/${p}</c:set>

连接字符串用左斜杠/

2.4、EL表达式 if 做判断

【1】多判断条件的时候

且:用and,不能用&&;

或:用or,不能用||

两个条件都要写在{}之间。

【2】类型转换

当 size是string型 要*1.0转换为long

【3】判断是否为空

判断为非空: test="not empty xx"

判断为空 : test="empty xxx"

2.5、EL表达式 fmt 格式化

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

保留两位小数

<fmt:formatNumber type="number" value="${9999.9999}" pattern="0.00" maxFractionDigits="2"/>

格式化时间

<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />

2.6、EL表达式

El表达式与字符串连接的时候,直接写就好了,不用写加号

什么是JSTL和EL表达式相关推荐

  1. JSP→JSTL标准标签库简介与环境搭建、JSTL助手EL表达式EL隐式对象、标签→out、set、if、多选择配合、foreach、redirect、格式化、JSTL函数标签、自定义标签、标签类架构

    JSTL标准标签库简介与环境搭建 EL表达式与EL隐式对象 out标签 set标签 remove标签 catch标签 if标签 choose.when.otherwise配合标签 foreach标签 ...

  2. 【JavaLearn】(24)Session、Cookie、ServletContext、MVC开发模式、JSP九大内建对象及四个作用域、JSTL及EL表达式、过滤器、监听器

    目录 1. session和cookie 1.1 session和cookie原理 1.2 cookie-实现10天免登录 1.3 session-实现记住用户名 2. servletContext ...

  3. JSP - JSTL、EL 表达式

    JSTL:JSP Standard Tag Library 标准标签库 JSTL 允许开发人员可以像使用 HTML 标签那样在 JSP 中开发 Java 功能. JSTL 库有: core i18n ...

  4. JSTL,El表达式做类型的判断,提供一个解决思路

    项目场景: JavaWeb电商项目,商品秒杀功能,也就是商品可以有折扣价 问题描述: 一开始项目设计的时候,实体类有"商品类(Goods)",还有其子类"特价商品类(Se ...

  5. jstl与EL表达式处理字符串

    uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 上面的 uri 根据你的实际情况定 ...

  6. Java Web - EL表达式和JSTL标签库

    在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在reque ...

  7. 转:EL表达式的11个内置对象

    原文地址:https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP内置的表达式语言 JSP2.0开始,不让再使用Java脚本, ...

  8. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

  9. JSP中是EL表达式与JSTL

    EL语法:${ } EL取值来自于作用域对象 1.如何从指定作用域取值(默认从最小作用域取值) pageScope.requestScope.sessionScope.applicationScope ...

  10. JSTL+EL表达式方法获取Oracle的Clob字段内容

    我们在页面获得数据的时候一般的类型还是很好获得的,但是一遇到Clob类型就比较麻烦,最常用的方法是用一个流将其读取出来.使用MVC框架的时候这些都是无所谓的事情,因为反正是写在java类中怎么写都行, ...

最新文章

  1. [CLR via C#]5.1 基元类型
  2. Python3 除法取整取余,上下取整
  3. Systemd 入门及常用命令
  4. Nginx + Lua + 共享内存实现动态查询(简单例子)
  5. GDB调试程序系列 (3)
  6. Qt 在designer 中给QToolBar 添加 action控件
  7. TensorFlow 2.0 - Hub 模型复用
  8. 苹果断开电脑连接服务器无响应,mac电脑iTerm2链接linux服务器断线解决方案
  9. oracle 数据库备份
  10. 快手用计算机说唱的叫什么,HIPHOP人物:“我们呢说唱,会在快手上爆炸!”
  11. c#里面的combobox在代码中怎么根据它的text获取它的index?
  12. webservice接口对接
  13. 从零搭建个人深度学习服务器|SSH远程登录|外网访问|手动指定ip|端口转发
  14. GoldenDict:一款免费的词典工具
  15. 使用selenium模仿手机浏览器访问淘宝网页
  16. [置顶] 跳槽前夕的三年总结
  17. 虚拟同步发电机_一种基于下垂控制和增加虚拟阻抗的逆变器并联仿真实现
  18. 一阶广义差分模型_广义差分法的eviews软件实现
  19. 20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?
  20. 小区物业管理系统-总结-数据库设计

热门文章

  1. mkv导入Pr没有音频,mkv无法导入的解决方法
  2. 《我想进大厂》之分布式锁夺命连环9问 | 大理版人在囧途
  3. NL驱动表错误导致的性能问题
  4. 【华为OD机试真题 JAVA】叠积木
  5. 树莓派4使用CSI摄像头
  6. Android智能聊天机器人
  7. 解决-redis保存的中文变为unicode, redis的基本操作
  8. Android deeplink原理解析
  9. 区块链+边缘计算应用研究与探讨
  10. 搭建无线监控云存储服务器,搭建无线监控云存储服务器