一、EL(Expression Language)表达式

  语法结构:${var}

  若要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true:

  <%@ page isELIgnored ="true|false" %>  这样,EL表达式就会被忽略。若设为false,则容器将会计算EL表达式。

  EL表达式的应用:

  • 获取数据:用于替换Jsp中的脚本表达式,从web域中检索java对象、获取数据。
  • 执行运算:执行一些基本的逻辑运算、关系运算、算术运算。
  • 获取Web开发常用对象:利用EL定义的隐式对象,可以获得对web常用对象的引用,从而获取这些对象中的的数据。
  • 调用java方法:EL允许自定义EL函数,可以通过EL表达式调用java类的方法。
      <h3>EL表达式中使用二元表达式</h3>
<%
session.setAttribute("user",new User("孤傲苍狼"));
%>
${user==null? "对不起,您没有登陆 " : user.username} <%
List<String> emptyList = null;
%>
<%--使用empty运算符检查对象是否为null(空) --%>
<c:if test="${empty(emptyList)}">
对不起,没有您想看的数据
</c:if>

  EL表达式语言中定义了11个隐含对象,他们都是java.util.Map类型,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据

 <br/>---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------<br/>
${pageContext}
<br/>---------------2、pageScope对象:从page域(pageScope)中查找数据------------------------<br/>
<%
pageContext.setAttribute("name","张三"); //map
%>
${pageScope.name}
<br/>---------------3、requestScope对象:从request域(requestScope)中获取数据------------------------<br/>
<%
request.setAttribute("name","李四"); //map
%>
${requestScope.name}
<br/>---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------------<br/>
<%
session.setAttribute("user","xdp"); //map
%>
${sessionScope.user}

  EL表达式语言可以访问EL函数。EL函数实际上与Java类的方法对应,这个Java类必须定义为public类型,并且作为函数的方法必须声明为public static类型。当Java类定义好以后,应该在标签描述符(TLD)文件中,把Java类的方法映射为函数。

  EL Function:

  一般来说, EL自定义函数开发与应用包括以下三个步骤:
  1、编写一个Java类的静态方法。
  2、编写标签库描述符(tld)文件,在tld文件中描述自定义函数。
  3、在JSP页面中导入和使用自定义函数。

  详情参考:(1)http://www.cnblogs.com/xdp-gacl/p/3938361.html(1.5EL Function开发步骤)

       (2)http://blog.csdn.net/goskalrie/article/details/51315397(自定义和使用EL函数)

二、JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)

   JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库。

  1、JSTL标签库包含四类:

  • core:核心标签库,学习重点
  • fmt:格式化标签库,只学习两个
  • sql:数据库标签库,已过时,不学习
  • xml:xml标签库,已过时,不学习

  2、使用taglib指令导入标签库

  除了JSP动作标签外,使用其他第三方的标签库都需要:(1)导包;(2)在使用标签的JSP页面中使用taglib指令导入标签库。

  导入JSTL的core标签库:<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>

  • prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c;
  • uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;

  3、核心标签库(core)

  JSTL的核心标签库标签共13个,分为4类:  

    1.表达式控制标签:out、set、remove、catch

    2.流程控制标签:if、choose、when、otherwise

    3.循环标签:forEach、forTokens

    4.URL操作标签:import、url、redirect

  (1)<c:out>标签主要是用来输出数据对象(字符串、表达式)的内容或结果。JSTL的使用是和EL表达式分不开的,<c:out>有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入<c:out>标签中。

  (2)<c:set>标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。

  <c:set value="赵五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>
<li>从Bean中获取对象person的name值:<c:out value="${person.name}"></c:out></li>
<li>从Bean中获取对象person的age值:<c:out value="${person.age}"></c:out></li>

  (3)<c:remove>标签主要用来从指定的JSP范围内移除指定的变量。

  (4)<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常。

  (5)<c:if>标签和程序中的if语句作用相同,用来实现条件控制。

 <%--使用if标签进行判断并把检验后的结果赋给adminchock,存储在默认的page范围中。 --%>
