一、EL简介

EL全名为Expression Language,它主要用于替换JSP页面中的脚本表达式<%= %>,从各种类型的Web域中检索Java对象、获取数据。它可以很方便地访问JavaBean属性,访问数组,访问List集合和Map集合等。

EL表达式借鉴了JavaScript多类型转换无关性的特点,在使用EL从scope中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。Web服务器对于request域中的属性是以Object类型来存储的,在得到该属性时使用的Java语言脚本就应该是(Object)request.getAttribute("xxx"),它对于实际应用还必须进行强制类型转换。而EL就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用EL表达式取得的值,而不用关心它是什么类型的。

【注意】EL表达式是JSP2.0规范中的一门技术,所以,要想正确解析EL表达式,需要使用支持Servlet2.4/JSP2.0技术的WEB服务器。Tomcat6以上的服务器都可以解析EL表达式。

二、EL表达式的使用

1、语法结构

        ${expression}

2、[]与.运算符

EL 提供.和[]两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。

例如:${user.My-Name}应当改为${user["My-Name"] }

如果要动态取值时,就可以用[]来做,而.无法做到动态取值。

例如:${sessionScope.user[data]}中data 是一个变量

3、变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。

属性范围在EL中的名称

Page  --------->PageScope

Request --------->RequestScope

Session  --------->SessionScope

Application  --------->ApplicationScope

4、总结

(1)EL表达式用${}表示,可用在所有的HTML和JSP标签中,作用是代替JSP页面中复杂的JAVA代码。

(2)EL表达式可操作常量、变量和隐式对象。 最常用的隐式对象有${param}和${paramValues}。 

${param}表示返回请求参数中单个字符串的值,${paramValues}表示返回请求参数的一组值。pageScope表示页面范围的变量。requestScope表示请求对象的变量。 sessionScope表示会话。

范围内的变量。applicationScope表示应用范围的变量。

(3)<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止。FALSE表示不禁止。JSP2.0中默认的启用EL语言。

(4)EL语言可显示逻辑表达式如${true and false}结果是false,关系表达式如${5>6}结果是false,算术表达式如 ${5+5}结果是10。

(5)EL中的变量搜索范围是:page request session application。点运算符(.)和"[ ]"都是表示获取变量的值。区别是[ ]可以显示非词类的变量。









三、EL的隐含对象

1、与范围有关的隐含对象

与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope;它们基本上就和JSP的pageContext、request、session和application一样;在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

例如:我们要取得session中储存一个属性username的值,可以利用下列方法:

      session.getAttribute("username") 取得username的值,

在EL中则使用下列方法:

      ${sessionScope.username}

2、与输入有关的隐含对象

与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

例如我们要取得用户的请求参数时,可以利用下列方法:

      request.getParameter(String name)

      request.getParameterValues(String name)

在EL中则可以使用param和paramValues两者来取得数据。

      ${param.name}

      ${paramValues.name}





3.其他隐含对象

(1)cookie

 例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}     来取得它。

(2)header和headerValues

header储存用户浏览器和服务端用来沟通的数据

例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。

另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

(3)initParam

initParam取得设定web站点的环境参数(Context)

例:一般的方法String userid = (String)application.getInitParameter("userid");

可以使用 ${initParam.userid}来取得名称为userid的配置参数值

(4)pageContext

pageContext取得其他有关用户要求或页面的详细信息。

      ${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}   取得主机端的服务信息

四、条件标签

1.算术运算符有五个:+、-、*或$、/或div、%或mod

2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

3.逻辑运算符有三个:&&或and、||或or、!或not

4.其它运算符有三个:Empty运算符、条件运算符、()运算符

      例:${empty param.name}、${A?B:C}、${A*(B+C)}

五、EL函数(functions)

语法:ns:function( arg1, arg2, arg3 …. argN)

其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置

六、补充:

如果EL表达式无法解析:– <%@ page isELIgnored="false" %>

EL主要作用:

•获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

