JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】(修订版)(一)

简介: 笔记

什么是EL表达式?


表达式语言(Expression Language,EL),EL表达式是用"${}"括起来的脚本,用来更方便的读取对象!

  • EL表达式主要用来读取数据,进行内容的显示!


为什么要使用EL表达式?


  • 为什么要使用EL表达式,我们先来看一下没有EL表达式是怎么样读取对象数据的吧
  • 在1.jsp中设置了Session属性
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
    <title>向session设置一个属性</title>
</head>
<body>
<%
    //向session设置一个属性
    session.setAttribute("name", "aaa");
    System.out.println("向session设置了一个属性");
%>
</body>
</html>
  • 在2.jsp中获取Session设置的属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<%
        String value = (String) session.getAttribute("name");
        out.write(value);
%>
</body>
</html>
  • 效果:

1.png

  • 上面看起来,也没有多复杂呀,那我们试试EL表达式的!
  • 在2.jsp中读取Session设置的属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
${name}
</body>
</html>
  • 只用了简简单单的几个字母就能输出Session设置的属性了!并且输出在浏览器上!

2.png

  • 使用EL表达式可以方便地读取对象中的属性、提交的参数、JavaBean、甚至集合

EL表达式的作用


  • 首先来看一下EL表达式的语法吧
${标识符}
  • EL表达式如果找不到相应的对象属性,返回的的空白字符串“”,而不是null,这是EL表达式最大的特点!


获取各类数据


获取域对象的数据

  • 上面在例子中,我们已经体验到了获取Session域对象的数据是多么地方便!其实EL表达式可以让我们获取各个域范围的数据
  • 在1.jsp中设置ServeltContext属性(也就是application)
<%
    //向ServletContext设置一个属性
    application.setAttribute("name", "aaa");
    System.out.println("向application设置了一个属性");
%>
  • 在2.jsp中获取application的属性
<%
    ${name}
%>
  • 和Session一样,也能获取得到!

3.png

  • 之前我们来讲ServletContext对象的时候讲过一个方法findAttribute(String name),EL表达式语句在执行的时候会调用该方法,用标识符作为关键字分别从page、request、session、application四个域中查找相应的对象。这也解释了为什么EL表达式可以仅仅通过标识符就能够获取到存进域对象的数据!
  • findAttribute()的查找顺序:从小到大,也就是page->request->session->application


获取JavaBean的属性


  • 以前在JSP页面获取JavaBean的数据是这样子的
  • 1.jsp页面Session存进一个Person对象,设置age的属性为22
<jsp:useBean id="person" class="domain.Person" scope="session"/>
<jsp:setProperty name="person" property="age" value="22"/>

在2.jsp中取出Session的属性

<%
    Person person = (Person) session.getAttribute("person");
    System.out.println(person.getAge());
%>
  • 效果如下

4.png

  • 现在我使用了EL表达式读取数据又会非常方便了
//等同于person.getAge()
${person.age}

5.png

  • 上面的代码 等同于调用对象的getter方法,内部是通过反射机制完成的


获取集合的数据


  • 集合操作在开发中被广泛地采用,在EL表达式中也很好地支持了集合的操作!可以非常方便地读取Collection和Map集合的内容
  • 为了更好地看出EL表达式的强大之处,我们也来对比一下使用EL表达式和不使用EL表达式的区别
  • 下面不使用EL表达式输出集合的元素
  • 在1.jsp页面中设置session的属性,session属性的值是List集合,List集合装载的又是Person对象
<%
    List<Person> list = new ArrayList();
    Person person1 = new Person();
    person1.setUsername("zhongfucheng");
    Person person2 = new Person();
    person2.setUsername("ouzicheng");
    list.add(person1);
    list.add(person2);
    session.setAttribute("list",list);
%>
  • 在2.jsp中获取到session的属性,并输出到页面上
<%
    List<Person> list = (List) session.getAttribute("list");
    out.write(list.get(0).getUsername()+"<br>");
    out.write(list.get(1).getUsername());
%>

使用EL表达式又是怎么样的效果呢?我们来看看

