jsp的EL表达式详解

您所在的位置:网站首页 jsp表达式的用法 jsp的EL表达式详解

jsp的EL表达式详解

2023-08-27 09:53| 来源: 网络整理| 查看: 265

文章目录 一、什么是EL表达式,有什么用二、用法2.1 最简单的使用2.2. EL表达式搜索域数据的顺序2.3. EL表达式输出复杂的Bean对象2.4. EL表达式的关系运算2.5. EL表达式的逻辑运算2.6. EL表达式的算术运算2.7. empty运算2.8. EL表达式的三元运算2.9. EL表达式的11个隐含对象2.10. EL表达式pageContext对象的作用2.11. EL表达式另外几个隐含对象的用法(param、paramValues、header、headerValues、cookie、initParam)2.11.1. param、paramValues2.11.2. header、headerValues2.11.3. cookie2.11.4. initParam

一、什么是EL表达式,有什么用

EL表达式全称:Expression Language。是表达式语言。 作用:主要用来替代jsp页面中的表达式脚本在jsp页面中进行数据的输出。(具体主要是输出域对象的数据) 优点:在输出数据时,比jsp额表达式脚本要简介得多。 格式/语法(在jsp文件中使用):

${表达式}

二、用法 2.1 最简单的使用 Title key值:${key} name值:${name}

运行结果: 在这里插入图片描述

2.2. EL表达式搜索域数据的顺序

说到域,这里说一下,jsp中的域对象主要有四个: 1、pageContext(数据只在当前页面有效,请求转发后无效) 2、request(数据在当前请求有效,请求转发后有效,重定向无效) 3、session(数据在关闭浏览器前有效) 4、application(数据在关闭服务器前有效)

而EL表达式所有域的顺序也是从小到大的,也就是跟上面的顺序一样:pageContext > request > session > application

也就是说,如果现在四个域都存储了一个Attribute叫做key,我们使用EL表达式${key} 会优先输出pageContext的。

2.3. EL表达式输出复杂的Bean对象

假如现在有以下Bean需要输出。

package com.hstc.edu.EL; import java.util.Arrays; import java.util.List; import java.util.Map; public class Product { private String name; private Double[] prices; private List cities; private Map map; @Override public String toString() { return "Product{" + "name='" + name + '\'' + ", prices=" + Arrays.toString(prices) + ", cities=" + cities + ", map=" + map + '}'; } public Product(String name, Double[] prices, List cities, Map map) { this.name = name; this.prices = prices; this.cities = cities; this.map = map; } public Product() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double[] getPrices() { return prices; } public void setPrices(Double[] prices) { this.prices = prices; } public List getCities() { return cities; } public void setCities(List cities) { this.cities = cities; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } }

那么,我们在jsp下的代码如下(以下代码说明了几乎所有常用的基本或者非基本类型使用EL表达式的输出方式): 最主要的代码如下:

直接输出product:${product} 只输出product的name属性:${product.name} 注意:无法使用product.prices直接输出数组的所有值 只输出product的prices数组中某一个属性:${product.prices[0]} 输出product的cities集合:${product.cities} 输出product的cities集合中个别元素:${product.cities[0]} 输出product的Map集合:${product.map} 输出product的Map集合中某个值:${product.map.key1} 或者 ${product.map["key1"]}

完整的代码如下:

EL输出复杂的Bean对象 直接输出product:${product} 只输出product的name属性:${product.name} 注意:无法使用product.prices直接输出数组的所有值 只输出product的prices数组中某一个属性:${product.prices[0]} 输出product的cities集合:${product.cities} 输出product的cities集合中个别元素:${product.cities[0]} 输出product的Map集合:${product.map} 输出product的Map集合中某个值:${product.map.key1} 或者 ${product.map["key1"]}

显示结果如下: 在这里插入图片描述

2.4. EL表达式的关系运算

在这里插入图片描述

2.5. EL表达式的逻辑运算

在这里插入图片描述

2.6. EL表达式的算术运算 算术运算符说明范例结果+加法${12 + 18}30-减法${18 - 8}10*乘法${12 * 12}144/ 或 div除法${144 / 2} 或 ${144 div 12}12.0% 或 mod取模${144 % 10} 或 ${144 mod 10}4 2.7. empty运算

作用:判断一个数据是否为空,若为空,输出true,否则输出false。

满足数据为空的五种情况: 1、值为null 2、字符串为空串的时候 3、数组长度为0 4、list集合的元素个数为0 5、map集合的元素个数为0

在jsp脚本下使用如下:

${ empty 参数名}

例如:

Title empty key1} key2 = ${empty key2} key3 = ${empty key3} key4 = ${empty key4} key5 = ${empty key5}

显示如下: 在这里插入图片描述

2.8. EL表达式的三元运算

