【JavaWeb】EL表达式是什么

1、EL表达式功能

EL 表达式:Expression Language 表达式语言

EL 使用:在 JSP 中使用,服务器会对其进行解析翻译,生成相应的 Java 代码

EL 作用:在 JSP 页面中输出动态内容,可以代替 JSP 中的表达式元素 <%= %>

2、EL表达式的格式

EL 格式:${ EL表达式 }

语法:${}

3、EL内置对象

为了方便的输出数据,EL 提供了 11 个内置对象

2 个内置对象为了方便输出请求参数:param/paramValues

4 个内置对象为了方便输出各个范围的属性:pageScope / requestScope / sessionScope / applicationScope【4、中详解】

2 个与请求头有关的内置对象:header/headerValues

2 个其他内置对象:cookie/initParam

1 个特殊的内置对象:pageContext

3.1、param

param:用来输出请求参数的值

语法:${param.请求参数名}

例子:

http://localhost:8080/0513-EL/01-param.jsp?name=looper

<h1>${param.name}</h1>

结果:looper

3.2、paramValues

paramValues:取得同名请求参数的某一个索引的值

语法:${paramValues.请求参数名称[索引]}

例子:比如某请求参数是通过 checkbox 传递的,名字为 hobbies,要输出所有 hobbies 值中的第一个值,可以使用如下两种方式:

例如:

  1. 通过该 JSP 中的表单提交请求参数
<form action="paramValues.jsp">
   爱好:
   <input type="checkbox" name="hobbies" value="吃"/>吃
   <input type="checkbox" name="hobbies" value="喝"/>喝
   <input type="checkbox" name="hobbies" value="玩"/>玩
   <input type="checkbox" name="hobbies" value="乐"/>乐<br/>
   <input type="submit" value="提交"/>
</form>
  1. paramValues.jsp 中获取请求参数
<%--使用表达式:--%>
<%=request.getParameterValues("hobbies")[0]%>

<%--使用EL:--%>
${paramValues.hobbies[0]}

3.3、header

header:用来输出某一个请求头的值

语法:${header.请求头名字}

例子:

${header.accept}

3.4、headerValues

headerValues:如果某个请求头的值有多个,则使用headerValues返回一个数组

语法:${headerValues.请求头名字[index]}

例子:

${headerValues.cookie[0]}

3.5、cookie

cookie:用来获取 cookie 的值

语法:

  1. ${cookie.cookie名字.value}:获取 cookie 的值
  2. ${cookie.cookie名字.name}:获取 cookie 的名字

例子:

${cookie.JSESSIONID.value }<br>
${cookie.JSESSIONID.name }

3.6、initParam

initParam:用来输出上下文参数

语法:${initParam}:获取 cookie 的值

例子:

  1. 设置 xml 文件
<context-param>
	<param-name>userName</param-name>
	<param-value>looper</param-value>
</context-param>
  1. 在 JSP 中获取上下文参数
${initParam.userName }

3.7、pageContext

pageContext:该内置对象可以调用 PageContext 类中所有符合规范的 getXxx 方法

语法:${pageContext.xxx} 其中 xxx 代表 PageContext 类的 getXxx 方法将首字母小写的名字

例子:

<head>
    <!-- base标签代表当前工程的基本路径  -->
	<base href="${pageContext.request.contextPath}/">
</head>
${pageContext.request}<br>
${pageContext.request.remoteAddr}<br>
<!-- 取得当前工程的基本路径  -->
${pageContext.request.contextPath}

结果:

org.apache.catalina.connector.RequestFacade@26a70a92 0:0:0:0:0:0:0:1 /0513-EL

4、获取数据的作用域检索顺序

4.1、获取属性数据有关的四个内置对象

  • pageScope:页面范围
  • requestScope:请求范围
  • sessionScope:会话范围
  • applicationScope:上下文范围

4.2、不写范围

语法:${变量名.属性名}

检索顺序:默认的访问顺序:pageScope→requestScope→sessionScope→applicationScope

当不指定范围时