•执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

•获取web开发常用对象

EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

javaweb开发之EL表达式的更多相关文章

  1. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  2. JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

    JSTL  JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用:   提供给Java Web开发者一个标准通用的标签函数库   和E ...

  3. JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

    Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...

  4. JavaWeb(七):EL表达式、自定义标签和JSTL

    一.EL表达式 语法 el.jsp <%@page import="java.util.Date"%> <%@page import="com.atgu ...

  5. Javaweb学习笔记——EL表达式

    一.前言 EL表达式是什么? 简而言之,可以这样理解,EL表达式全名为:Exprexxsion Language,原先是JSTL 1.0为了方便存取数据而定义的语言,到了JSTL 2.0便正式成为标准 ...

  6. JavaWeb总结(八)—EL表达式

    一.EL表达式简介 EL全名Expression Language.主要有以下作用. 1.获取数据 EL表达式主要用于替换JSP页面的脚本表达式,以及各种类型的Web域中检索Java对象.获取数据.( ...

  7. JavaWeb开发之Servlet

    1. Servlet有关概念和前置知识 1.1 什么是动态网页 如果浏览器在不同时刻或不同条件下访问web服务器上的某个页面,浏览器所获得的页面内容可以发生变化,那么这个页面就称之为动态页面. 动态网 ...

  8. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)

    HttpServletResponse简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 request和re ...

  9. javaweb开发之jsp

    一.WEB应用的目录结构 通常我们是在IDE中创建web应用程序,IDE自动为我们实现了WEB的目录结构,下面来看如何徒手创建一个WEB程序. 首先来看一下Tomcat自带的一个web应用的目录结构 ...

随机推荐

  1. 【CF1017A】The Rank(签到)

    题意:给定n个人的4门课成绩,排名按总分,保证总分互不相同,求1号名次 n<=1e3,a[i],b[i],c[i],d[i]<=1e2 思路: #include<cstdio> ...

  2. h5页与ios通信

    直接上代码 1 粘第一段 //ios function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBri ...

  3. git超详细教程【转】

    转自:http://blog.csdn.net/liuwengai/article/details/52072344 GitHub操作总结 : 总结看不明白就看下面的详细讲解.   GitHub操作流 ...

  4. 37深入理解C指针之---结构体与指针

    一.结构体与指针 1.结构体的高级初始化.结构体的销毁.结构体池的应用 2.特征: 1).为了避免含有指针成员的结构体指针的初始化复杂操作,将所有初始化动作使用函数封装: 2).封装函数主要实现内存的 ...

  5. Day 19 函数之闭包、装饰器

    一.什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 二.装饰器遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰 ...

  6. FZU 2122 又见LKity【字符串/正难则反/KMP/把一个字符串中某个部分替换为另一个部分】

    嗨!大家好,在TempleRun中大家都认识我了吧.我是又笨又穷的猫猫LKity.很高兴这次又与各位FZU的ACMer见面了.最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压 ...

  7. 51NOD 1833 环

    考虑一下简单环覆盖这个图的意义,其实就是找出原序列的所有排列,满足所有<i,a[i]>都是原图中的一条有向边. 因为一个置换就是由很多简单环构成的. 于是我们可以设 f[i][S] 为考虑 ...

  8. codeforces 997E(线段树)

    分析: 首先考虑如何计算整个数组有多少个good区间 容易发现一个区间是good区间当且仅当max-min-len=-1,且任意区间max-min-len>=-1 我们可以枚举右端点,然后维护前 ...

  9. 前端必备性能知识 - http2.0

    前端开发中,性能是一定绕不开的,今天就来说一下前后台通信中最重要的一个通道--HTTP2.0 最开始的通讯协议叫http1.0,作为始祖级的它,定义了最基本的数据结构,请求头和请求体,以及每一个字段的 ...

  10. ios 使用 resignFirstResponder 无法hide键盘

    - (BOOL)disablesAutomaticKeyboardDismissal {    return NO;}