Java研学-EL表达式

一 概述

1 用于替换 JSP 页面中的脚本表达式,使JSP写起来更加简单,简化 JSP 代码开发。

EL概念 EL语法 EL作用
英文名称:Expression Language
中文名称:表达式语言
${ 变量名或表达式 } 1.用于输出作用域中变量值
2.用于各种运算:算术,逻辑,关系,三元运算等

2 EL 与 JSP 脚本表达式的区别

区别 JSP脚本表达式 EL
语法 <%=m%> ${m}
输出哪里的值 输出的是脚本变量
<% int m= 5; %>
输出的是作用域中的值
<% request.setAttribute(“m”, 5); %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--基本使用方式--%>
<html>
<head>
  <title>Play</title>
</head>
<body>
<%
  int m=6;
// 向请求域中添加一个变量
  request.setAttribute("num", 8);
%>
输出m:
<%=m%><br>
输出作用域中值:
<%= request.getAttribute("num")%><br>
使用 EL 表达式输出:
${num}
</body>
</html>

3 EL 表达式获取不同类型数据(数据需在作用域中)

实体类

package com.domain;
import java.math.BigDecimal;
public class Employee {
private String name;
private BigDecimal salary;
    public Employee() {
    }
    public Employee(String name, BigDecimal salary) {
        this.name = name;
        this.salary = salary;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public BigDecimal getSalary() {
        return salary;
    }
    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}

jsp

<%@ page import="com.domain.Employee" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.math.BigDecimal" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>EL取值</title>
</head>
<body>
<%
  // 创建员工对象
  Employee emp = new Employee("大黄", new BigDecimal("8848"));
  // 存到页面域中
  pageContext.setAttribute("emp", emp);
%>
<h3>JavaBean的属性值</h3>
<%-- 本质上是调用 get方法 --%>
姓名:${emp.name}-->${emp.getName()}-->${emp["name"]},薪水:${emp.salary}
<hr>
<%
  List<String> names = Arrays.asList("大黄", "小黄","小小黄");
  // 放在请求域中
  request.setAttribute("names",names);
%>
<h3>取集合中元素</h3>
${names[0]} --> ${names[1]}
<%
  int[] nums = {2,30,400,8};
  // 数组放在请求域
  request.setAttribute("nums", nums);
%>
<h2>取数组中元素</h2>
${nums[0]} &nbsp; ${nums[3]}
<%
  Map<String, String> map = new HashMap<>();
  map.put("emp1", "大黄");
  map.put("emp2", "小黄");
  map.put("emp3", "小小黄");
  //放在请求域
  request.setAttribute("map",map);
%>
<h2>Map中元素</h2>
<%-- map对象.键名 --%>
${map.emp1} --> ${map.emp2} --> ${map["emp3"]}
</body>
</html>

二 EL 中的表达式

1 算数表达式

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--EL中只要字符串是数值都会执行算术运行--%>
<html>
<head>
  <title>EL算数表达式</title>
</head>
<body>
<%
  request.setAttribute("a", "6");
  request.setAttribute("b", "8");
%>
${a+b},${a*b},${a/b},${a%b}
${1 + 1} , ${2 - 1}
</body>
</html>

2 比较表达式

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>EL比较表达式</title>
</head>
<body>
<h2>比较运算符</h2>
${1 eq 1}<br>
${1 != 1}<br>
${1 lt 2}<br>
</body>
</html>

3 逻辑表达式

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>EL逻辑表达式</title>
</head>
<body>
<h2>逻辑运算符</h2>
${true and false}<br>
${true || false}<br>
${not true}<br>
</body>
</html>

4 三元运算符

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>EL三元</title>
</head>
<body>
<h2>三元运算符</h2>
${5>6?"T":"F"}
</body>
</html>

5 判空表达式

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--变量名在作用域中为空,不存在,返回true--%>
<%--变量名为空串,返回true--%>
<%--变量名是集合,若集合中没有元素,返回true--%>
<html>
<head>
  <title>EL判空表达式</title>
</head>
<body>
<h2>判空表达式</h2>
<%--判空,判断的是内容是否为空,不是对象是否为空--%>
${empty aaa} <br>
<%
  pageContext.setAttribute("emp1","");
  // 集合中没有元素
  List<String> names = new ArrayList<>();
  names.add("大黄");
  pageContext.setAttribute("emp2", names);
%>
${empty emp1}<br>
${empty emp2}<br>
</body>
</html>

三 EL 作用域取值

  EL 从 4 个作用域对象中获取数据是,从小到大的顺序去获取,若要指定作用域获取数据,可使用以下 EL 的内置对象来指定。
  JSP 本质是 Servlet,但比 Servlet 多了一个作用域:pageContext 页面域(只在一个JSP页面中起作用,不同的JSP之间不能实现数据的共享,比请求域范围还要小)

PageContext 操作方法 说明
void setAttribute(String key, Object value) 向页面域中添加键和值
Object getAttribute(String key) 从页面域中得到值
void removeAttribute(String key) 删除四个域中同名的键
Object findAttribute(String key) 按从小到大的范围从四个作用域中来查找某个键,找到就停止,没有找到则返回null
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>EL指定域获取数据</title>
</head>
<body>
  <%
// 于页面域中添加一个字符串
pageContext.setAttribute("name", "页面域");
// 请求域
request.setAttribute("name", "请求域");
// 会话域
session.setAttribute("name", "会话域");
// 上下文域
application.setAttribute("name", "上下文域");
%>
从页面域获取:${pageScope.name}<br>
从请求域获取:${requestScope.name}<br>
从会话域获取:${sessionScope.name}<br>
从上下文域获取:${applicationScope.name}<br>
自动查找作用域获取:${name}
</body>
<%--从页面域获取:页面域
从请求域获取:请求域
从会话域获取:会话域
从上下文域获取:上下文域
自动查找作用域获取:页面域--%>
</html>
作用域 语法
页面域 ${pageScope.键名}
请求域 ${requestScope.键名}
会话域 ${sessionScope.键名}
上下文域 ${applicationScope.键名}

你可能感兴趣的:(#,Java研学,java,开发语言)