JAVA 之 EL表达式

一、什么是EL表达式


1、Expression Language表达式语言

2、是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)

语法格式:${expression }


二、EL中的基础操作符


操作符描述
. 访问一个Bean属性或者一个映射条目
[] 访问一个数组或者链表的元素
( ) 组织一个子表达式以改变优先级
+
- 减或负
*
/ or div
% or mod 取模
== or eq 测试是否相等
!= or ne 测试是否不等
< or lt 测试是否小于
> or gt 测试是否大于
<= or le 测试是否小于等于
>= or ge 测试是否大于等于
&& or and 测试逻辑与
|| or or 测试逻辑或
! or not 测试取反
empty 测试是否空值

三、EL中的内置对象


内置对象描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
initParam 上下文初始化参数
cookie Cookie值
pageContext 当前页面的pageContext

四、EL从四大域中获取数据


1、如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

page<request<session<application

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>
<%
    pageContext.setAttribute("name","pageContext");
    request.setAttribute("name","request");
    session.setAttribute("name","session");
    application.setAttribute("name","application");
%>
name=${name}

</body>
</html>

 2、使用EL内置对象,从指定域中获取数据

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>
<%
    pageContext.setAttribute("name","pageContext");
    request.setAttribute("name","request");
    session.setAttribute("name","session");
    application.setAttribute("name","application");
%>
pageName=${pageScope.name}<br>
requestName=${requestScope.name}<br>
sessionName=${sessionScope.name}<br>
applicationName=${applicationScope.name}

</body>
</html>


 五、pageContext对象


该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象注意:这些对象在EL里不是内置对象,这些对象只能通过pageContext获取

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>

${pageContext.request.contextPath}<br>
${pageContext.request.method}<br>
${pageContext.request.requestURL}<br>
</body>
</html>


 六、param和paramValues对象


param和paramValues对象用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <meta charset="utf-8">
    <title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="testEL.jsp" method="post">
    用户名:<input name="username" type="text" /><br>
    密码:<input name="password" type="password" /><br>
    性别:<input name="sex" type="radio" value="男" /><input name="sex" type="radio" value="女"/>女<br>
    爱好:<input name="hobby" type="checkbox" value="运动"/>运动
    <input name="hobby" type="checkbox" value="阅读" />阅读
    <input name="hobby" type="checkbox" value="音乐" />音乐
    <input name="hobby" type="checkbox" value="其他"/>其他<br>
    <input type="submit" value="登录"> <input type="reset" value="重置"><br>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
%>
    username=${param.username}<br>
    sex=${param.sex}<br>
    hobby= ${paramValues.hobby[0]}  ${paramValues.hobby[1]}
</body>
</html>

 


 七、header和headerValues对象


header和headerValues对象用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法

header对象返回单一值,而headerValues则返回一个字符串数组。

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
%>
    header=${header["user-agent"]}
</body>
</html>


 八、initParam对象


获取初始化参数,其底层调用的是ServletContext.getInitParameter()

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<context-param>
    <param-name>name</param-name>
    <param-value>zero-vic</param-value>
</context-param>
</web-app>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

<html>
<head>
    <meta charset="utf-8">
    <title>EL表达式</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
%>
    name=${initParam.name}
</body>
</html>


 九、empty运算符


empty运算符用于检测一个值是否为null或者空

empty是前缀运算符其运算结果是布尔值

示例:${empty user?“zero”:user.name}

规则:

指向的对象为null或者为“”时,返回true

指向的集合或者数组长度为0时,返回true

指向的Map对象不存在、指定的key不存在、对应的value为空时,返回true


十、EL总结


EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分

EL可以对数据进行自动类型转换

EL不会抛出空指针异常,只会不显示

EL不会抛出数组越界异常,只会不显示

EL可以单嵌套

EL中访问存在对象的不存在属性时会抛出propertNotFoundExpectation异常

EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)

原文地址:https://www.cnblogs.com/zero-vic/p/12808505.html