其实就是Java中的

表达式1 ? 表达式2 : 表达式3

比如: 1 == 1 ? true : false 也就是如果1 等于 1 的话,那么就输出true,否则输出false。 具体无非就是加个${}变成:

${1==1?true:false} 2.9. EL表达式的11个隐含对象 变量类型作用pageContextPageContextImpl它可以获取jsp中的九大内置对象pageScopeMap它可以获取pageContext域中的数据requestScopeMap它可以获取request域中的数据sessionScopeMap它可以获取session域中的数据applicationScopeMap它可以获取servletContext域中的数据paramMap它可以获取请求参数的值paramValuesMap它可以获取请求参数的值,获取多个值的时候使用headerMap它可以获取请求头的信息headerValuesMap它可以获取请求头的信息,获取多个值的时候使用cookieMap它可以获取当前请求的Cookie信息initParamMap它可以获取在web.xml中配置的的上下文参数

这里说一个点:上面提到过一个域的优先级的问题,如果你实在想在一个jsp页面使用多个域,而且起的Attribute的名称又一样,还想跳过这层优先级,那么就可以使用上面的例如requestScope.Attribute的键来获取。 举个例子吧: 现在你的Attribute设置如下:

那么获取这两个key 的代码如下:

pageContext.key = ${key} 或者 ${pageScope.key} request.key = ${requestScope.key}

显示(为了证明这是对的,特地贴个图): 在这里插入图片描述

2.10. EL表达式pageContext对象的作用

主要用于获取以下7个数据: 1、协议 2、服务器ip 3、服务器端口 4、工程路径 5、请求方法 6、客户端ip 7、会话的id编号

具体例子,剑来!直接一波代码强烈输出: 在jsp文件中代码如下:

pageContext的七大作用 利用EL表达式的pageContext对象获取以下七个数据 1、协议:${pageContext.request.scheme} 2、服务器ip:${pageContext.request.serverName} 3、服务器端口:${pageContext.request.serverPort} 4、工程路径:${pageContext.request.contextPath} 5、请求方法:${pageContext.requesthod} 6、客户端ip:${pageContext.request.remoteHost} 7、会话的id编号:${pageContext.session.id}

显示如下:(这里因为访问的是自己的电脑,所以客户端的ip是自己的ip) 在这里插入图片描述 有人可能会觉得,不是吧老哥,这么长,怎么记,其实有个更容易的写法,我们把request和session放到pageContext域中,修改代码如下:

pageContext的七大作用 利用EL表达式的pageContext对象获取以下七个数据 1、协议:${req.scheme} 2、服务器ip:${req.serverName} 3、服务器端口:${req.serverPort} 4、工程路径:${req.contextPath} 5、请求方法:${req.method} 6、客户端ip:${req.remoteHost} 7、会话的id编号:${ses.id}

运行结果也是一样的: 在这里插入图片描述

2.11. EL表达式另外几个隐含对象的用法(param、paramValues、header、headerValues、cookie、initParam) 2.11.1. param、paramValues

首先是param和paramValues,主要用来获取请求参数的值,也就是网页后边加?的参数。比如: jsp如下:

username = ${param.username} hobbies = ${param.hobby} hobbies = ${paramValues.hobby[0]} and ${paramValues.hobby[1]}

那么使用此链接(http://localhost:8080/EL/other.jsp?username=Keeling&hobby=eat&hobby=drink)获得的显示为: 在这里插入图片描述 param的获取就不用说了,主要说一下,如果hobby有两个值的话,那么param只能输出第一个值,此时就必须使用paramValues对象 如果直接输出${paramValues.hobby}会怎么样呢,请看 在这里插入图片描述

2.11.2. header、headerValues

直接贴代码

获取整个请求头:${header} 获取请求头[User-Agent]的值:${header['User-Agent']} 获取请求头[Connection]的值:${headerValues['Connection'][0]}

显示: 在这里插入图片描述

2.11.3. cookie 获取cookie的名称:${cookie.JSESSIONID.name} 获取cookie的值:${cookie.JSESSIONID.value}

显示: 在这里插入图片描述 这个Cookie怎么看呢?打开网页,按F12,打开Network,然后找到当前的网页文件即可查看我们的Cookie的详细信息。 在这里插入图片描述 如果要获取他的NMTID值,那么用以下代码,其他的也基本类似:

获取cookie的名称:${cookie.NMTID.name} 获取cookie的值:${cookie.NMTID.value}

但是注意,有特殊字符的名称要用中括号[“”],比如Idea-8296e771(±*/、!~等等都算特殊字符)

2.11.4. initParam

在web.xml中配置: 在这里插入图片描述 然后在jsp中获取如下:

${initParam.username} ${initParam.url}

如果要获取所有的数据,那么也可以直接用

${initParam}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3