EL表达式

1、EL表达式概述

基本概念

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

基本语法

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

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

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

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

注意:有些时候我们使用EL表达式来获取后端塞在请求域的数据时,发现获取不到,这是因为jsp默认开启了 isELIgnored 这个属性,它的作用是忽略EL表达式。所以我们必须要将它给关闭了。

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

 2、EL表达式基本用法

1)获取四大域中的数据

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

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

创建两个实体类,User和Address  

/**
 * 用户的实体类
 */
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;
	}	
}



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" %>


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

-----------获取Map集合数据------------------
<% Map map = new HashMap(); map.put("aaa",new User()); pageContext.setAttribute("map", map); %> ${map}
${map.aaa}<%--获取map的value,是通过get(Key) --%>
${map.aaa.name}${map.aaa.age}
${map["aaa"].name }

2)EL表达式的注意事项

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

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

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

3)EL表达式的使用细节

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

4)EL表达式的运算符

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

EL表达式_第2张图片

运算符 作用
empty

1、判断对象是否为null

2、判断字符串是否为空字符串

3、判断容器元素是否为0

条件 ?表达式1 : 表达式2 三元运算符

 使用方式的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.itheima.domain.User" %>


	
		EL两个特殊的运算符
	
	
		<%--empty运算符:
			它会判断:对象是否为null,字符串是否为空字符串,集合中元素是否是0个
		--%>
		<% String str = null;
		  String str1 = "";
		  List slist = new ArrayList();
		  pageContext.setAttribute("str", str);
		  pageContext.setAttribute("str1", str1);
		  pageContext.setAttribute("slist", slist);
		%>
		${empty str}============当对象为null返回true
${empty str1 }==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)
${empty slist}==========当集合中的元素是0个时,是true
<%--三元运算符 条件?真:假 --%> <% request.setAttribute("gender", "female"); %>

3、EL表达式的11个隐式对象

1)隐式对象介绍

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

EL中的隐式对象 类型 对应JSP隐式对象 备注
PageContext Javax.serlvet.jsp.PageContext PageContext 完全一样
ApplicationScope Java.util.Map 没有 应用层范围
SessionScope Java.util.Map 没有 会话范围
RequestScope Java.util.Map 没有 请求范围
PageScope Java.util.Map 没有 页面层范围
Header Java.util.Map 没有 请求消息头key,值是value(一个)
HeaderValues Java.util.Map 没有 请求消息头key,值是数组(一个头多个值)
Param Java.util.Map 没有 请求参数key,值是value(一个)
ParamValues Java.util.Map 没有 请求参数key,值是数组(一个名称多个值)
InitParam Java.util.Map 没有 全局参数,key是参数名称,value是参数值
Cookie Java.util.Map 没有 Key是cookie的名称,value是cookie对象

代码示例 

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


    EL表达式11个隐式对象


    <%--pageContext对象 可以获取其他三个域对象和JSP中八个隐式对象--%>
    ${pageContext.request.contextPath} 
<%--applicationScope sessionScope requestScope pageScope 操作四大域对象中的数据--%> <% request.setAttribute("username","zhangsan"); %> ${username}
${requestScope.username}
<%--header headerValues 获取请求头数据--%> ${header["connection"]}
${headerValues["connection"][0]}
<%--param paramValues 获取请求参数数据--%> ${param.username}
${paramValues.hobby[0]}
${paramValues.hobby[1]}
<%--initParam 获取全局配置参数--%> ${initParam["pname"]}
<%--cookie 获取cookie信息--%> ${cookie}
<%--获取Map集合--%> ${cookie.JSESSIONID}
<%--获取map集合中第二个元素--%> ${cookie.JSESSIONID.name}
<%--获取cookie对象的名称--%> ${cookie.JSESSIONID.value} <%--获取cookie对象的值--%>

你可能感兴趣的:(Web服务器,java,html,开发语言)