(十一)El表达式详细介绍
看之前,最好先看下 el表达式快速入门
本来将重点讲下el表达式
能干嘛 ;
目录
执行计算
语法:${运算表达式}
el表达式
支持的运算符:
关系运算符
等于(
==
|eq
)、不等于(!=
|ne
)、小于(<
|lt
)、大于(>
|gt
)·小于等于(<=
|le
)、大于等于(>=
|ge
)逻辑运算符
交集(
&&
|and
)、并集(||
|or
)、非(!
|not
)empty
运算符检查对象是否为
null
或者""
(空串); 这个特别好用,直接帮我们判断了两种情况 ;二元表达式
${user != null ? user.name : ""}
这个也很好用;
[]
和.
表达式这个没有什么要说的,el表达式就是通过
.
或者[]
来取出下一个值的 ;
备注:el表达式
是不支持拼接字符串的。需要我们自己写el函数
来解决这个问题;(什么是el函数
后文会讲)
获得 web 开发常用对象
el表达式
中定义了 11 个隐含对象
,使用这些隐含对象可以很方便的获取web
开发中的一些常用对象,并获取这些对象的数据。
语法: ${隐式对象名称}
;获取的是隐式对象的引用 ;
隐含对象名称 | 描述 |
---|---|
pageContext |
对应于JSP 页面中的pageContext 对象 |
pageScope |
代表page 域中用于保存属性的Map 对象 |
requestScope |
代表request 域中用于保存属性的Map 对象 |
sessionScope |
代表session 域中用于保存属性的Map 对象 |
applicationScope |
代表application 域中用于保存属性的Map 对象 |
param |
表示一个保存了 一次 所有请求参数的Map 对象 |
paramValues |
表示一个保存了 一次 所有请求参数的Map 对象,对于单个请求参数,返回的是一个string[] 数组 |
header |
表示一个保存了 一次 所有http请求头字段的Map 对象 |
headerValues |
表示一个保存了一次 所有http请求头字段的Map 对象,对于单个请求头字段,返回的是一个string[] 数组 |
cookie |
表示一个保存了所有cookie 对象的Map 对象 |
initParam |
表示一个保存了所有web 应用初始化参数的Map 对象 |
全是
Map
对象,有点东西 ;
备注:之前在el表达式
快速入门篇里面,我说过,el表达式
获取数据,是从四个域里面依次寻找的;其实这句话是不太准确的,el表达式
在获取数据的时候,不是一上来就去四个域里面寻找数据的,而是先判断标识符,是不是el表达式
自己定义的隐式对象 ;
这也就是为什么,在el表达式
快速入门那篇博客当中,我们举的例子,不能用pageContext
当标识符的原因 ;
关于 param
与 paramValues
的用法:
可能很多人,看了上面的表格,也还是分不清这两个的区别;下面来讲下
param
:获取请求参数的时候,如果有重复的关键字一起被提交 两个name
的情况下,只能获取到第一个name
的值; 不要问我,为什么只保存第一个name
,如果这个都想不通,那你很令我失望!因为,保存param
请求参数的是一个Map对象,Map对象的特点,导致了只保存第一个,因为后来的重复值,不会保存 ;我也不知道,你有没有灵性的能看到这句话
假如想要获取全部的name
,则需要使用paramValues
;
在取cookie
对象的时候,我们得到一个map
集合,集合中的key
,就是cookie
的名字。
关于 header
与 headerValues
的用法:
与上面的用法一样;
但是有个特别的地方:如果头字段的名字中有 -
,比如:Accept-Encoding
,我们需要使用headerValues
来获取;
headerValues[Accept-Encoding]
调用el
函数
Sun
公司自己开发了一套强大的 el
函数库;我们可以使用 el表达式
直接调用它们 ;
使用需要导入如下标签库:
<%@taglib prefix="fn" uri="http://java.sun.com/jstl/core_rt" %>
该标签库中的常用函数讲解:
fn:toLowerCase
将一个字符串中包含的所有字符串中包含的所有 字符串转换为小写形式,并返回转换后的字符串,接受一个字符串类型的参数;
如果传入空串,则也返回空串;
fn:toUpoerCase
将一个字符串中包含的所有字符串中包含的所有 字符串转换为大写形式,并返回转换后的字符串,接受一个字符串类型的参数;
如果传入空串,则也返回空串;
fn:trim
删除一个字符串的 首尾的空格,并返回删除空格后的结果字符串,它接收一个字符串,返回一个字符串;
fn:length
返回一个集合或数组大小,或返回一个字符串包含的字符串的个数,返回值是
int
类型;该函数接收一个参数,这个参数可以是
<c:foreach>
标签的items
属性支持的任类型,包括java.util.lterator
、java.util.Collection
、java.util.Map
等类的实例对象和字符串;如果该函数的参数为
null
或者是元素个数为 0
的集合或数组,则函数返回0;如果参数是空字符串
,则函数返回0;简单记为:传空
进来就是0
;fn:split
以指定的字符串作为分隔符,将一个字符串分割成字符串并返回这个字符串数组;
接受两个参数;参数一:表示要切割的字符串;参数二:作为分隔符的字符串 ;
fn:join
将一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串,并返回合并后的字符串。
接受2个参数;参数一:要操作的字符串;参数二:作为分隔符的字符串;
fn:indexOf
返回指定字符串在一个字符串中
第一次
出现的索引值,返回值为int
类型;接受2个参数;参数一:源字符串;参数二:目标字符串;
返回的是目标字符串在源字符串中
第一次
出现的下标,即使目标字符串在源字符串里面出现多次,也只是返回第一次出现的下标 ;如果目标字符串不在源字符串里面,则返回
-1
;如果目标字符串是
空串
,则总是返回0
;fn:contains
检测一个字符串中是否包含指定的字符串,返回结果是
布尔
类型 ;对大小写敏感;
接受2个参数;参数一:源字符串;参数二:目标字符串;
如果源字符串中包含目标字符串,则返回
true
;否则,返回false
;如果目标字符串是
空串
,则总是返回true
;如果
需要忽略大小写
的,则使用fn:containsIgnoreCase
fn:startsWith
接受2个参数;参数一:源字符串;参数二:目标字符串;
检测一个源字符串是否以目标字符串开头,返回值为
布尔
类型 ;如果目标字符串是
空串
,则总是返回true
;与之对应的是:
fn:endsWith
,我就不再累赘;fn:replace
接受3个参数;参数一:源字符串;参数二:要替换的字符串;参数三:替换后的字符串
fn:substring
用于截取字符串;
接受3个参数;参数一:源字符串;参数二:截取的子字符串的开始索引值;参数三:截取的子字符串的结束索引值
fn:substringAfter
用于截取并返回一个源字符串中的目标字符串
第一次出现之后
的子字符串;接受2个参赛;参数一:源字符串;参数二:目标字符串;
与之对应的是:
fn:substringBefore
基本上字符串的常用操作,Sun的el函数库都包含了;
如果你发现JSTL
标签库的函数,没有你想要的,你完全可以自定义el函数
;
自定义el函数
el表达式
允许开发人员开发自定义函数(也就是el函数
),以调用java
类的方法。
语法:
${prefix: method(params)}
- 在
el表达式
中调用只能是Java类的静态方法
这个
java类的静态方法
需要在TLD文件
中描述,才可以被el表达式
调用其中
java类
必须是classes
(也就是src
目录)下面的public
类;TLD文件
放在WEB-INF
或其子目录
下面 ;
现在你可能会问,我如何编写 TLD文件
?
问的好,问的秒!其实笔者也不会写,但是笔者会抄啊! 可能我说出这句话,有的人已经能知道我 师从何人
了 哈哈哈; (当然是师从老方(方立勋)了,可惜没见过真人)
我们打开我们的 lib
文件夹,下面有一个 standard.jar
jar包,这个包一定有的,我们使用 JSTL
必须要导入这个包,打开它,里面有一个 META-INF
文件夹,这个文件夹下面全是TLD文件,打开 fn.tld
这个,这里面的才是 el函数
其他的都是 自定义标签
(后面会讲什么是自定义标签
)的,把开头留下,再留下一个例子,就OK了;
下面是我打开的 fn.tld
的部分代码
我们怎么写 TLD
文件,就这些代码,稍微改吧改吧,就是我们自己的 TLD
文件了 ;
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<!-- 这里我们要改下,改成我们自己的简化名,比如笔者,改成了自己的名字缩写 -->
<!-- <short-name>c</short-name> -->
<!-- 这样 我们使用自己的el函数 就是 <yaz:xxxx> 了 -->
<short-name>yaz</short-name>
<!-- 这里我们也要改下,改成我们自己的uri,比如笔者,改成了自己的网址,随便写一个也行 -->
<!-- <uri>http://ijava.xin./jsp/jstl/core</uri> -->
<uri>http://ijava.xin</uri>
<!-- 上面的两个信息,我们在使用自定义的el函数,就这样导入 -->
<!-- <%@ taglib prefix="yaz" uri="http://www.yaz.cn" %> -->
<!-- 下面是描述 el函数 -->
<function>
<!-- 描述信息,删掉删掉
<description>
Tests if an input string contains the specified substring.
</description>
-->
<!-- el函数的名字 -->
<name>contains</name>
<!-- el函数所在的类 -->
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<!-- el函数的方法签名,看好了涉及到的类型,都是写全名的,比如 java.lang.String 而不是 String -->
<function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
<!-- 举例子 ,删掉删掉
<example>
< c:if test="${fn:contains(name, searchString)}">
</example>
-->
</function>
</taglib>
这样在JSP
页面中,我们可以用自己自定义的 el
函数了;
备注:
el函数
必须写在 el表达式
里面,不要写在标签里面;
(十一)El表达式详细介绍的更多相关文章
- JSP EL表达式详细介绍
一.JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 ...
- JSP EL表达式详细介绍(转)
转自:http://www.jb51.net/article/20042.htm 为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 J ...
- JSP中的EL表达式详细介绍
一.JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素.它们通常用于对象操作以及执行那些 ...
- EL表达式详细教程
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- java web学习总结(三十一) -------------------EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- Spring官网阅读(十一)ApplicationContext详细介绍(上)
文章目录 ApplicationContext 1.ApplicationContext的继承关系 2.ApplicationContext的功能 Spring中的国际化(MessageSource) ...
- 大数据笔记(三十一)——SparkStreaming详细介绍,开发spark程序
Spark Streaming: Spark用于处理流式数据的模块,类似Storm 核心:DStream(离散流),就是一个RDD=================================== ...
- [转]EL表达式和JSTL表达式实例
/* **Title:EL表达式和JSTL表达式实例 **Author:Insun **Blog:http://yxmhero1989.blog.163.com/ */ 为了方便写JSP,我们引入了E ...
- (十)EL表达式和JSTL标签快速入门
目录 什么是 el 表达式 示例:使用EL表达式获取pageContext .request.session.application域中的数据: 示例:使用EL表达式获取Bean属性 获取当前WEB应 ...
随机推荐
- js的老生代垃圾回收
推荐阅读:<JS 闯关记>之垃圾回收和内存管理 常见的垃圾回收有2种策略:标记清除 和 引用计数 标记清除 会遍历堆中所有的对象,然后标记活的对象,在标记完成后,销毁所有没有被标记的对象. ...
- select选中
比如<select class="selector"></select> 1.设置value为“全部“的项选中 复制代码代码如下: $(&quo ...
- meshing-划分圆柱结构化网格
原视频下载地址:https://yunpan.cn/cqjeckrzEpVkY 访问密码 eb5d
- CSAW Quals CTF 2017-scv
目录 程序基本信息 程序漏洞 整体思路 exp脚本 内容参考 程序基本信息 64位动态链接程序,开启了栈溢出和数据段不可执行保护 程序漏洞 read函数很明显的栈溢出漏洞 整体思路 由于题目给了lib ...
- HTML中调用带有SoapHeader头的WebService的两种方法
第一种: function CallWebMethodWithHeader() { var soapXML = "<soap:Envelope xmlns:xsi='http://ww ...
- Restful API 架构与设计参考原则
1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博 ...
- SQL-W3School-函数:SQL NOW() 函数
ylbtech-SQL-W3School-函数:SQL NOW() 函数 1.返回顶部 1. NOW() 函数 NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请 ...
- JavaScript箭头函数(Lambda表达式)
箭头函数也叫lambda表达式 据说其主要意图是定义轻量级的内联回调函数 栗有: 1 var arr = ["wei","ze","yang" ...
- VM12_pro+Ubuntu16_64+Qt5.12.2环境搭建
1.准备软件[已经存网盘] 2.安装Vm 3.安装Ubuntu 4.进入linux,修改Qt安装包权限 5.运行Qt 6.第五步会弹出Qt安装的界面,默认安装就行了 7.修改环境变量 sudo ged ...
- shell数组编程
.数组定义 [chengmo@centos5 ~]$ a=( ) [chengmo@centos5 ~]$ echo $a 一对括号表示是数组,数组元素用“空格”符号分割开. .数组读取与赋值 得到长 ...