全网最全的JavaWeb---EL表达式 没有之一!!!

简介: EL表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。

1.EL工具包介绍


  • 由Java技术开发一个jar包
  • 作用是降低JSP文件开发时Java命令开发强度
  • Tomcat服务器本身自带了一个EL工具包(Tomcat安装地址/lib/el-api.jar)


2.JSP文件作用


代替响应体对象将Servlet中doGet,doPost的执行结果写入到响应体


3.JSP文件中主要开发步骤


将作用域存放的处理结果读取出来并写入到响应体

<%
    Strint value = (String)(request.getSAttribute("key1"));
%>
复制代码

第一步:从指定的作用域对象读取该处理结果

第二步:将得到的数据进行类型强转

第二步:将转换后的数据写入到响应体


3. EL表达式介绍


1.命令格式(此时不是引用对象属性):

${作用域对象别名.共享数据}

2.命令作用:

  • EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】
  • EL表达式在JSP文件上使用
  • 负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体


4.JSP文件可以使用的作用域丢对象


注意:JSP有四个作用域对象,Servlet有三个作用域对象

微信截图_20220607195813.png

5.EL表达式提供作用域对象别名

微信截图_20220607195821.png

6.EL表达式将引用对象属性写入到响应体


  1. 命令格式:

${作用域对象别名.共享数据名.属性名}

  1. 例如:${applicationScope.key1.sname}
  2. 命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值。
    并自动将属性值的结果写入到响应体。
  3. 属性名:一定要与引用类型属性名完全一致,包括大小写。
    不论这个属性是私有的还是公有的都可以直接调用
    因为EL表达式使用的是反射机制,通过反射机制来
    得到当前类中的属性。

EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出


7.EL表达式简化版


  1. 简化版命令格式:

${共享数据名}

  1. 命令作用:EL表达式允许开发人员时省略作用域对象别名
  2. 工作原理:EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法。
    微信截图_20220607195918.png
  3. 存在隐患
  • 容易降低程序执行速度【南辕北辙】(因为得挨个作用域进行寻找)
  • 容易导致定位错误
  1. 应用场景
    设计目的,就是简化从pageContext读取共享数据并输出难度
  2. EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版。早点下班回家。


8.EL表达式-------支持运算表达式


前提:在JSP文件中有时需要将读取的共享数据进行一番运算后,将运算结果写入到响应体。

  1. 运算表达式:

微信截图_20220607200135.png

  1. 关系运算:微信截图_20220607200144.png

在运算的时候,可以写 > 也可以写 gt 效果是一样的

微信截图_20220607200252.png

  1. 逻辑运算:&& || !


9.EL表达式提供内置对象


第一个内置对象 param


  1. 命令格式:${param.请求参数名}
  2. 命令作用:从通过请求对象读取当前请求包中请求参数内容并将请求参数内容写入到响应体
  3. 代替命令:
    假设此时有一个文件叫做 index.jsp
    发送请求:Http://localhost:8080/myweb/index.jsp?userName=mike&password=123
    此时需要将请求包中的请求参数写入响应体中
<%
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
%>
<%=userName%>
<%=password%>
复制代码

微信截图_20220607200446.png

输出的结果: 微信截图_20220607200455.png

第二个内置对象 paramValues


  1. 命令格式:${paramValues.请求参数名[下标]}
  2. 命令作用:如果浏览器发送的请求参数是一个请求参数关联多个值
    此时可以通过paramValues读取请求参数下指定位置的值
    并写入到响应体。
  3. 代替命令:
    假设此时有一个文件叫做 index_1.jsp
    发送请求:Http://localhost:8080/myweb/index_1.jsp?pageNo=1&pageNo=2&pageNo=3
    注意以上这个请求中只有一个请求参数,就是pageOn,并不是三个
    此时pageNo请求参数在请求包中的存在形式
    pageNo:[1,2,3]
<%
    String array[] = request.getParamterValues("pageNo");
%>
<!--以前的写法-->
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
复制代码

微信截图_20220607200602.png 输出的结果: 微信截图_20220607200611.png

10.EL表达式常见异常


以下程序报错的原因:Student中的全局变量为 sname,而在index_1.jsp写成了name导致在index_1.jsp中找不到 name 这个属性,此时会发生对象中没有找到指定属性错误

微信截图_20220607200624.png微信截图_20220607200637.png

javax.el.PropertyNotFoundException : 在对象中没有找到指定属性



相关文章
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows Server 2008 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows Server 2008 操作系统保姆级教程(附链接)
物联网:“定向卡”与“通用卡”的区别
在讨论“定向卡”与“通用卡”的区别时,我们首先要明确这两种卡通常是在不同背景下被提及的,比如在营销、金融服务、会员卡系统等领域。不过,为了提供一个通用的、跨领域的理解,我们可以从以下几个维度来探讨它们的区别:
|
缓存 监控 Java
java动态代理
本文介绍了Java中的动态代理及其优势,通过增强原有方法或拦截调用实现无侵入式代码扩展,如添加日志、缓存等。文章先讲解了静态代理的基本概念和实现方式,随后引出动态代理解决静态代理在多方法、多类场景下的局限性。通过JDK提供的InvocationHandler接口和Proxy类,展示了如何动态生成代理对象。最后,文章还探讨了代理Hook技术,包括寻找Hook点、选择代理方式以及替换原始对象的具体步骤。
371 0
|
存储 Java
【潜意识Java】期末考试可能考的选择题(附带答案解析)
本文整理了 Java 期末考试中常见的选择题,涵盖数据类型、控制结构、面向对象编程、集合框架、异常处理、方法、流程控制和字符串等知识点。每道题目附有详细解析,帮助考生巩固基础,加深理解。通过这些练习,考生可以更好地准备考试,掌握 Java 的核心概念和语法。
925 1
|
Java Spring
ApplicationContextAware 的理解和应用
ApplicationContextAware 的理解和应用
385 2
|
消息中间件 开发框架 关系型数据库
02常见消息中间件对比
02常见消息中间件对比
332 0
Python控制流:条件语句(if, elif, else)
本文详细介绍了Python条件语句的使用方法,包括if、elif和else,以及条件表达式和多条件判断。通过一个综合详细的例子,我们展示了条件语句在实际编程中的应用。希望本文对您理解和应用Python条件语句有所帮助。
|
SQL 存储 数据库
关系数据库:关系运算
关系数据库:关系运算
1425 5
关系数据库:关系运算