栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

EL表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

EL表达式

文章目录

1.什么是EL表达式2.EL表达式搜索域数据的顺序3.EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性4.EL表达式--运算5.EL表达式的11个隐含对象

1.什么是EL表达式

EL表达式的全称:expression Language。表达式语言。
EL表达式的作用:主要是代替jsp页面中的表达式脚本,在jsp页面中进行数据的输出。因为EL表达式在输出数据时要比jsp的脚本要简洁。
EL表达式输出的格式是:${表达式}
EL表达式输出null值的时候,输出的是空串,jsp表达式脚本输出null值的时候,输出的是null字符串。
我们创建一个工程,在webapp目录下创建一个a.jsp,代码如下:

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


    Title


      <%
        request.setAttribute("key","值");
      %>
      表达式脚本输出key的值是:<%=request.getAttribute("key")%>
EL表达式输出key的值是:${key}
表达式脚本输出key的值是:<%=request.getAttribute("key1")%>
EL表达式输出key的值是:${key1}

运行结果如下:

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

EL表达式主要是在jsp页面中输出数据。主要是输出域对象中的数据。
当四个域中都要相同的key值时,EL表达式会按照四个域从小到大的顺序去进行搜索,找到就输出。
我们在webapp目录下编写一个b.jsp,代码如下:

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


    Title


    <%
        pageContext.setAttribute("key","pageContext");
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");
    %>
    ${key}


运行结果:

我们任意的调换数据,结果还是pageContext。
接着我们注释掉pageContext,运行结果如下:

我们再把request注释掉,结果如下:

接着注释掉session,结果如下:

这是因为session在打开浏览器时被创建,我们关闭浏览器在搜索b.jsp,结果为application

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

我们先创建一个软件包,假设命名为com.bjpowernode,在包下创建一个Person类,代码如下:

package com.bjpowernode;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private String[]phones;
    private Listcities;
    private Mapmap;
    public Person(){
    }
    public Person(String name,String[]phones,Listcities,Mapmap){
        this.name=name;
        this.phones=phones;
        this.cities=cities;
        this.map=map;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setPhones(String[]phones){
        this.phones=phones;
    }
    public String[] getPhones(){
        return this.phones;
    }
    public void setCities(Listcities){
        this.cities=cities;
    }
    public List getCities(){
        return this.cities;
    }
    public void setMap(Mapmap){
        this.map=map;
    }
    public Map getMap(){
        return this.map;
    }
    @Override
    public String toString(){
        return "Person{"+
                "name="+name+
                ",phone="+ Arrays.toString(phones)+
                ",cities="+cities+
                ",map="+map+
                "}";
    }
}

然后在webapp目录下创建一个c.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.bjpowernode.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.ArrayList" %>


    Title


    <%
        Person person=new Person();
        person.setName("HelloWorld");
        person.setPhones(new String[]{"18610541354","186888666","186999888"});
        Listcities=new ArrayList();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳");
        person.setCities(cities);
        Mapmap=new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
        pageContext.setAttribute("person",person);
    %>
    输出Person:${person}
输出Person的name属性:${person.name}
输出Person的phones数组地址:${person.phones}
输出Person的phones数组属性:${person.phones[0]}
输出Person的cities集合中的元素值:${person.cities}
输出Person的cities集合中的个别元素值:${person.cities[0]}
输出Person的map集合:{$person.map}
输出Person的map集合中某个key的值:{$person.map.key1}

运行结果如下:

假设我们给Person类添加一个age属性,

private int age=18;

然后在c.jsp访问该属性

删除Person的age属性:{$person.age}

结果会报错。
我们在Person.java中添加getAge()方法,在重新运行,结果如下:

也就是说,在找数据时,不会直接找那个属性,而是寻找该属性对应的get方法。

4.EL表达式–运算

1)关系运算

我们在webapp目录下创建一个d.jsp,代码如下:

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


    Title


    ${12==12}或${12 eq 12}
${12 != 12}或${12 ne 12}
${12 > 12}或${12 gt 12}
${12 < 12}或${12 lt 12}
${12 <= 12}或${12 le 12}
${12 >=12}或${12 ge 12}

结果如下:

2)逻辑运算

我们修改d.jsp,代码如下:

${12==12 && 12>11 }或 ${12==12 and 12>11}
${12==12 || 12>11 }或 ${12==12 or 12>11}
${!true} 或 ${not true}

结果如下:

3)算术运算

修改d.jsp代码:

  ${12 +12}
${12-12}
${12*12}
${12/12}或${12 div 12}
${18%12}或${18 mod 12}

结果如下:

