EL表达式的简单使用

编程入门 行业动态 更新时间:2024-10-27 06:33:52

EL<a href=https://www.elefans.com/category/jswz/34/1771310.html style=表达式的简单使用"/>

EL表达式的简单使用

本篇供个人学习使用,有问题欢迎讨论

EL表达式

一、EL工具包介绍

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

二、JSP文件作用

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

三、JSP文件中主要开发步骤

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

<%String value = (String)request.getAttribute("key");
%>
<%=value%>
  • 第一步:从指定的作用域对象读取处理结果
  • 第二步:将得到数据进行类型强转
  • 第三步:将转换后的数据写入到响应体
1、传统JSP开发步骤
(1)OneServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.分别将共享数据添加到作用域对象ServletContext application = request.getServletContext();HttpSession session = request.getSession();application.setAttribute("id",2);session.setAttribute("name","mike");request.setAttribute("address","武汉");//2.通过请求转发方式,向Tomcat申请调用index_ 1.jsp, 由index_1.jsp负责将作用域对象共享数据读取并写入到响应体,交给浏览器request.getRequestDispatcher("/index_1.jsp").forward(request,response);}
(2)index_1.jsp
	<%Integer id = (Integer)application.getAttribute("id");String name = (String)session.getAttribute("name");String address = (String)request.getAttribute("address");%>学员编号:<%=id%><br>学员姓名:<%=name%><br>学员地址:<%=address%><br>

2、使用EL表达式
(1)index_1.jsp
	<hr>学员编号:${applicationScope.id}<br>学员姓名:${sessionScope.name}<br>学员地址:${requestScope.address}<br>

四、EL表达式

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

五、EL表达式作用域对象别名

1、JSP文件可以使用的作用域对象
(1)ServletContext application

​ 全局作用域对象

(2)HttpSession session

​ 会话作用域对象

(3)HttpServletRequest request

​ 请求作用域对象

(4)PageContext pageContext

​ 当前页作用域对象,这是JSP文件独有的作用域对象。Servlet中不存在。在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他servlet或者其他JSP文件。

真实开发过程,主要用于【JSTL标签】与【JSP文件】之间数据共享
JSTL -----(数据)-----> pageContext ----------> JSP

2、EL表达式提供作用域对象别名
JSPEL表达式
application${applicationScope.共享数据名}
session${sessionScope.共享数据名}
request${requestscope.共享数据名}
pageContext${pagescope.共享数据名}

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

1、命令格式
 ${作用域对象别名.共享数据名.属性名}
2、命令作用

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

3、属性名

​ 一定要与引用类型属性名完全一致(大小写)
注意:EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出

七、简化版EL表达式

1、命令格式
${共享数据名}
2.命令作用

​ EL表达式允许开发人员开发时省略作用域对象别名

3、工作原理

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

  • 首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【application】没有定位成功,返回nul1
4、存在弊端
  • 容易降低程序执行速度【南辕北辙】
  • 容易导致数据定位错误
5、使用场景

设计目的,就是简化从【pageContext】读取共享数据并输出难度

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

八、EL表达式支持运算表达式

1、前提

​ 在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体

2、运算表达式
(1)数学运算
  • 传统的Java命令计算后的结果
<!--将作用域对象中共享数据读取出来相加,将相加结果写入到响应体-->
<%String num1 = (String)request.getAttribute("key1");Integer num2 = ( Integer)request.getAttribute("key2");int sum = Integer.value0f(num1) + num2;
%>
传统的Java命令计算后的结果:<%=sum%>
  • EL表达式计算后的结果
EL表达式计算后的结果: ${key1+key2}
(2)关系运算
>(gt)	>=(ge)	==(eq)	<(lt)	<=(le)	!=(!=)

如:

  • 传统Java命令方式实现关系运算输出
<!--传统Java命令方式实现关系运算输出-->
<%String age = (String)request.getAttribute("age");if (Intege.value0f(age >= 18){
%>欢迎光临<br/>
<%} else {
%>谢绝入内<br/>
<%}
%>
  • EL表达式实现关系运算输出
EL表达式输出关系运算: ${age ge 18 ? "欢迎光临" : "谢绝入内"}
(3)逻辑运算
&&	||	!

九、EL表达式提供内置对象(了解即可)

1、param
(1)命令格式
${param.请求参数名}
(2)命令作用

​ 从通过请求对象读取当前请求包中请求参数内容并将请求参数内容写入到响应体

(3)代替命令

index.jsp

  • 传统Java命令方式
<!--访问Http://localhost:8080/myWeb/index.jsp?userName=mike&password=123-->
<%string userName = request.getParameter("userName");string password = request.getParameter("password");
%>
<%=userName%>
<%=password%>
  • EL表达式
<!--http://locaLhost:8080/myWeb/index_ 1.jsp?userName=mike&password=123-->
来访者姓名:${param.userName}<br/>
来访者密码:${param.password}
2、paramValues
(1)命令格式
 ${paramValues.请求参数名[下标]}
(2)命令作用

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

(3)代替命令
  • 传统Java命令方式
<!--访问http://localhost:8080/myWeb/index2.jsp?pageNo=1&pageNo=2&pageNo=3-->
//此时pageNo请求参数在请求包以数组形式存在	pageNo: [1,2,3]
<%String array[] = request.getParameterValues("pageNo");
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
  • EL表达式
<!--http://localhost:8080/myWeb/index_2.jsp?deptNo=10&deptNo=2O&deptNo=3O-->
第一个部门编号:${paramVaLues.deptNo[0]}<br/>
第二个部门编号:${paramValues.deptNo[1]}<br/>
第三个部门编号:${paramVaLues.deptNo[2]}<br/>

十、相对路径与绝对路径

1、相对路径与绝对路径区别
(1)相对路径

以当前文件位置为起点,定位其他的资源文件

<h1>相对路径定位</h1>
<a href="one.jsp">one.jsp</a><br/>
<a href="../index.jsp">index.jsp</a>
(2)绝对路径

以网站根目录为起点,定位其他的资源文件

<h1>绝对路径</h1>
<a href="/myWeb/jsp/one.jsp">one.jsp</a><br/>
<a href="/myWeb/index.jsp">index.jsp</a>
2、实际开发过程中,建议使用【绝对路径】,不建议使用相对路径
3、如何动态获得网站运行时根目录?
<%string root = request.getContextPath();  //相当于“/myWeb”
%>
<base href="<%=root%>/">

十一、EL表达式缺陷

1、只能读取域对象数据,不能向域对象中写入数据更改数据
2、不支持控制语句
  • if 判断
  • while 循环

如果单独使用EL表达式,无法确保【JSP】文件中所有的【Java命令】都被替换

更多推荐

EL表达式的简单使用

本文发布于:2024-02-06 15:05:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750059.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表达式   简单   EL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!