EL表达式概述

EL表达式概述

E L(Expression Language) 目的:为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

——参考《百度百科》

PS:参考文章:EL表达式_百度百科,参考博客:JSTL EL 详解,参考博客:EL表达式从数组 Map List集合取值

EL表达式的语法结构

${……}括号里面的内容就是表达式。

EL表达式的使用

获取普通的单值数据

现在页面里面向域中设置一些值

<% 
    request.setAttribute(“name”,“lisi”);
 %>
 ${name }

获取数组的数据

<h1>使用EL获取数组的数据h1>
<%
    String[] array = {"北京","上海","广州","深圳"};
    pageContext.setAttribute("city", array);
%>
<%-- 这里使用${array }得到一个数组对象,要想得到里面的内容,可以使用角标 --%>
${city[0] }
${city[1] }
${city[2] }

获取List集合的数据

使用EL获取list集合的数据

<% List list = new ArrayList(); list.add(0, "zhangsan"); list.add(1, "lisi"); list.add(2, "wangwu"); pageContext.setAttribute("list", list); %> <%-- ${list}得到的是一个数组,然后可以使用数组的方法进行获取数据 --%> ${list[0] }
${list[1] }
${list[2] }

获取Map集合的数据

<h2>使用EL获取Map集合的数据h2>
<%
    Map<String,String> map = new HashMap();
    map.put("name","张三");
    map.put("age","18");
    map.put("sex","fatboy");
    pageContext.setAttribute("map", map);
%>
<%-- ${map }得到的是一条数据(entry),而entry里面是由一些key=value组成 --%>
${map }<br/>  
${map.name }<br/>
${map.age }<br/>
${map['name'] }<br/>

获得对象的数据

JavaBean

package com.pc.domain;

public class Address {
    /*javabean规范:
        1.实现序列化接口
        2.必须提供无参构造
        3.需要提供getter和setter方法  (属性由getter和setter方法确定,get后面单词首字母变小写其余不变,自己定义的那些字段可以没有,如果是boolean类型,那么getXXX方法可以是isXXX)*/
    private String city;
    public Address() {

    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }

}

JSP

<h1>使用EL获取对象中的数据h1>
<%
    Address addr = new Address();
    addr.setCity("东京");
    pageContext.setAttribute("addr", addr);
%>
${addr }<br/>
${addr.city }<br/>
${addr['city'] }<br/>

获得对象的集合的数据

使用EL获取对象集合的数据

<% Address addr1 = new Address(); addr1.setCity("东京"); Address addr2 = new Address(); addr2.setCity("南京"); Address addr3 = new Address(); addr3.setCity("北京"); List
list = new ArrayList
(); list.add(addr1); list.add(addr2); list.add(addr3); pageContext.setAttribute("list", list); %> <%-- ${list[0]}得到的是一个对象,然后使用对象的获取方式获取数据 --%> ${list[0].city }
${list[1].city }
${list[2]['city']}

.和[]的区别

如果是数组和list集合那么必须使用[]

如果Map集合和对象可以使用[],还可以使用.

当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或以数字开头的符号,就一定要使用 []

EL操作符

JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:

术语 定义
算术型 +、-(二元)、*、/、div、%、mod、-(一元)
逻辑型 and、&&、or、||、!、not
关系型 ==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
empty 空操作符是前缀操作,可用于确定值是否为空(null)。
条件型 A ?B :C。根据 A的结果来赋值 B 或 C,true为B,false为C

执行算数运算

EL执行算数运算

\${1+2 }=${1+2 }

结果为:${1+2 }=3

执行逻辑运算

<h2>EL执行逻辑运算h2>
${3>2&&2<5 }
${3>2 and 2<5 }

结果为:true ture

执行关系运算

EL执行关系元素

${5>2 } ${5 gt 2 }

结果为:true true

执行三元运算

三元运算符

${5>2?"正确":"错误" }

结果为:正确

执行Empty运算

<h3>emptyh3>

${empty ""}
${empty list[0] }
${empty null }
${!empty null }
${not empty null }

结果为:true true true false false

EL操作WEB开发的常用对象(11个)

接收域中的数据:pageScope,requestScope,sessionScope,applicationScope

术语
定义
pageScope
将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName}访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName}访问对象的属性。
requestScope
将请求(Request)范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。
sessionScope
将会话(Session)范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:
${sessionScope. name}
applicationScope
将应用程序范围,也就是ServletContext的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。
案例
<%
    pageContext.setAttribute("name", "张三");
    request.setAttribute("name", "李四");
    session.setAttribute("name", "王五");
    application.setAttribute("name", "赵六");
%>
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name }

${pageScope['name'] }
${requestScope["name"] }
${name }

结果为:

张三
李四
王五
赵六

张三
李四

张三
全域查找

${name} :默认从pageScope域中查找,如果找到立马显示,如果未找到,依次从requestScope/sessionScope/applicationScope域中去找,直到找到为止,如果均未找到,页面空白!

接收请求参数:param paramValues

术语
定义
param
将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name)获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
paramValues
将请求参数名称映射到一个数值数组。它与param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。
案例

访问该jsp,带有的查询字符串为username='switch'&password='123456'

<h1>获取请求参数h1>
${param.username }<br/>
${paramValues.username[0] }<br/>
${paramValues.password[0] }<br/>

结果为:

switch
switch
123456

获取请求头信息:header headerValues

术语
定义
header
将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式${header. name} 相当于 request.getHeader(name)。
headerValues
将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String)获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
案例
<h3>获取请求头信息h3>

${header['User-Agent'] }

获取全局初始化参数:initParam

术语
定义
initParam
将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name)获得)。
案例
在web.xml文件中设置初始参数
<context-param>
    <param-name>usernameparam-name>
    <param-value>Switchparam-value>
 context-param>
jsp
<h3>获取应用初始化参数h3>
${initParam.username }<br/>

获取Cookie中的值:cookie

术语
定义
cookie
将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie.name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
案例
<h3>获取cookie对象中的数据h3>
<%-- ${cookie.JSESSIONID }得到的是一个cookie对象本身 --%>
${cookie.JSESSIONID.value }

获取pageContext中的对象:pageContext

术语
定义
pageContext
JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext等。例如,${pageContext.response} 为页面的响应对象赋值。
案例

获取pageContext对象中的数据

获取地址:${pageContext.request.remoteAddr }
获取工程路径:${pageContext.request.contextPath }

你可能感兴趣的:(JSP)