20210411—JavaWeb—023.EL技术

学习记录23

一、EL表达式

1、命令格式:

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

2、命令作用:

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

3、举例

(共享数据已经由Servlet传输到作用域对象中)

  • 传统方式
<%
    Integer sid = (Integer) application.getAttribute("sid");
    String sname = (String) session.getAttribute("sname");
    String home = (String)request.getAttribute("home");
%>

Student's ID: <%=sid%><br/>
Student's name: <%=sname%><br/>
Student's address: <%=home%>
  • EL表达式
Student's ID: ${applicationScope.sid}<br/>
Student's name: ${sessionScope.sname}<br/>
Student's address: ${requestScope.home}

二、EL表达式所用作用域对象的别名

1、JSP文件可以使用的作用域对象

  • ServletContext application: 全局作用域对象
  • HttpSession session: 会话作用域对象
  • HttpServletRequest request: 请求作用域对象
  • PageContext pageContext当前页作用域对象,这是JSP文件独有的作用域对象
    Servlet中不存在

在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或则其他JSP文件
真实开发过程,主要用于JSTL标签与JSP文件之间数据共享(实际开发不存在)
                               (数据)
			    JSTL------->pageContext---->JSP
<%
    pageContext.setAttribute("Sex", "Male");
%>
Sex: ${pageScope.Sex}   <!--pageScope后面的键名需要开发人员自己写出来,较麻烦-->

2、EL表达式提供作用域对象别名
**

JSPEL表达式
application${applicationScope.共享数据名}
session${sessionScope.共享数据名}
request${requestScope.共享数据名}
pageContext${pageScope.共享数据名}

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

1、命令格式

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

2、命令作用

  • 从作用域对象读取指定共享数据关联的引用对象的属性值
  • 并自动将属性的结果写入到响应体

3、属性名

  • 一定要去引用类型属性名完全一致(大小写)

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

四、EL表达式简化版

1、命令格式:
${共享数据名}

2、命令作用:
EL表达式允许开发人员开发时省略作用域对象别名

3、工作原理:
EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法

  • 首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【application】没有定位成功,返回null
  • 优先级顺序:pageContext—>request—>session—>application

4、存在隐患:容易降低执行速度、容易数据定位错误

5、应用场景:简化从pageContext读取共享数据的难度,因为pageContext优先级最高

6、EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版

五、EL支持的运算表达式

1、传统方法:在JSP文件中,读取共享数据进行运算之后,将结果写入到响应体<%=%>

2、运算表达式

  • 数学运算:+ - * /
  • 关系运算:>(gt) >=(ge) ==(eq) <(lt) <=(le) !=(!=)
  • 逻辑运算:&& || !

六、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%>

对象二:paramValues

1、命令格式:
${paramValues.请求参数名[下标]}

2、命令作用:
如果浏览器发送的请求参数是【一个请求参数关联多个值】
此时可以通过paramVaues读取请求参数下【指定位置】的值,并写入到响应体

3、代替命令:
http://localhost:8080/myWeb/index_2.jsp?pageNo=1&pageNo=2&pageNo=3
此时,pageNO请求参数再请求包以数组形式存在:pageNo:[1, 2, 3]

<%
	String  array[]= request.getParameterValues("pageNo");
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>

七、EL表达式常见异常:

  • javax.el.PropertyNotFoundException:在对象中没有找到指定属性
  • 原因分析:
    EL表达式在读取对象中属性时,通过【反射机制】调用当前属性对应的get方法得到属性的值
    如果当前属性没有声明对应get方法,此时EL表达式认为当前类文件没有这个属性

八、EL的禁用

1、在当前JSP文件中禁用
<%@ page isELIgnored="true" %>
表示是否禁用EL语言:TRUE表示禁止;FALSE表示不禁止

2、在整个项目中禁用

<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值