EL表达式

    科技2022-08-31  104

    01-EL表达式-EL表达式的介绍

    02-EL表达式-EL表达式的快速入门

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式快速入门</title> </head> <body> <%--1.向域对象中添加数据--%> <% request.setAttribute("username","zhangsan"); %> <%--2.获取数据--%> Java代码块:<% out.println(request.getAttribute("username")); %> <br> JSP表达式:<%= request.getAttribute("username")%> <br> EL表达式:${username} </body> </html>

    03-EL表达式-EL表达式获取不同类型数据

    <%@ page import="com.itheima.bean.Student" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.HashMap" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式获取不同类型数据</title> </head> <body> <%--1.获取基本数据类型--%> <% pageContext.setAttribute("num",10); %> 基本数据类型:${num} <br> <%--2.获取自定义对象类型--%> <% Student stu = new Student("张三",23); stu = null; pageContext.setAttribute("stu",stu); %> <%--EL表达式中没有空指针异常--%> 自定义对象:${stu} <br> <%--stu.name 实现原理 getName()--%> 学生姓名:${stu.name} <br> 学生年龄:${stu.age} <br> <%--3.获取数组类型--%> <% String[] arr = {"hello","world"}; pageContext.setAttribute("arr",arr); %> 数组:${arr} <br> 0索引元素:${arr[0]} <br> 1索引元素:${arr[1]} <br> <%--EL表达式中没有索引越界异常--%> 8索引元素:${arr[8]} <br> <%--EL表达式中没有字符串拼接--%> 0索引拼接1索引的元素:${arr[0]} + ${arr[1]} <br> <%--4.获取List集合--%> <% ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); pageContext.setAttribute("list",list); %> List集合:${list} <br> 0索引元素:${list[0]} <br> <%--5.获取Map集合--%> <% HashMap<String,Student> map = new HashMap<>(); map.put("hm01",new Student("张三",23)); map.put("hm02",new Student("李四",24)); pageContext.setAttribute("map",map); %> Map集合:${map} <br> 第一个学生对象:${map.hm01} <br> 第一个学生对象的姓名:${map.hm01.name} </body> </html>

    04-EL表达式-EL表达式的注意事项

    05-EL表达式-EL表达式的运算符

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式运算符</title> </head> <body> <%--empty--%> <% String str1 = null; String str2 = ""; int[] arr = {}; %> ${empty str1} <br> ${empty str2} <br> ${empty arr} <br> <%--三元运算符。获取性别的数据,在对应的按钮上进行勾选--%> <% pageContext.setAttribute("gender","women"); %> <input type="radio" name="gender" value="men" ${gender == "men" ? "checked" : ""}><input type="radio" name="gender" value="women" ${gender == "women" ? "checked" : ""}></body> </html>

    06-EL表达式-EL表达式的使用细节

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式使用细节</title> </head> <body> <%--获取四大域对象中的数据--%> <% //pageContext.setAttribute("username","zhangsan"); request.setAttribute("username","zhangsan"); //session.setAttribute("username","zhangsan"); //application.setAttribute("username","zhangsan"); %> ${username} <br> <%--获取JSP中其他八个隐式对象 获取虚拟目录名称--%> <%= request.getContextPath()%> ${pageContext.request.contextPath} </body> </html>

    07-EL表达式-EL表达式隐式对象

    1 EL表达式和JSTL

    1.1 EL表达式

    1.1.1 EL表达式概述

    基本概念

    EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

    基本语法

    EL表达式的语法格式非常简单,写为 ${表达式内容}

    例如:在浏览器中输出请求域中名称为message的内容。

    假定,我们在请求域中存入了一个名称为message的数据(request.setAttribute("message","EL");),此时在jsp中获取的方式,如下表显示:

    Java代码块JSP表达式EL表达式<%<br/> <br/> String message = (String)request.getAttribute("message");<br/> out.write(message);<br/>%><%=request.getAttribute("message")%>${message}

    通过上面我们可以看出,都可以从请求域中获取数据,但是EL表达式写起来是最简单的方式。这也是以后我们在实际开发中,当使用JSP作为视图时,绝大多数都会采用的方式。

    1.1.2 EL表达式的入门案例

    第一步:创建JavaWeb工程

    第二步:创建jsp页面

    第三步:在JSP页面中编写代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式入门案例</title> </head> <body> <%--使用java代码在请求域中存入一个名称为message的数据--%> <% request.setAttribute("message","Expression Language");%> Java代码块获取:<% out.print(request.getAttribute("message"));%> <br/> JSP表达式获取:<%=request.getAttribute("message")%> <br/> EL表达式获取:${message} </body> </html>

    第四步:部署工程

    第五步:运行测试

    1.1.2 EL表达式基本用法

    在前面的概述介绍中,我们介绍了EL表达式的作用,它就是用于获取数据的,那么它是从哪获取数据呢?

    1)获取四大域中的数据

    它只能从四大域中获取数据,调用的就是findAttribute(name,value);方法,根据名称由小到大逐个域中查找,找到就返回,找不到就什么都不显示。

    它可以获取对象,可以是对象中关联其他对象,可以是一个List集合,也可以是一个Map集合。具体代码如下:

    创建两个实体类,User和Address

    /** * 用户的实体类 * @author 黑马程序员 * @Company http://www.itheima.com */ public class User implements Serializable{ private String name = "黑马程序员"; private int age = 18; private Address address = new Address(); public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } } /** * 地址的实体类 * @author 黑马程序员 * @Company http://www.itheima.com */ public class Address implements Serializable { private String province = "北京"; private String city = "昌平区"; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }

    JSP代码

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.itheima.domain.User" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>EL入门</title> </head> <body> <%--EL表达式概念: 它是Expression Language的缩写。它是一种替换jsp表达式的语言。 EL表达式的语法: ${表达式} 表达式的特点:有明确的返回值。 EL表达式就是把内容输出到页面上 EL表达式的注意事项: 1.EL表达式没有空指针异常 2.EL表达式没有数组下标越界 3.EL表达式没有字符串拼接 EL表达式的数据获取: 它只能在四大域对象中获取数据,不在四大域对象中的数据它取不到。 它的获取方式就是findAttribute(String name) --%> <br/>-----------获取对象数据---------------------<br/> <% //1.把用户信息存入域中 User user = new User(); pageContext.setAttribute("u",user); %> ${u}===============输出的是内存地址<%--就相当于调用此行代码<%=pageContext.findAttribute("u")%> --%><br/> ${u.name}<%--就相当于调用此行代码<% User user = (User) pageContext.findAttribute("u");out.print(user.getName());%> --%><br/> ${u.age} <br/>-----------获取关联对象数据------------------<br/> ${u.address}==========输出的address对象的地址<br/> ${u.address.province}${u.address.city}<br/> ${u["address"]['province']} <br/>-----------获取数组数据---------------------<br/> <% String[] strs = new String[]{"He","llo","Expression","Language"}; pageContext.setAttribute("strs", strs); %> ${strs[0]}==========取的数组中下标为0的元素<br/> ${strs[3]} ${strs[5]}===========如果超过了数组的下标,则什么都不显示<br/> ${strs["2"]}=========会自动为我们转换成下标<br/> ${strs['1']} <br/>-----------获取List集合数据-----------------<br/> <% List<String> list = new ArrayList<String>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); list.add("DDD"); pageContext.setAttribute("list", list); %> ${list}<br/> ${list[0] }<br/> ${list[3] }<br/> <br/>-----------获取Map集合数据------------------<br/> <% Map<String,User> map = new HashMap<String,User>(); map.put("aaa",new User()); pageContext.setAttribute("map", map); %> ${map}<br/> ${map.aaa}<%--获取map的value,是通过get(Key) --%><br/> ${map.aaa.name}${map.aaa.age}<br/> ${map["aaa"].name } </body> </html>

    2)EL表达式的注意事项

    在使用EL表达式时,它帮我们做了一些处理,使我们在使用时可以避免一些错误。它没有空指针异常,没有数组下标越界,没有字符串拼接。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式的注意事项</title> </head> <body> <%--EL表达式的三个没有--%> 第一个:没有空指针异常<br/> <% String str = null; request.setAttribute("testNull",str); %> ${testNull} <hr/> 第二个:没有数组下标越界<br/> <% String[] strs = new String[]{"a","b","c"}; request.setAttribute("strs",strs); %> 取第一个元素:${strs[0]} 取第六个元素:${strs[5]} <hr/> 第三个:没有字符串拼接<br/> <%--${strs[0]+strs[1]}--%> ${strs[0]}+${strs[1]} </body> </html>

    运行结果图:

    \

    3)EL表达式的使用细节

    EL表达式除了能在四大域中获取数据,同时它可以访问其他隐式对象,并且访问对象有返回值的方法.

    4)EL表达式的运算符

    EL表达式中运算符如下图所示,它们都是一目了然的:

    但是有两个特殊的运算符,使用方式的代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.itheima.domain.User" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>EL两个特殊的运算符</title> </head> <body> <%--empty运算符: 它会判断:对象是否为null,字符串是否为空字符串,集合中元素是否是0个 --%> <% String str = null; String str1 = ""; List<String> slist = new ArrayList<String>(); pageContext.setAttribute("str", str); pageContext.setAttribute("str1", str1); pageContext.setAttribute("slist", slist); %> ${empty str}============当对象为null返回true<br/> ${empty str1 }==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)<br> ${empty slist}==========当集合中的元素是0个时,是true <hr/> <%--三元运算符 条件?真:假 --%> <% request.setAttribute("gender", "female"); %> <input type="radio" name="gender" value="male" ${gender eq "male"?"checked":""} >男 <input type="radio" name="gender" value="female" ${gender eq "female"?"checked":""}>女 </body> </html>

    1.1.3 EL表达式的11个隐式对象

    1)隐式对象介绍

    EL表达式也为我们提供隐式对象,可以让我们不声明直接来使用,十一个对象见下表,需要注意的是,它和JSP的隐式对象不是一回事:

    EL中的隐式对象类型对应JSP隐式对象备注PageContextJavax.serlvet.jsp.PageContextPageContext完全一样ApplicationScopeJava.util.Map没有应用层范围SessionScopeJava.util.Map没有会话范围RequestScopeJava.util.Map没有请求范围PageScopeJava.util.Map没有页面层范围HeaderJava.util.Map没有请求消息头key,值是value(一个)HeaderValuesJava.util.Map没有请求消息头key,值是数组(一个头多个值)ParamJava.util.Map没有请求参数key,值是value(一个)ParamValuesJava.util.Map没有请求参数key,值是数组(一个名称多个值)InitParamJava.util.Map没有全局参数,key是参数名称,value是参数值CookieJava.util.Map没有Key是cookie的名称,value是cookie对象 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式11个隐式对象</title> </head> <body> <%--pageContext对象 可以获取其他三个域对象和JSP中八个隐式对象--%> ${pageContext.request.contextPath} <br> <%--applicationScope sessionScope requestScope pageScope 操作四大域对象中的数据--%> <% request.setAttribute("username","zhangsan"); %> ${username} <br> ${requestScope.username} <br> <%--header headerValues 获取请求头数据--%> ${header["connection"]} <br> ${headerValues["connection"][0]} <br> <%--param paramValues 获取请求参数数据--%> ${param.username} <br> ${paramValues.hobby[0]} <br> ${paramValues.hobby[1]} <br> <%--initParam 获取全局配置参数--%> ${initParam["pname"]} <br> <%--cookie 获取cookie信息--%> ${cookie} <br> <%--获取Map集合--%> ${cookie.JSESSIONID} <br> <%--获取map集合中第二个元素--%> ${cookie.JSESSIONID.name} <br> <%--获取cookie对象的名称--%> ${cookie.JSESSIONID.value} <%--获取cookie对象的值--%> </body> </html>
    Processed: 0.008, SQL: 10