一、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类的方法。
 1      <h3>EL表达式中使用二元表达式</h3>
 2      <% 
 3          session.setAttribute("user",new User("孤傲苍狼"));
 4      %>
 5      ${user==null? "对不起,您没有登陆 " : user.username}
 6 
 7 
 8     <%
 9          List<String> emptyList = null;
10      %>
11      <%--使用empty运算符检查对象是否为null(空) --%>
12      <c:if test="${empty(emptyList)}">
13          对不起,没有您想看的数据
14      </c:if>

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

 1 <br/>---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------<br/>
 2          ${pageContext}
 3      <br/>---------------2、pageScope对象:从page域(pageScope)中查找数据------------------------<br/>
 4      <% 
 5          pageContext.setAttribute("name","张三");  //map
 6      %>
 7          ${pageScope.name}
 8         <br/>---------------3、requestScope对象:从request域(requestScope)中获取数据------------------------<br/>
 9         <% 
10             request.setAttribute("name","李四");  //map
11         %>
12             ${requestScope.name}
13         <br/>---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------------<br/>
14         <% 
15             session.setAttribute("user","xdp");  //map
16         %>
17             ${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

posted on 2017-10-22 16:17  yanxi1900  阅读(216)  评论(0编辑  收藏  举报