javaweb学习笔记 EL表达式篇

a)什么是EL表达式,EL表达式的作用?

EL表达式的是 expression language是表达式语言。
EL表达式有什么作用?EL表达式主要是替代jsp页面中的脚本在jsp页面中的输出。
因为EL表达式在输出数据时候,要比jsp的表达式脚本要简洁许多
EL表达式的格式是:${表达式}
EL表达式在输出null的时候,输出的是空串,jsp表达式脚本输出null值的时候,输出的是null字符串

b)EL表达式搜索域数据的顺序

EL表达式主要是在jsp页面中输出数据,主要是输出域对象中的数据,
当四个域中都有相同的key的值的域对象时候,EL表达式的按照四个域的从小到大的顺序进行搜索,找到就输出
pageContext—request----session—application

c)EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性

1.需求—输出Bean的普通属性,数组属性,List集合属性,map集合属性
在这里插入图片描述

c.jsp

<%@ page import="com.atguigu.pojo.person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/14
  Time: 20:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%person person = new person();
person.setName("赵宸");
person.setPhones(new String[]{"11111","22222","233421"});
    ArrayList<String> cities = new ArrayList<String>();
    cities.add("北京");
    cities.add("上海");
    cities.add("广州");
    cities.add("深圳");
    person.setCities(cities);
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("key1","value1");
    map.put("key2","value2");
    map.put("key3","value3");
    map.put("key4","value4");
    person.setMap(map);
    pageContext.setAttribute("person",person);
%>

输出person,${ person }<br/>    <%--输出person,com.atguigu.pojo.person@75d18fe4 输出的是对象--%>
输出person中的name属性:${person.name} <br/>
输出person的phones数组属性名:${person.phones[0]}<br/>
输出person的cities的集合值中的元素值${person.cities}<br/>
输出person的List的集合值中的个别元素值${person.cities[0]}<br/>
输出person中的map属性 ${person.map}<br/>
输出person中map集合中某个key的值${person.map.key1}<br/>
输出person中get方法返回值为18的age属性 ${person.age}<br/>

EL表达式在找属性的时候 找的是属性的get方法
</body>
</html>

person.java

package com.atguigu.pojo;


import java.util.List;
import java.util.Map;

public class person {
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String,Object> map;
    private int age ;
        public int getAge() {
        return 18;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getPhones() {
        return phones;
    }

    public void setPhones(String[] phones) {
        this.phones = phones;
    }

    public List<String> getCities() {
        return cities;
    }

    public void setCities(List<String> cities) {
        this.cities = cities;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public person() {
    }

    public person(String name, String[] phones, List<String> cities, Map<String, Object> map) {
        this.name = name;
        this.phones = phones;
        this.cities = cities;
        this.map = map;
    }
}

d)EL表达式—运算

1) 关系运算

关系运算符说明范例结果
== 或 eq等于${5 == 5} 或 ${5 eq 5}true
!= 或 ne不等于${5 != 5} 或 ${5 ne 5}false
< 或 lt小于${3<5} 或 ${3 lt 5}true
> 或 gt大于${2 >10} 或 ${2 gt 10}false
<= 或 le小于等于${5 >= 12} 或 ${5 le 12 }true
>= 或 ge大于等于${3 >= 5 }或 ${3 ge 5 }false

2)逻辑运算

逻辑运算符说明范例结果
&& 或 and与运算${12 == 12 && 12<11} 或 ${12 == 12 and 12 <11}false
Ⅱ Ⅱ 或 or或运算${12 == 12 Ⅱ Ⅱ 12<11 }或 ${12 == 12 or 12 <11}true
! 或 not取反运算${!true} 或 ${not ture}false

3)算术运算

算数运算符说明范例结果
+加法${12+18}30
-减法${18 - 8}10
*乘法${12*12}144
/ 或 div除法${144 /12 }或 ${144 div 12}12
% 或 mod取模$ {144 %10 }或${144 div 10}4

i empty 运算

empty运算可以判断一个数据是否为空,如果为空,贼输出为true,不为空,输出false
以下几种情况为空:
1.值为null的时候,为空
2.值为空串的时候,为空
3.值是object类型数组,长度为零的时候
4. list集合,元素个数为领
5. map集合元素个数为零
在这里插入图片描述

 
 <%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/14
  Time: 22:18
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
//    1.值为null的时候,为空
    request.setAttribute("emptyNull",null);

//    2.值为空串的时候,为空
    request.setAttribute("emptyStr","");
//    3.值是object类型数组,长度为零的时候
    request.setAttribute("emptyArr",new Object[]{});
