Java Web----EL(表达式语言)详解
博文连接
表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web应用的新途径。下面对EL的语法、运算符及隐含对象进行详细介绍。
一、EL概述
1、EL简介
EL没出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入到JSP页面中,这会使页面开起来很乱,如下例子:
- <%if(session.getAttribute(“username”)!= null){
- out.println(session.getAttribute(“username”).toString());
- }%>
而是用EL则只需要下面的依据代码即可实现:
${username}
通过上面的例子我们可以知道,EL表达式的语法非常简单,它以”${”开头,以”}”结束,中间为合法的表达式,具体的语法格式为:
${expression}
expression用于指定要输出的内容,可以使字符串,也可以是由EL运算符组成的表达式。
例如在EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内:
${‘我叫小武灵灵’} 或${“我叫小武灵灵”}
EL有以下几个特点:
- EL可以与JSTL结合使用,也可以与JavaScript语句结合使用;
- EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值的和,可以直接通过”+”号进行连接,如${num1+num2};
- EL不仅可以访问一般变量,还可以访问JavaBean中的属性以及嵌套属性和集合对象;
- 在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他内置对象);
- 在使用EL进行除法运算时,如果除数为0,则返回无穷大Infinity,而不是错误;
- 在EL中可以访问JSP的作用域(request、session、application以及page);
- 扩展函数可以与Java类的静态方法进行映射。
2、与低版本的环境兼容——禁用EL
目前只要安装的Web服务器能够支持Servlet 2.4/JSP 2.0,就可以在JSP页面中直接使用EL。由于在JSP2.0以前版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。有以下三种方法:
1)、使用斜杠”\”
只需要在EL的起始标记“$”前加上”\”即可;
2)、使用page指令
使用JSP的page指令也可以禁用EL表达式,语法格式如下;
<%@ page isELIgnored=”布尔值”%> true为禁用EL
3)、在web.xml文件中配置<el-ignored>元素
- <jsp-config>
- <jsp-property-group>
- <url-pattern>*.jsp</url-pattern>
- <el-ignored>true</el-ignored>
- </jsp-property-group>
- </jsp-config>
3、保留的关键字
EL中保留的关键字如下,在为变量命名时,应该避免使用这些关键字:
and |
eq |
gt |
instanceof |
div |
or |
le |
false |
empty |
not |
Lt |
ge |
二、EL的运算符使用
EL的运算符在按照从左向右的计算原则下,优先级如下:
1、通过EL访问数据
通过EL提供的”[]”和”.”运算符可以访问数据。通常情况下这两个运算符是等价的,可以相互代替。
但也不是所有情况下都可以相互代替,例如当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用[]来访问对喜爱那个的属性。例如${userInfo[user-id]}是正确的,而${userInfo.user-name}是错误的。
下面给出通过这两运算符访问数据的例子:
1)、获取数组元素(只能使用[],不能用.)
- <%
- String[] str = {"一号" , "二号" , "三号" , "四号" , "五号"};
- request.setAttribute("user",str);
- %>
- <%
- String[] str1 =(String[])request.getAttribute("user");
- for(int i=0; i < str1.length; i++){
- request.setAttribute("rt",i);
- %>
- ${rt}: ${user[rt] }<br>
- <% }%>
2)、List集合元素的获取(只能使用[],不能用.)
- <%
- List<String> list = newArrayList<String>();
- list.add("一号");
- list.add("二号");
- list.add("三号");
- session.setAttribute("user",list);
- %>
- <%
- List<String> list1 =(List<String>)session.getAttribute("user");
- for(int i = 0 ; i < list1.size() ;i++){
- request.setAttribute("rt",i);
- %>
- ${rt}: ${user[rt] }<br>
- <% }%>
2、在EL中进行算术运算
运算符 |
功能 |
示例 |
结果 |
+ |
加 |
${1+1} |
2 |
- |
减 |
${1-1} |
0 |
* |
乘 |
${2*2} |
4 |
/或div |
除 |
${2/1}或${2 div 1} |
2 |
${2/0}或${2 div 0} |
Infinity |
||
%或 mod |
求余 |
${3%2}或${3mod2} |
1 |
${3%0}或${3 mod0} |
异常:java.lang.ArithmeticException:/by zero |
3、在EL中判断对象是否为空
通过empty运算符实现,用来确定一个对象或比那辆是否为null或空,格式如下:
${empty expression}
例如:
- <%request.setAttribute("user" , "");%>
- <%request.setAttribute("user1" , null);%>
- <%request.setAttribute("user2" , 2);%>
- ${emptyuser} //返回值为true
- ${emptyuser1} //返回值为true
- ${emptyuser2} //返回值为false
4、在EL中进行逻辑关系运算
在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。其使用方法都差不多,下面给出一个例子:
- <%
- request.setAttribute("userName","小武");
- request.setAttribute("pwd","123456");
- %>
- userName= ${userName }<br>
- pwd= ${pwd }<br>
- \${userName!= "" and (pwd == "asd" )}
- ${userName!= "" and (pwd == "asd" )}<br>
- \${userName== "小武" and pwd == "123456" }
- ${userName== "小武" and pwd == "123456" }<br>
5、在EL中进行条件运算
在EL中进行条件运算,唯一的优点在于其非常简单方便,和Java语言中的用法完全一致,其语法格式如下:
${条件表达式? 表达式1 : 表达式2}
例如:${1==1 ? “对”: “错“}
三、EL的隐含对象
为了能够获得Web应用程序中的相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作。
1、页面上下文对象
pageContext用于访问JSP内置对象和servletContext。在获取到这些内置对象后,就可以获取器属性值。这些属性与对象的gexxx()方法相对象,在使用时,去掉方法名中的get,并将首字母改为小写即可。下面介绍如何应用页面上下文对象访问你JSP的内置对象和servletContext对象。
1)、访问request对象——${pageContext.request}
获取到request对象后,就可以通过该对象获取与客户端相关的信息。例如要访问getServerPort()方法,可以使用下面的代码:
${pageContext.request.serverPort}
注意不可以通过pageContext对象获取保存到request范围内的变量。
2)、访问response对象——${pageContext.response}
3)、访问out对象——${pageContext.out}
4)、访问session对象——${pageContext.session}
5)、访问exception对象——${pageContext.exception}
6)、访问page对象——${pageContext.page}
7)、访问servletContext对象——${pageContext.servletContext}
2、访问作用域范围的隐含对象
在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对喜爱那个指定要查找的标识符的作用域后,系统将不再按照默认的顺序(page、request、session及application)来查找相应的标识符。他们与JSP中的page、request、session及application内置对象类似。只不过这4个隐含对象只能用来取得指定范围内的属性值,而不能取得其他相关信息。
1)、pageScope隐含对象
pageScope对象用于返回包含page(页面)范围内的属性的集合,返回值为java.util.Map对象。下面是一个具体例子,通过pageScope对象读取page范围内的JavaBean属性值。
新建JavaBean为UserInfo:
- package com;
- public class UserInfo {
- private String name ="";
- public void setName(Stringname) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
Index.jsp添加:
- <body>
- <jsp:useBeanidjsp:useBeanid="user" scope="page" class="com.UserInfo"type="com.UserInfo"></jsp:useBean>
- <jsp:setPropertypropertyjsp:setPropertyproperty="name" name="user" value="小武灵灵" />
- ${pageScope.user.name}
- </body>
2)、requestScope隐含对象
用于返回包含request范围内的属性值的集合,返回值为java.util.Map对象。例如:
- <%
- request.setAttribute("userName","小武灵灵");
- %>
- ${requestScope.userName }
3)、sessionScope隐含对象
用于返回包含session范围内的属性值的集合。例如:
- <%
- session.setAttribute("userName","小武灵灵");
- %>applicationapplication
- ${sessionScope.userName }
4)、applicationScope隐含对象
用于返回包含application范围内的属性值的集合。例如:、
- <%
- application.setAttribute("userName","小武灵灵");
- >
- {applicationScope.userName }
3、访问环境信息的隐含对象
EL中提供了6个访问环境信息的隐含对象,分别为:
1)、param对象
用于获取请求参数的值,应用在参数值只有一个的情况,返回结果为字符串。例如:
- <formactionformaction="" method="get" name="form1" >
- <input name="user" type="text"value="小武灵灵">
- <input type="submit">
- </form>
- ${param.user}
2)、paramValues对象
如果一个请求参数名对应多个值,则需要使用paramValues对象获取请求参数的值,该对象返回的结果为数组。例如:
- <formactionformaction="" method="get" name="form1" >
- <input type="checkbox"name="affect" id="affect" value="1">
- <input type="checkbox"name="affect" id="affect" value="2">
- <input type="checkbox"name="affect" id="affect" value="3">
- <input type="checkbox"name="affect" id="affect" value="4">
- <input type="submit">
- </form>
- <%request.setCharacterEncoding("GB18030"); %>
- 选择的是:${paramValues.affect[0]}${paramValues.affect[1]}${paramValues.affect[2]}${paramValues.affect[3]}
3)、header和headerValues对象
用于获取HTTP请求的一个具体的header值,当同一个header存在多个值时需使用headerValues对象。例如:
${header[“connection”]}获取HTTP请求的header的是否需要持久连接这一属性
4)、initParam对象
用于获取Web应用初始化参数的值。例如:
在web.xml文件中设置一个初始化参数user:
<context-param>
<param-name>user</param-name>
<param-value>小武</param-value>
</context-param>
使用EL获取该参数:
${initParam.user}
5)、cookie对象
用于访问由请求设置的cookie。例如:
- <%
- Cookie cookie = new Cookie("user", "xiaowu");
- response.addCookie(cookie);
- %>
- ${cookie.user.value }
四、定义和使用EL函数
EL允许定义和使用函数,但是eclipse好像不能自动生成tld文件,我嫌麻烦,而且EL函数不常用,所以这里不介绍了。
Java Web----EL(表达式语言)详解相关推荐
- JSP 中EL表达式用法详解
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- Spring EL表达式使用详解
Spring EL表达式使用详解 什么是Spring EL表达式 注入字面值 注入操作系统(OS)的属性 注入properties配置文件中数据 Bean属性调用 Bean方法调用 T运算符 构造器 ...
- java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...
Java Web -- Servlet(13)HttpServletRequest详解(获取请求数据.请求分派.请求域)(2) HttpServletRequest ----------------- ...
- java 解析el表达式_Javaweb El表达式实例详解
EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来消除jsp页面中的java脚本. el表达式的语法 expr ...
- EL表达式 (详解)
表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集 ...
- 【转】EL表达式 (详解) .
EL表达式 1.EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号, ...
- Java Web - EL表达式和JSTL标签库
在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在reque ...
- java Web监听器导图详解
监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...
- java web文件上传详解_java web图片上传和文件上传实例详解
java web图片上传和文件上传 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定 ...
最新文章
- 修改已经打开的对话框的浏览路径
- Linux常用命令——tar
- c++输出数据的二进制表示形式
- qq分享提示设备未授权_QQ帐号已经可以注销了,过去几天,第一批尝试的人已经放弃了!...
- Redis内存使用优化与存储
- Linux AV1硬件视频解码将支持Intel Tiger Lake
- Mqtt协议IOS端移植3
- 强化学习:2 马尔科夫决策过程
- Envoy 源码分析--network L4 filter manager
- 在没有 IIS 的条件下运行 ASMX(WebService)
- STM32库中自定义的数据类型
- iPhone 和 华为手机 :手机端酷狗音乐提示 “导入歌曲不支持此操作” ----曲线解决导入问题
- C++奥赛第四弹——阿克曼函数
- matlab 简单函数拟合(全)
- 微信小程序input组件里,自动聚焦focus没反应
- 百度地图只显示指定的行政区域地图
- 《饥饿游戏》第三章-26
- 网络工程师枕边书:精选30本图书抢先读
- 银行ATM登录管理系统(最简版)
- 华为hcie中QOS 流量整形 双速率的概念-ielab实验室
热门文章
- Android封闭系统,最封闭的Android系统—魅族Flyme
- AI新时代拐点:人工智能当红炸子鸡Chatgpt
- 小程序 子组件传值(triggerEvent)
- Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作
- 计算机网络概念——软考
- 圆角装饰条_陕西小圆角铝合金线条厂商 贴心服务「成都鑫悦装饰材料供应」...
- 前端学习笔记:HTML狂神说笔记
- [CTF]HGAME2021 WP
- android alertdialog listview,Android_基础_AlertDialog
- 为何安全专家都厌恶 SOA