4)empty运算
可以判断一个数据是否为空,如果为空,则输出true,反之输出false
以下几种情况为空:
(1)值为null的时候,为空
(2)值为空串的时候,为空
(3)值是Object类型数组,长度为0的时候
(4)list集合,元素个数为0
(5)map集合,元素个数为0
我们创建一个e.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>


    Title


    <%
        request.setAttribute("emptyNull", null);
        request.setAttribute("emptyStr","");
        request.setAttribute("emptyArr",new Object[]{});
        Listlist=new ArrayList<>();
        list.add("abc");
        request.setAttribute("emptyList",list);
        Mapmap=new HashMap();
        map.put("key1","value1");
        request.setAttribute("emptyMap",map);
    %>
    ${empty emptyNull}
${empty emptyStr}
${empty emptyArr}
${empty emptyList}
${empty emptyMap}

结果如下:

5)三元运算
表达式1?表达式2:表达式3
我们修改e.jsp,代码如下:

  ${12==12?"Hello":"World"};
${12!=12?"Hello":"World"};

结果如下:

6)"."点运算和[]中括号运算符
点运算可以输出Bean对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值
我们创建一个f.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>


    Title


    <%
        Mapmap=new HashMap();
        map.put("aaa","aaaValue");
        map.put("b+b+b","bbbValue");
        map.put("c-c-c","cccValue");
        request.setAttribute("map",map);
    %>
    ${map}
${map.aaa}
${map.b+b+b}
${map['b+b+b']}
${map["c-c-c"]}

结果如下:

当key有特殊字符时,要获得value值时可以用[]将key包起来,同时key要加单引号或者双号

5.EL表达式的11个隐含对象

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

变量					类型					作用
pageContext			PageContextImpl			获取jsp中的九大内置对象
pageScope			Map		获取pageContext域中的数据
requestScope		Map		获取request域中的数据
sessionScope		Map 		获取Session域中的数据
applicationScope	Map		获取ServletContext域中的数据
param				Map		获取请求的参数值
paramValues			Map	获取请求参数的值,获取多个值的时候使用		
header				Map		获取请求头的信息
headerValues		Map	获取请求头的信息,可以获取多个值的情况
cookie				Map		获取当前请求的cookie信息
initParam			Map		获取在web.xml中配置的上下文参数	

1)EL获取四个特定域中的属性
pageScope ==== pageContext域
requestScope ==== Request域
sessionScope ==== Session域
applicationScope ==== ServletContext域
我们创建一个scope.jsp,代码如下:

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


    Title


    <%
        pageContext.setAttribute("key1","pageContext1");
        pageContext.setAttribute("key2","pageContext2");
        request.setAttribute("key2","request");
        session.setAttribute("key2","session");
        application.setAttribute("key2","application");
    %>
    ${pageScope.key2}
${requestScope.key2}
${sessionScope.key2}
${applicationScope.key2}

结果如下:

2)pageContext对象的使用
1.协议
2.服务器IP
3.服务器端口
4.获取工程路径
5.获取请求方法
6.获取客户端IP地址
7.获取会话的id编号
我们创建一个pageContext.jsp,代码如下:

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


    Title


    <%--
    request.getScheme()它可以获取请求的协议
    request.getServerName()获取请求的服务器IP或域名
    request.getServerPort()获取请求的服务器端口号
    request.getContextPath()获取当前路径
    request.getMethod()获取请求的方式(GET or POST)
    request.getRemoteHost()获取客户端的ip地址
    session.getId()获取会话的唯一标识
    --%>
    ${pageContext}
<%=request.getScheme()%>
<%=request.getServerName()%>
<%=request.getServerPort()%>
<%=request.getContextPath()%>
<%=request.getMethod()%>
<%=request.getRemoteHost()%>
<%=session.getId()%>
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.session.id}

结果如下:

3)EL表达式其他隐含对象的使用(了解一下即可)
创建一个other_el_obj.jsp
代码如下:

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


    Titile


    ${param}

结果如下:

没有参数,那么我们在浏览栏后面添加参数
http://ip:port/other_el_obj.jsp?username=cxy&password=666,结果如下:

修改other_el_obj.jsp如下:


    输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}

结果如下:

我们修改other_el_obj.jsp如下:

输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}
输出请求参数hobby的值:${paramValues.hobby[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}

在地址栏输入:
http://ip:port/other_el_obj.jsp?username=cxy&password=666&hobby=cpp&hobby=java
结果如下:

修改web.xml,添加代码如下:

 
    url
    jdbc:mysql1///test
  

修改other_el_obj.jsp代码如下:

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


    Titile


    输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}
输出请求参数hobby的值:${paramValues.hobby[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}

输出请求头[User-Agent]的值:${header['User-Agent']}
输出请求头[Connection]的值:${header.Connection}
输出请求头[User-Agent]的值:${headerValues['User-Agent'][0]}

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

${initParam}
输出<Context-param">>url的值:&{initParam.url}

在浏览栏上输入:http://ip:port/other_el_obj.jsp?username=cxy&password=666&hobby=cpp&hobby=java
结果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号