EL表达式

1.EL工具包介绍
    1.概念:由Java技术开发的一个jar包
    2.作用:降低JSP文件开发时java命令开发的难度。
    3.Tomcat服务器本身自带了EL工具包(Tomcat安装地址/lib/el-api.jar)


2.回顾 多个Servlet之间共享数据的方案
    1.全局作用域对象:ServletContext

    2.会话作用域对象:HTTPSession
        如果两个Servlet来自同一个网站,并且为同一个浏览器/用户提供服务

    3.请求作用域对象:HTTPServletRequest

3.JSP文件将处理结果回写到响应体中的两种方式
  1.传统JSP文件将处理结果回写到响应体中

1 <%
2     Integer sid =(Integer)application.getAttribute("sid");
3     String sname =(String)session.getAttribute("sname");
4     String home =(String)request.getAttribute("home");
5 %>

  2.使用EL表达式简化传统方式

1 学员ID:${applicationScope.sid}<br/>
2 学员姓名:${sessionScope.sname}<br/>
3 学员地址:${requestScope.home}

4.EL表达式和作用域对象对照表

   对象名称            EL表达式对应格式       注释
  ----------------------------------------------------------------------------
  ServletContext          applicationScope  全局作用域对象

  HTTPSession           sessionScope    会话作用域对象

  HTTPServletRequest    requestScope            请求作用域对象

 pageContext      pageScope        当前页作用域对象    
  ----------------------------------------------------------------------------

1 pageContext对象简单说明
    1.它是JSP文件中独有的作用域对象,Servlet中不存在
    2. 在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用
    3 不能共享给其他Servlet或者其他JSP文件。
    4 真实开发过程中,主要用于JSTL标签与JSP文件之间的数据共享
       JSTL ---> pageContext ---> JSP    

  简单总结: 有了EL表达式以后,就不要在JSP文件中书写java命令了,浪费时间

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

6.EL表达式将引用对象属性写到响应体中
  1.命令格式:${作用域对象别名.共享数据名.属性名}
  2.作用: 从作用域对象中读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体中
  3.属性名:大小写要完全一致
  4.示例:

1 学员编号:${requestScope.key.sid}<br/>
2 学员编号:${requestScope.key.sname}

  5.EL表达式不能遍历集合,无法从作用域中读取集合内容输出。但是:在JSTL中弥补了这个不足

7.EL表达式简化版

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

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

3.示例:
    标准版:${sessionScope,key}<br/>
    简化版:${key}

4.工作原理
    EL表达式简化版由于没有指定作用域对象,所以在执行时采用就近原则(作用域从小到大)输出
    
    pageContext ---> request ---> session --->application    
    
    如果上面四个作用域对象都没有,就返回null。

5.缺点:
    1.降低程序执行速度,因为它每次都要在四个作用域中查找一遍
    2.容易导致数据定位错误

6.应用场景:设计目的就是简化从pageContext中读取数据并输出,而不是用在其他三个Servlet作用域中

7.但是:实际开发过程中,为了节省时间,一般都使用简化版,拒绝使用标准版

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

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

2.运算表达式:
    1.数学运算

    2.关系运算:    >    >=    ==    <=    !=
            gt    ge    lt    le    !=
    
    3.逻辑运算    &&    ||    !

3.EL表达式输出关系运算:${age > 18?"欢迎光临":"谢绝入内"}

4.JSP只做输出,复杂判断在Servlet里面做。

9.EL表达式 其他内置对象

只做了解即可
1.需求:通过当前请求对象读取当前请求包中的请求参数内容,并将请求参数内容写入到响应体中
    index.jsp
        发送请求:Http:localhost:8080/myweb/index.jsp?userName=mike&password=123

2.命令格式:
    1.传统方式

1         <%
2             String userName = request.getParameter("userName");
3             String password = request.getParameter("password");
4         %>
5         <%=userName>
6         <%=password>    

    2.EL表达式方式:${param.请求参数名}
       
3.示例
    来访者姓名:${param.userName}<br/>
    来访者密码:${param.password}
    
4.测试:浏览器输入网址并确定就能得到需要的内容:Http:localhost:8080/myweb/index.jsp?userName=mike&password=123

=================================================================================================
1.需求:如果浏览器发送的请求参数是【一个请求参数关联多个值】,此时可以通过paramValues读取请求参数下指定位置的值,并写入到响应体中。
    index.jsp
        发送请求:http:localhost:8080/myweb/index2.jsp?pageNo=1&pageNo=2&pageNo=3
        此时,pageNo请求参数在请求包中以数组形式存在:pageNo:[1,2,3]

2.命令格式:   
    1.传统方式:
         

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

    2.EL表达式方式:${paramValues.请求参数名[下标]}

3.示例
    第一个部门编号:${paramValues.deptNo[0]}
    第二个部门编号:${paramValues.deptNo[1]}
    第三个部门编号:${paramValues.deptNo[2]}

4.测试:http:localhost:8080/myweb/index2.jsp?deptNo=1&deptNo=2&deptNo=3

posted @ 2021-02-26 22:25  兵长砍猴  阅读(140)  评论(0)    收藏  举报