一,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表达式保留关键字

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

转载于:https://www.cnblogs.com/Zender/p/7801330.html

Java Web学习总结(10)学习总结-EL表达式相关推荐

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

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

  2. 【JAVA】(实训1)EL表达式编码问题

    这一周在思途教育实训,再次巩固了之前学习过的javaMVC的知识,接触了不少新的知识,比如SSM/SSH框架.Spring.Bootstrap框架.JSTL等等.也暴露出了很多问题,谨以此记录下来以便 ...

  3. Java web 三大框架异常学习总结

    struts2.1.8+hibernate2.5.6+spring3.0(ssh2三大框架)常见异常原因和解决方案 http://www.cnblogs.com/lanxuezaipiao/p/361 ...

  4. java web孤傲苍狼,JavaWeb学习笔记

    我看的资料是孤傲苍狼的javaweb学习笔记,他写的真的很全,这或许就是社区力量吧!哪些问题不知道,上网搜一搜就有了,让自己不进步的敌人,只有懒惰了. 这是我接触JavaWeb的第二周,有一些自己的理 ...

  5. java web 自定义标签_JavaWeb学习——自定义标签

    自定义标签 一.自定义标签概述 使用标准JSP访问.操作JavaBean,是实现展现(HTML)与业务实现(Java代码)分离的第一步.然而,标准方法功能不够强大,以至于开发者无法仅仅使用它们开发应用 ...

  6. java web开发常见问题_JavaWeb学习笔记(五)--Web开发其他常见问题

    一.把web应用打成war包 使用JDK自带jar命令,进入到web应用里面,执行命令: jar -cvf 包名.war . # .表示当前目录所有的文件 直接用jar可查看帮助 执行完成后生成一个d ...

  7. Java学习_Day 10(学习内容:尚硅谷集合JAVA零基础P523-P533)

    P523 集合-使用Iterator遍历Collection package com.collection;import org.junit.Test;import java.util.ArrayLi ...

  8. java web事务控制_JavaWeb学习之事务

    一.事务(Transaction):其实是一组操作(包含许多个单一的逻辑).只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态(回滚) 例如:银行转账 A用户向B用户转账,这样的 ...

  9. Java Web整合开发(10) -- 资源国际化

    {0} 转载于:https://www.cnblogs.com/thlzhf/p/3941770.html

  10. java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库

    本文转自与博客园一杯凉茶的博客. 在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上 ...

最新文章

  1. 【恋爱通告】高清完整版迅雷下载! 首发
  2. 区域显示触发_Unity3D 在Hierarchy窗口中显示物体所属Layer
  3. 在js对象上绑定js数组原生方法
  4. 【字符比较】单字符比较值是否相等
  5. Android添加垂直滚动scrollview
  6. 0002-Add Two Numbers(两数相加)
  7. d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?
  8. 【转】WCF请求应答(Request-Reply)、单向操作(One-Way)、回调操作(Call Back)
  9. JavaScript本地存储实践(html5的localStorage和ie的userData)的实例页面
  10. (25)FPGA面试题5分频器
  11. linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),
  12. 快速计算属于你的数字
  13. 下一个主要AI平台是什么?苹果说:手机
  14. Integer.ParseInt()异常
  15. 词频统计(30 分)(map vector sort)
  16. Selenium实战应用——实现知到智慧树自动播放课程
  17. oracle写存储过程ssm中调用存储过程
  18. 批量下载全国县级行政区划geojson格式数据,将下载的geojson数据批量转为shapefile格式,在arcgis中可视化
  19. SoundPool循环播放
  20. 初中计算机 课题研究,初中信息技术的教研课题题目

热门文章

  1. 数据结构 排序 java_Java数据结构之排序---选择排序
  2. python缺失值类型与分析_3.1.1 缺失值分析
  3. java 观察者模式_重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」...
  4. java类加载及new对象的过程
  5. Maven学习(二)————Maven核心概念(一)
  6. html怎么无损插入背景音乐,HTML插入背景音乐方法【全】
  7. asp 可否压缩_怎样用ASP压缩文件
  8. kafka 创建topic_Kafka试题
  9. 中快捷搜索_同事用1分钟,我用半小时,原来是因为这8个Word快捷键,秒杀一切办公技巧...
  10. sql server management studio性能分析_如何分析一条SQL的性能