一,EL 表达式概述(EL主要从域中取数据)

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。

二,EL从域中取出数据(EL最重要的作用)

jsp脚本:

<%=request.getAttribute(name)%>

EL表达式替代上面的脚本:

${requestScope.name}

EL最主要的作用是获得四大域中的数据

格式:${ EL表达式 }

EL获得pageContext域中的值

${pageScope.key};

EL获得request域中的值

${requestScope.key};

EL获得session域中的值

${sessionScope.key};

EL获得application域中的值

${applicationScope.key};

EL从四个域中获得某个值:${key};

EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回"" (注意,不是null,而是空字符串)。

例如:

User实体类:

public class User {
private int id;
private String name;
private String pwd;
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

Index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.zender.*,java.util.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 模拟域中的数据 -->
<%
//存储字符串
request.setAttribute("name","Zender");
//存储一个对象
User user = new User(1, "Zender", "123");
session.setAttribute("user", user);
//存储一个集合
User user1 = new User(1, "Zender", "123");
User user2 = new User(2, "Zender2", "1234");
User user3 = new User(3, "Zender3", "1235");
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
application.setAttribute("list", list);
%> 通过脚本获取域中的数据:<br/>
<!-- 通过脚本获取域中的数据 -->
<%=request.getAttribute("name") %>
<%
User sessionUser = (User)session.getAttribute("user");
out.write(sessionUser.getName());
%>
<hr/> 通过EL表达式获取域中的数据:<br/>
<!-- 通过EL表达式获取域中的数据 -->
${requestScope.name}
${sessionScope.user.name}
${applicationScope.list[1].name}
<hr/> 通过EL表达式,全域查找,获取域中的数据 :<br/>
<!-- 通过EL表达式,全域查找,获取域中的数据 -->
${name}
${user.name}
${list[2].name}
<hr/>
</body>
</html>

访问index.jsp结果如下:

三,EL表达式执行运算

语法:${运算表达式},EL表达式支持如下运算符:

1、关系运算符

2、逻辑运算符

3、empty运算符:检查对象是否为null(空)

4、二元表达式:${user!=null?user.name :""}

5、[ ] 和 . 号运算符

例如:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="com.zender.*,java.util.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
el表达式进行四则运算:<br/>
加法运算:${100+100}<br/>
减法运算:${100-100}<br/>
乘法运算:${100*100}<br/>
除法运算:${100/100}<hr/> el表达式进行关系运算:<br/>
<%--${user == null}和 ${user eq null}两种写法等价--%>
${user == null}<br/>
${user eq null}<hr/> el表达式使用empty运算符检查对象是否为null(空):<br/>
<%--使用empty运算符检查对象是否为null(空) --%>
<%
List<String> list = new ArrayList<String>();
list.add("Zender");
list.add("Zender2");
request.setAttribute("list",list);
%>
<c:if test="${!empty(list)}">
<c:forEach var="str" items="${list}">
${str}<br/>
</c:forEach>
</c:if>
<hr/> EL表达式中使用二元表达式:<br/>
<%
session.setAttribute("user1",new User(1,"Zender","123"));
%>
${user1 == null ? "对不起,您没有登陆 " : user1.name}
</body>
</html>

运行结果如下:

四,EL的内置11个对象

pageScope,requestScope,sessionScope,applicationScope

用于获取JSP中域中的数据

param,paramValues

用于接收参数,相当于request.getParameter(),rquest.getParameterValues()

header,headerValues

用于获取请求头信息,相当于request.getHeader(name),request.getHeaders()

initParam

用于获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)

cookie

用于WEB开发中的cookie,相当于request.getCookies()--->cookie.getName()--->cookie.getValue()

pageContext

用于WEB开发中的pageContext

注意:

  测试header和headerValues时,如果头里面有"-" ,例Char-Encoding,则需要header["Char-Encoding"]、headerValues["Char-Encoding"]

  测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,必须${cookie.key.name}或者${cookie.key.value}

五,EL表达式保留关键字

所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。

Java Web学习总结(10)学习总结-EL表达式的更多相关文章

  1. javaweb学习总结(二十九)——EL表达式

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

  2. [转]javaweb学习总结(二十九)——EL表达式

    原文地址:https://www.cnblogs.com/xdp-gacl/p/3938361.html 一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获 ...

  3. java web 整合开发王者归来学习总结

    第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...

  4. java web (j2ee)学习路线 —— 将青春交给命运

    RESON TO DO JAVA WEB:1.JAVA WEB(企业级)  2.Android和iOS过于火爆并且不兼容 一.JAVA WEB开发需要的知识储备 1.      基本的网页设计语言:H ...

  5. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  6. JavaWeb学习总结(十七)EL表达式

    语法格式: ${expression} 1. 表达式支持算术运算符合逻辑运算符 <%@ page language="java" contentType="text ...

  7. JavaWeb学习笔记(八)—— EL表达式

    一.EL表达式概述 在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的做法会使JSP页面混乱,难以维护.为此,在JSP2.0规范中提供了EL表达式.EL全名 ...

  8. web.xml中JSP配置及 EL表达式

    web.xml 中JSP配置.servlet配置 及 EL表达式 [摘要] servlet 基本配置 <servlet> <servlet-name>LoginServlet& ...

  9. Java Web 深入分析(10) Spring 实践

    Spring helloworld [http://wiki.jikexueyuan.com/project/spring/hello-world-example.html] HelloWorld.j ...

  10. java web学习总结(三十一) -------------------EL表达式

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

随机推荐

  1. Docker 里面新建mysql 容器

    1.获取MySQL镜像, a.直接从docker hub 下载docker镜像 docker pull +镜像名称 b.从别的项目上把镜像export出来 dockr load  i + 镜像的TAR ...

  2. Linux_Bash脚本基础

    目录 目录 Bash使用基础 if 语句 运算符 逻辑表达式 不将执行指令的结果显示出来 echo 语句 从Bash接受输入参数 Case语句 循环 for 语句 While语句 内置变量和函数 AW ...

  3. jmeter之线程组循环次数

    有时候压测需要配置并发的持续时间,这个可以在jmeter中线程组页面进行配置 1.jmeter的循环次数2种使用场景 2.持续时间功能介绍 3.持续时间的使用场景 1.jmeter的循环次数2种使用模 ...

  4. websocket初体验

    (function (window) { var wsUri = "ws://echo.websocket.org:9150"; var output; MyWebSocket = ...

  5. bash 特殊符号的含义

    bash常见特殊符号及含义 linux中shell变量的含义解释

  6. Python分布式爬虫必学框架Scrapy打造搜索引擎 学习教程

    Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 1.创建搜索自动补全字段suggest自动补全需要用 ...

  7. 在LIPS表追加拣配数量PIKMG字段(转)

    原文地址:https://blog.csdn.net/zhongguomao/article/details/43451127 最近比较忙,此方案出后测试了很多种情况都存在问题,只能留待以后处理了.. ...

  8. PHP_CodeIgniter 细节

    下载压缩包解压之后, 可以在 application/config/config.php 中修改配置信息,包括编码,目录地址 web目录默认是system,后台目录默认是Application, 可以 ...

  9. CentOS 安装开发工具包

    这里使用组安装包,一次性安装所有开发者工具. 1.查看有那些组安装包可用. [root@bogon ~]# yum grouplist | more 2.搜索一下有哪些和 Development 有关 ...

  10. 12、numpy——数学函数

    NumPy 数学函数 NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 1.三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). i ...