<%--取出list集合的第1个元素(下标从0开始),获取username属性--%>
${list[0].username}
<br>
<%--取出list集合的第2个元素,获取username属性--%>
${list[1].username}
  • 同样也可以有相同的效果:

6.png

  • 我们再来使用一下Map集合
  • 在1.jsp中session属性存储了Map集合,Map集合的关键字是字符串,值是Person对象
<%
    Map<String, Person> map = new HashMap<>();
    Person person1 = new Person();
    person1.setUsername("zhongfucheng1");
    Person person2 = new Person();
    person2.setUsername("ouzicheng1");
    map.put("aa",person1);
    map.put("bb",person2);
    session.setAttribute("map",map);
%>
  • 看起来好像取出数据的时候是会有点复杂,但是有了EL表达式也是非常轻松的
${map.aa.username}
<br>
${map.bb.username}
  • 效果:

7.png

  • 如果Map集合存储的关键字是一个数字,就不能使用"."号运算符了,如下所示

8.png

  • 对于这种情况,我们可以使用"[]"的形式读取Map集合的数据
${map["1"].username}
<br>
${map["2"].username}
  • EL表达式配合JSTL标签可以很方便的迭代集合,后面讲到JSTL标签的时候会用到!这里就不详细说明了。


EL运算符


  • EL表达式支持简单的运算符:加减乘除取摸,逻辑运算符empty运算符(判断是否为null),三目运算符

9.jpg10.png

  • empty运算符可以判断对象是否为null,用作于流程控制!
  • 三目运算符简化了if和else语句,简化代码书写
<%
    List<Person> list = null;
%>
${list==null?"list集合为空":"list集合不为空"}
  • 效果:

11.png

目录
相关文章
|
7月前
|
Java 应用服务中间件
jsp数据交互(一)
jsp数据交互(一)
|
7月前
|
存储 缓存 Java
JSP九大内置对象及基本使用
JSP九大内置对象及基本使用
153 0
|
3月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
4月前
|
安全 Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+jsp实现的健身房管理系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术实现的健身房管理系统。随着健康生活观念的普及,健身房成为日常锻炼的重要场所,高效管理会员信息、课程安排等变得尤为重要。该系统旨在通过简洁的操作界面帮助管理者轻松处理日常运营挑战。技术栈包括:JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Shiro、Spring Boot 2.0等。系统功能覆盖登录、会员管理(如会员列表、充值管理)、教练管理、课程管理、器材管理、物品遗失管理、商品管理及信息统计等多方面。
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
114 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
缓存 Java 应用服务中间件
JSP的内置对象 request和response
这篇文章详细介绍了JSP的内置对象,包括request、response、out、session和application对象的使用方法和特性,以及如何通过这些对象处理HTTP请求和响应、管理会话和输出数据。
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 6
**JSP JSTL 摘要:** JSTL是JSP的标签库,包含核心、格式化、SQL、XML和函数5类标签。它用于执行常见任务,如迭代、条件判断和XML操作。JSTL函数库提供字符串处理函数,如`contains()`, `endsWith()`, `escapeXml()`等,方便XML和HTML处理。通过`&lt;%@ taglib %&gt;`导入,如`fn:trim()`用于去除字符串两端空白。
44 5
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 8
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,允许使用数字、字符串及布尔值。示例展示如何获取HTTP头信息:`${header[&quot;user-agent&quot;]}`显示&quot;user-agent&quot;头信息。`header`单值,`headerValues`为数组。**
32 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 7
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,允许使用数字、字符串及布尔值。示例展示如何获取请求参数:`${param.order}`或`${param[&quot;order&quot;]}`代表`order`参数,`${param[&quot;username&quot;]}`用于获取`username`。`param`对象返回单个字符串,`paramValues`返回字符串数组。**
37 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 6
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,以及整数、浮点数等类型。隐含对象如pageScope、requestScope等代表不同作用域,便于访问请求参数、HTTP头信息和Cookie等。通过scope对象,如applicationScope,可直接在表达式中访问不同层次的变量,如`applicationScope.box`。**
36 0