<c:if test="${param.uname=='admin'}" var="adminchock">

  (6)<c:choose>、<c:when>和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。 使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

  (7)<c:forEach>标签该根据循环条件遍历集合(Collection)中的元素。

  (8)<c:import>该标签可以把其他静态或动态文件包含到本JSP页面,与<jsp:include>的区别为:<jsp:include>只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。

  (9)<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。

  (10)<c:redirect>该标签用来实现请求的重定向。同时可以配合使用<c:param>标签在url中加入指定的参数。

  4、fmt标签库

   fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字:

  (1)格式化日期

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
......
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>

  (2)格式化数字  

<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/> 

  5、自定义JSTL标签

  详见:http://blog.csdn.net/qq_25827845/article/details/53311722(自定义标签)

  以上均为简单学习的过程。

  参考资料:

  EL:

  (1)http://www.runoob.com/jsp/jsp-expression-language.html

  (2)http://blog.csdn.net/goskalrie/article/details/51315397

  (3)http://www.cnblogs.com/xdp-gacl/p/3938361.html

  (4)http://blog.csdn.net/qwerasdf123/article/details/4189889

  JSTL:

  (5)http://www.runoob.com/jsp/jsp-jstl.html

  (6)http://blog.csdn.net/qq_25827845/article/details/53311722

  (7)http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html

  (8)http://www.cnblogs.com/xdp-gacl/p/3943390.html

EL表达式、JSTL标签库的更多相关文章

  1. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  2. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  3. 2.EL表达式&JSTL标签库常用方法

    1.EL表达式 Expression Language表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出. 格式为${表达式} EL表达式输出Bean的普通属性.数组属性.Li ...

  4. jsp之el表达式jstl标签

    不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...

  5. el和jstl标签库讲解视频

    https://www.bilibili.com/video/av22415283/?p=1

  6. EL表达式与标签库

    https://blog.csdn.net/panhaigang123/article/details/78428567

  7. JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

    1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...

  8. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...

  9. Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库

    一.jsp部分 只要是与页面显示相关的都是重点 1.jsp的脚本 <%java代码%>:被翻译到service方法内部,局部变量,局部的功能 <%=表达式或变量%>:翻译成se ...

随机推荐

  1. python向config、ini文件读取写入

    config读取操作 cf = configparser.ConfigParser() # 实例化对象 cf.read(filename) # 读取文件 cf.sections() # 读取secti ...

  2. GIT教程的好文章

    Git 教學(1):Git的基本使用 Git 教學(2):Git Branch 的操作與基本工作流程 Git 情境劇:告訴你使用 Git 時什麼情況該下什麼指令

  3. Hibernate的查询方式

    Hibernate的查询的方式 OID检索 get或load方法进行的查询 对象导航检索 linkman.getCustomer(); HQL检索 用于接收hql语句进行查询,面向对象查询方式. 通过 ...

  4. Linux 如何使用gdb 查看core堆栈信息

    转载:http://blog.csdn.net/mergerly/article/details/41994207 core dump 一般是在segmentation fault(段错误)的情况下产 ...

  5. 百度学术导入endnote出现choose an import filter解决

    一般情况,我们在百度学术搜索一篇文章, 点击引用,出来一个 点击EndNote,将下载好的.enw双击出现 百度了一些,可以不使用百度学术,用pubmed,点击citation. 发现一个解决办法.在 ...

  6. gitlab api 使用

    api文档:https://docs.gitlab.com/ee/api/projects.html#project-visibility-level 1.项目查询 http://127.0.0.1: ...

  7. Jmeter生成html报告

    进入到jmeter安全目录bin下,执行以下命令 基本命令格式: jmeter -n -t test.jmx(性能测试脚本) -l testResult.csv(测试监听结果文件) -e -o tes ...

  8. 前端笔记-jquery

    一.什么是jquery 1.jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team 2.jQuery是继prototype之后又一个优秀的 ...

  9. 浅谈openstack中使用linux_bridge实现vxlan网络

    openstack环境: 1 版本:ocata 2 系统:ubuntu16.04.2 3 控制节点 1个 + 计算节点 1个 4 控制节点网卡为ens33,ip = 172.171.5.200 ens ...

  10. CSS 背景图像 background属性简写

    background属性简写 background属性可以像margin padding属性一样,有简写方法,它的简写顺序是: background-color background-image ba ...