EL简介

EL语言原本是JSTL1.0中的技术(所以EL和JSTL配合如此亲密和默契也就是自然的了),但是从JSP2.0开始(JSTL1.1)就分离出来纳入了JSP的标准了。因此EL不需要任何jar包,他是集成到JSP技术本身中的了。
由于EL定位是 表达式语言,因此EL只能用于做简单的运算和取值,它是JSP无脚本化的一个利器,非常易学。
 
EL的特点
 
1、所有的EL表达式的格式 ${   expression   },例如取的一个对象user的age属性 ${ user.name }
 
2、可以使用在任何自定义标签(包括JSTL , JSP Action,EL 函数)的属性上,或者作为JSP的响应文本数据。
 
3、作为JSP的响应文本数据时,  若EL 表达式的值为null ,他将不会显示任何内容。
 

基本类型

由于EL是一种 表达式语言,因此你没有机会去定义变量,也就是没有诸如 int , char 之类的类型关键词。只能使用字面量或者对象属性量。
 
bool布尔:    true    false
 
integer类型  :   如 89 , 90 ,-1 , 0 ...
 
浮点类型float:  如 0.12,  90.123  , -190.123,1.0E2 ...
 
字符串类型String: 如  'hello'  ,  "hello"   ...   (可以使用单引号,或者双引号)
 
引用类型 :    null 和 非null(主要是JavaBean对象,java.util.Map  , java.util.List , Java数字,Java字符串 和 EL隐式对象)
 

保留字

and      or       not
div       mod
if          empty
ge        ne      eq     gt     lt  
true      false
null       instanceof
 
 

运算符

EL内置的运算符如果也不能满足你的需求,你还可以使用JSTL,JSTL也不能满足你,那你还可以使用自定义标签和自定义EL函数。
 
类型 运算符 备注
算术运算 +      -      *        /      % 注意除法是浮点数除法,7/5=1.2
逻辑运算 &&     ||      !  
关系运算 >     >=      <      <=     ==      != 可以对字符串使用,按照字典顺序排列比较
三元运算  ${ condition ? expA : expB } 例如  ${sessionScope.user==null? "你没有登录" : "你已经登录"}
空判断 empty object
如果object是null,则直接返回true。
否则接着判断对象是Map , List, 数租 ,String如果是空的(size=0),则返回true。
他是一个前缀运算符。
分界符 ( ) 控制运算符优先级
属性获取运算符 [ ] 或者 . 

用于获取对象的属性。 obj.pro 等价于 obj["pro"]。如果obj和pro之一为null,则返回null。

后者点运算符使用的更加普遍,但是如果属性pro不是合法的Java标识符,则必须使用[ ]来取属性。

 
 

EL中的对象和他们的属性

在LE中有2个运算符用来取对象属性: [ ] 和 .

一般情况下,后者使用的较多。但是如果属性包含非Java标志符,如 “-” ,则必须使用 [ ] 来取属性。
EL的对象主要是: JavaBean对象,java.util.Map , java.util.List , Java数字,Java字符串 和 EL隐式对象。属性运算符用来取他们的属性。

属性运算符可以连用: 如user.address.postCode      、   pageContext.request["method"]

JavaBean

要用EL取的JavaBean的属性,首先这个属性必须满足JavaBean的规范。我们可以将一个JavaBean对象存放在pageScope,requestScope,sessionScope或者applicationScope中,在用EL取JavaBean对象的属性时,不必指明JavaBean存储在什么Scope中,他会自动依次从 pageScope,requestScope,sessionScope, applicationScope中找,返回第一次找的值(因为内部使用的是PageContext对象的findAttribute方法)。但是为了让代码更加清晰,显式指定Scope也未尝不可。

package model;

public class User
{
private String name;
private int age;
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 ;
}
}
<%@ page contentType= "text/html; charset=UTF-8"   pageEncoding ="UTF-8" trimDirectiveWhitespaces= "true"
session ="true" %> <%@ page import= "model.*" %> <%-- 将对一个user存放到pageScope中,并初始化age属性为21 --%> < jsp:useBean id ="user" class= "model.User" scope = "page">
< jsp:setProperty name ="user" property= "age" value = "${param.age} " />
</ jsp:useBean> user的age属性值:${user.age} <br />
user的age属性值:${pageScope.user.age} <br />

java.util.Map
 
mapObj [key]
如果map或者key之一为null,就会返回null
如果map中不包含key这个键,则返回null
否则返回map中键对应的值

 
java.util.List  和 Java数组
 
arrObj[index]
如果 arrObj 和 index 之一为null,则返回null
如果index不能转换为int,则抛出异常。
index越界会返回null
否则返回列表或者数组对应索引处的元素值
 

EL中的隐式对象

 
pageScope page范围,是一个存储k-v属性的一个Map容器。
requestScope request范围,是一个存储k-v属性 的一个Map容器
sessionScope session范围,是一个存储k-v属性 的一个Map容器
applicationScope application 范围,是一个存储k-v属性 的一个Map容器
param

存储求参数Paramter的Map容器。等价于request.getParameter()。

用于取单值请求参数。如果用来获取多值参数,如checkbox 的值,则只返回第一个值。

