EL技术

1 - El工具包介绍

1)由Java技术开发的一个jar包

2)作用降低JSP文件开发时Java命令 开发强度

3)Tomcat服务器本身自带了EL工具包(在Tomcat安装地址/lib/el-api.jar)

JSP文件作用:代替响应对象将Servlet中doGet/doPost的执行结果写入到响应体

2 - EL表达式与作用域对象别名

1.命令格式:${作用域对象别名.共享数据} ${applicationScope.(Integer)application.getAttribute("key")}

2.命令作用:

  1)EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】

  2)EL表达式JSP文件上使用

  3)负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体

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

  1)全局作用域对象(application) ServletContext application = new ServletContext();

  2)会话作用域对象(session) HttpSession session = new HttpSession();

  3)请求作用域对象(request) HttpServletRequest request = new HttpServletRequest();

  4)当前页作用域对象(pageContext) PageContext pageContext = new PageContext();

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

真实开发过程,主要用于JSTL标签与JSP文件之间数据共享

  JSTL --数据---> pageContex -----> JSP

 

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

  JSP        EL表达式

application    ${applicationScope.共享数据名}

session    ${sessionScope.共享数据名}

request    ${requestScope.共享数据名}

pageContex  ${pageScope.共享数据}

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

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

例如:

  Student student = new Student(100,"alex");

  request.setAttribute("key",student);

  <body>

    学号:${requestScope.key.studentNumber} <!--studentNumber来自于Student类属性,大小完全一致-->

    姓名:${requestScope.key.studentName}

  </body>

  ${"A" == requestScope.key.answer?"cheched":""}

 

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

3.属性名:一定要与类中的属性名一致

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

4 - EL表达式简化版

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

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

3.工作原理:

  EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法,首先到【pageContext】定位共享数据,如果存在直接赌气输出并结束执行,
  如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接赌气输出并结束执行,由此类推,在到session,application。如果都没定位成功则返回null

  总结:查找顺序(自上而下)pageContext --> request --> session --> application -- > null

4.存在隐患:

  1)容易降低程序执行的速度【南辕北辙】

  2)容易导致数据定位错误

5.应用场景:

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

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

5 - EL表达式 -- 支持运算表达式

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

<!--传统的Java命令-->

<%

  String num1 = (String) request.getAttribute("key1");

  Integer num2 = (Integer) request.getAttribute("key2");

  int sum = Integer.valueOf(num1) + num2;

%>

sum=<%=sum%>

El表达式简化版(支持运算)

sum=${key1+key2}

2.运算表达式

  1)数学运算

  2)关系运算:> < >= <=等

    部分代码示例:

      request.setAttribute("age",22);

      El表达式输出关系运算:${age > 18?"可以入内":"谢绝入内"}

  3)逻辑运算: && ||  !

6 - EL表达式提供的内置对象

1.命令个数:${param.请求参数名}

2.命令作用:从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体

3.代替命令:index.jsp

发送请求:Http://localhost:8080/myWeb/index.jsp?userName=alex&passWord=123

  <%

    String userName = request.getParameter("userName");

    String passWord = request.getParameter("passWord");

  %>

  用户名:<%=userName%>

  密码:<%=passWord%>

  或

  用户名:${param.userName}

  密码:${param.passWord}

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

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

3.代替命令:http://localhost:8080/myWeb/index.jsp?page1=1&page2=2&page3=3

此时page请求参数在请求包以数组形式存在

  page:[1,2,3]

  <%

    String[] array = request.getParameterValues("page");

  %>

  第一个值:<%=array[0]%>

  第二个值:<%=array[1]%>

  或

  第一个值:${paramValues.page[0]}

  第二个值:${paramValues.page[1]}

  第二个值:${paramValues.page[2]}

 

posted @ 2020-08-02 22:38  赖正华  阅读(257)  评论(0编辑  收藏  举报