//    4. list集合,元素个数为领
    List<String> list = new ArrayList<String>();
    request.setAttribute("emptyList",list);
//    5. map集合元素个数为零
    Map<String,Object> map = new HashMap<String,Object>();
    request.setAttribute("emptyMap",map);
%>
${empty emptyNull}<br/>
${empty emptyStr}<br/>
${empty emptyArr}<br/>
${empty emptyList}<br/>
${empty emptyMap}<br/>

</body>
</html>

ii 三元运算

表达式1 ?表达式2 :表达式3
如果表达式1的值为真,返回表达式2的值,如果表达式1的值为假,返回表达式3的值,
在这里插入图片描述

<hr>
${12 == 12 ? "hello" : "world"}

iii."."点运算和【】中括号运算符

.点运算,可以输出bean对象中,某个属性的值,
【】中括号运算,可以输出有序集合中某个元素的值
并且中括号运算,还可以输出map集合中key集合含有特殊字符的key的值
在这里插入图片描述
f.jsp

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/15
  Time: 20:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Map<String,Object> map = new HashMap<String, Object>();
    map.put("a.a.a","aaavalue");
    map.put("b+b+b","bbbvalue");
    map.put("c-c-c","cccvalue");

    request.setAttribute("map",map);
%>
${map['a.a.a']}<br/>
${map['b+b+b']}<br/>
${map['c-c-c']}<br/>
</body>
</html>

e)EL表达式的11个隐藏对象

EL表达式中的11个隐藏对象是表达式中自己定义的,可以直接使用

变量类型作用
pageContextpageContextImpl它可以获取jsp中的九大内置对象
pageScopeMap<String,Object>它可以获取pageContext域中的数据
requestScopeMap<String,Object>它可以获取request域中的数据
sessionScopeMap<String,Object>它可以获取session域中的数据
applicationScopeMap<String,Object>它可以获取servletContext域中的数据
paramMap<String,String>他可以获取请求参数的值
paramValuesMap<String,String[]>它也可以获取请求参数的值,获取多个值的时候使用
headerMap<String,String>它可以获取请求头的信息
headerValuesMap<String,String[]>它可以获取多个值的情况
cookieMap<String,cookie>他可以获取当前请求的cookie信息
initParamMap<String,String>他可以获取在web.xml中配置的上下文参数

1.EL获取四个特定域中的属性

pageScope ===== pageContext域
requestScope ===== request域
sessionScope ==== session域
applicationScope ===== ServletContext域

scope.jsp

<%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/15
  Time: 21:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("key1","pageContext1");
pageContext.setAttribute("key2","pageContext2");
session.setAttribute("key1","session1");
application.setAttribute("key1","application1");
request.setAttribute("key1","request1");
%>
${pageContext.ket1}
${requestScope.key1}
${applicationScope.key1}
${sessionScope.key1}

</body>
</html>


 

ii. pageContext 对象的使用

在这里插入图片描述

pageContext.jsp

<%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/15
  Time: 21:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
request.getScheme()它可以获取请求的协议
request.getServerName()获取请求的服务器ip或域名
request.getServletPath()获取请求的服务器端口号
request.getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式 get或者post
request.getRemoteHost() 获取客户端的ip地址
request.getSession() 获取会话的唯一标识
--%>
<%=request.getScheme()%>
<%=request.getServerName()%>
<%=request.getServletPath()%>
<%=request.getContextPath()%>
<%=request.getMethod()%>
<%=request.getRemoteHost()%>
<%=request.getSession()%>>
1. 协议: ${pageContext.request.scheme}
2. 服务器 ip:${pageContext.request.serverName}
3. 服务器端口:${pageContext.request.serverPort}
4. 获取工程路径:${pageContext.request.contextPath}
5. 获取请求方法:${pageContext.request.method}
6. 获取客户端 ip 地址:${pageContext.request.remoteHost}
7. 获取会话的 id 编号 ${pageContext.request.session}
</body>
</html>

iii. EL 表达式其他隐含对象的使用

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/15
  Time: 22:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
输出请求参数username的值${param.username}<br/>
输出请求参数password的值${param.password}<br/>
${paramValues.hobbies[0]}<br/>
${paramValues.hobbies[1]}<br/>
<hr>
输出请求头【User-Agent】的值${header['User-Agent']}<br/>
输出请求头【Connection】的值${header.Connection}<br/>
输出请求头【Connection】的值 ${headerValues["User-Agent"][0]}
</body>
</html>

在这里插入图片描述

<hr>
获取cookie的名称:${cookie.JSESSIONID.name}<br/>
获取cookie的值:${cookie.JSESSIONID.value}<br/>
<hr>
输出context-param的值是${initParam}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值