paramValues
用于获取多值请求参数。返回所有值的String数组(例如checkbox的)。如果这个参数只有一个值,则返回一个只有1个元素的数组。
等价于request,.getParameterValues()
pageContext
也就是JSP中的隐式对象pageContext。pageContext  JSP页面的上下文对象。可以获取其他8大对象。
 
${pageContext.request.method}    获取当前请求方法。
 
${pageContext.session.id} 等价于 session.getId()
${pageContext.request.queryString} 取得请求的查询字符串
${pageContext.request.requestURL} 取得请求的URL 
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
 
initParam ServletContext对象的getInitParameter。在web.xml中配置的全局初始参数的一个Map容器
cookie 代表容纳当前请求的所有cookie对象的中的一个Map,每一个cookie 的名称name就是key.
header
包含所有请求头的一个Map。用于访问单值请求头。如果用来访问多值请求头,则值返回第一个值。
${header["accept-language"]}
${header.connection}
headerValues
用于获取多值请求头。返回多值标头的值的String数组。
如果这个头域只有一个值,则返回一个只有1个元素的数组。
 
 
 

EL函数和自定义EL函数

 
 
 

【JSP】EL表达式语言的更多相关文章

  1. JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session

    EL表达式语言 EL这是Expression Language.的目的是为了简化JSP句法.来看几个例子来清除. ${test} 它会被翻译成<%=test%> ${test.name} ...

  2. JSP的EL表达式语言

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html: JSP表达式语言(EL)可以方便地访问存储在JavaB ...

  3. 11 JSP/EL表达式/EL函数

    JSP      * 概述: JSP(Java Server Pages)与Java Servlet一样,是在服务器端执行的不同的是先由服务器编译部署成Servlet执行      * JSP的运行原 ...

  4. JSP EL表达式

    1 EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  5. Jsp,EL表达式的入门

    Jsp,EL表达式的入门 *Servlet/JSP 是两种动态的WEB资源的两种技术 使用Servlet生成HTML的页面是可以的 response.getWriter("<form ...

  6. jsp EL表达式 字符串的比较

    jsp EL表达式 字符串的比较 跟JavaScript一样,直接使用两个等于号即可:== 代码如下: <c:if test="${highLight == 'visa'}" ...

  7. JSP EL表达式 获得 request的GET/POST方法

    JSP EL表达式 获得 request的GET/POST方法: 不在requestScopse中: <p>得到request的方法</p> <p>pageCont ...

  8. JSP EL表达式 param、paramValues的使用

    JSP EL表达式 param.paramValues的使用: <%@ page language="java" import="java.util.*" ...

  9. JSP EL表达式使用

    JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMa ...

  10. JSP EL表达式忽略方法

    JSP EL表达式忽略方法: web.xml中,和jsp中:jsp中的等级要高一些: web.xml: <?xml version="1.0" encoding=" ...

随机推荐

  1. 利用neon技术对矩阵旋转进行加速(2)

    上次介绍的是顺时针旋转90度,最近用到了180度和270度,在这里记录一下. 1.利用neon技术将矩阵顺时针旋转180度: 顺时针旋转180度比顺时针旋转90度容易很多,如下图 A1 A2 A3 A ...

  2. Thinkphp5笔记七:设置错误页面①

    设置网站的错误提示页面,也是一个很重要的环节. 一.空操作 在当前控制器里面增加E_empty操作 public function _empty(){ $this->error('方法不存在') ...

  3. 【WP8】关于类库本地化问题

    WPToolkit中的ToggleSwitch开关控件是比较常用的控件,之前在做的的时候遇到一个问题,默认语言改为中文,手机系统语言也为中文,但是开关状态无法应用本地化的语言库,开关状态总是显示On/ ...

  4. 在ABBYY中如何修正倾斜的PDF页面

    作为一名文案工作者,每天都要跟各种PDF文件打交道,合同.报价单.协议书等等等,通常提供给客户的都是扫描之后的PDF文档,虽说都是机器扫描,但毕竟是人为放置的,难免位置放置不齐,导致扫描出来的文档出现 ...

  5. sublime text--你所不知道的12个秘密

    转自:http://blog.csdn.net/laokdidiao/article/details/51429404 package control安装: 第一种方法是在控制台中复制粘贴代码按回车, ...

  6. c++const关键字---15

    原创博文,转载请标明出处--周学伟 http://www.cnblogs.com/zxouxuewei/ const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以 ...

  7. java命令行操作

    一直使用eclipse操作java程序,但RMI程序需要命令行操作,故研究了下java的命令行操作. javac 用于编译.java文件,生成.class文件 假设文件夹dir下有pa.java和a. ...

  8. 胡思乱想 & 胡言乱语

    其大无外,其小无内,在数学上是不存在的,有无穷大,又有无限逼近于0而永远不等于0 现实中,人们对事物的认知局限于科学工艺的发展,往小的方面说,在没有显微镜之前,我们能看到的最小的东西莫过于尘埃,其后认 ...

  9. 【GIS】GDAL Python 影像裁剪

    # -*- coding: utf-8 -*- """ Created on Fri Nov 30 11:45:03 2018 @author: Administrato ...

  10. Kafka controller重设计

    本文主要参考社区0.11版本Controller的重设计方案,试图给大家梳理一下Kafka controller这个组件在设计上的一些重要思考.众所周知,Kafka中有个关键组件叫controller ...