例如:${user.pwd},将自动从pageScope开始查找,直到applicationScope,如果在某一范围找到,直接显示,不再找了;如果没查到,则什么也不显示

例子:

<%
	request.setAttribute("name", "looper1");
	session.setAttribute("name", "looper2");
	pageContext.setAttribute("name", "looper3");
	application.setAttribute("name", "looper4");
%>
${name }

结果:looper3

4.3、写范围

写范围之后,则表示精确定位;强制使用某个作用域的属性

语法:${范围.变量名.属性名}

范围:pageScope:页面、requestScope:请求、sessionScope:会话、applicationScope:上下文

检索顺序:精确定位指定范围的属性的值,如果查到显示;如果没查到,则什么也不显示

例子:

<%
	request.setAttribute("name", "looper1");
	session.setAttribute("name", "looper2");
	pageContext.setAttribute("name", "looper3");
	application.setAttribute("name", "looper4");
%>
${sessionScope.name }

结果:looper2

5、EL运算符

5.1、算数运算符

+:实现加法运算

-:现减法运算

*:实现乘法运算

/div :实现除法运算

%mod :实现求模运算

${10+2} <br>
${10-2} <br>
${10*2} <br>
${10/3} <br>
${10%3} <br>

5.2、比较运算符

有 6 种比较运算符,可以对值进行比较,返回值为 true 或 fasle

==eq:表示等于

!=en:表示不等于

<lt:表示小于

>gt:表示大于

<=le:表示小于等于

>=ge:表示大于等于

${10==2}<br/>
${10!=2}<br/>
${10>2}<br/>
${10<2}<br/>
${10>=2}<br/>
${10<=2}<br/>

5.3、逻辑运算符

EL 中提供了 3 个逻辑运算符,可以对 boolean 类型的值进行运算,返回值为 true 或 false

&&and:表示交集,两个值都是 true 才返回 true;短路与

||or:表示并集,两个值只要有一个是 true 返回 true,则返回 false;短路或

!:表示非,两个值只要有一个是 true 返回 true,则返回 false;短路或

${1==2 && 2==3} <br>
${1==1 || 2==3} <br>
${!true} <br>

5.4、特殊运算符

5.4.1、集合运算符

使用 [] 指定索引的方式可以获取数组或 List 集合中的元素

语法:${范围.集合变量[index].属性名 }

例如:

返回请求范围内商品列表集合的第一个商品的名称:

${requestScope.productsList[0].productName}
5.4.2、empty运算符

语法:${empty.变量名}

例子:

  1. 获取的是基本类型的数据时:
<%
	//使用Java脚本创建一个集合
	int[] array = new int[]{10,20,30};

	//将集合放到作用域中
	request.setAttribute("array", array);
%>

<!-- 在页面使用EL表达式取得集合中第二个元素的值 -->
${empty a} <br>
${empty array} <br>

结果:a 不存在,所有为空,结果 true;array 存在,所有非空,结果 false

注意:寻找变量名,从 pageScope -> requestScope -> sessionScope -> applicationScope 四大作用域中找,找不到则为空,返回 true;找到了则不为空,返回 false

  1. 获取引用类型的数据时:
<%
	List<String> list1 = new  ArrayList<>();
	List<String> list2 = new  ArrayList<>();
	list2.add("looper");
	request.setAttribute("list1", list1);
	request.setAttribute("list2", list2);
%>
${empty list1}
${empty list2}

结果:list1 显示 truelist2 显示 false

注意:从 pageScope -> requestScope -> sessionScope -> applicationScope 找

  • 如果 集合.size()==0,集合没有元素,认为是空的,返回 true

  • 如果 集合.size()>0,集合有元素,认为是非空的,返回 false

如果找不到,说明没有该变量,值为null,返回true.

5.4.3、三目运算符

格式:${A?B:C}

如果 A 为 true,则执行 B,如果 A 为 false,则执行 C

${2>1?"大于":"不大于"} <br>
5.4.4、() 运算符

通过 () 可改变优先级

${(1>2) || (3<2) }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值