JSTL和EL表达式

EL表达式(用来代替jsp表达式)

 

简介:EL:Expression Language(表达式语言)

        到JSP2.0以后,在JSP中不建议使用jsp脚本片段和jsp表达式。所以我们使用EL表达式来替换JSP表达式,使用标签(JSTL)来替换JSP脚本片段。EL表达式用来将一个对象输出到页面中

基本语法  

 

     语法:${表达式}
       作用:
            1.全域查找:
                - 在EL表达式中传递一个属性名的时候,它会自动去四个域中(page、request、session、application)分别查找,从小到大查找,先找到谁先返回,如果都没找到则返回一个空串(什么也不返回)
                - 用法:${属性名}   
            2.查找指定域中的属性
                - 在EL表达式可以通过pageScope、requestScope、sessionScope、applicationScope来指定要查找属性的域。
               - 用法:${xxxScope.属性名} 当属性名包含特殊内容,可以通过这种方式获取属性:${xxxScope['属性名']}   如: ${xxxScope['key-boy']}
            3.JavaBean的查询
                当通过EL表达式获取到的属性是一个JavaBean时,我们可以通过属性名直接获取对象中的属性值,它是通过调用相应属性的get方法来获取属性值,所以我们说通过EL表达式不能直接调用方法的但是它可以间接去调用get方法。
                例子: ${对象.属性名.属性名}   
                El表达式只能获取域中的属性,如果我想直接获取javaBean中student是不能获取的,因为student不在域中,若想获取,则需将student设置在域中比如 :<% Student stu =new Student(); request.setASttribute("student","stu");%>  EL表达式获取:${ requestScope.student};${ requestScope.student.name}  (取对象中的名字,直接对象.属性名,后面的name是getName中去掉get后的name)

 

EL表达式中的隐含对象(11个)

 1.pageContext : 类型:PageContext
       - 作用:它和JSP中那个PageContext一样,通过它可以获取到JSP中的其他隐含对象在EL中并不能获取到JSP中的所有的隐含对象,只能获取pageContext,但是我们可以通过PageContext来获取其他的隐含对象,在EL中提供了四个Scope来代表我们四个域对象中的域,可以通过他们来获取域中的属性,这四个全都是map集合
  2.pageScope :  类型:Map<String , Object>
            作用:可以通过它来获取page域中的属性
  3.requestScope : 类型:Map<String , Object>
            作用:可以通过它来获取request域中的属性
  4.sessionScope : 类型:Map<String , Object>
            作用:可以通过它来获取session域中的属性
  5.applicationScope : 类型:Map<String , Object>
            作用:可以通过它来获取application域中的属性
  6.param : 类型:Map<String , String>
            作用:可以用来获取指定的请求参数
            用法:${param.参数名}
  7.paramValues : 类型:Map<String , String[]>
            作用:代表一个参数对应的多个值
            用法: ${paramValues.参数名[索引]}
            (以下用的少)   
   8.header :  类型:Map<String , String>
            作用: 代表请求头的信息
            用法:${header.头名}
   9.headerValues :  类型:Map<String , String[]>
            作用:获取一个头对应的多个值
   10.cookie : 类型:Map<String , Cookie>
            作用:根据cookie的name来获取指定的cookie对象
   11.initParam(基本不用) : 类型:Map<String,String>
            作用:获取全局的初始化参数

 

EL表达式运算

在EL表达式中像+ - * /等运算符号可以直接使用。在EL表达式中还提供了一个empty运算符。empty运算符用来检查一个对象是否为空!如果对象为空,则empty返回true,否则,返回false
empty运算符合 ==null (当一个字符串为空时或一个集合长度为0时 返回false)有点像但是:当使用empty元素检查一个空的集合(没有元素的集合)和一个空串时, 它也会返回true,所以我们经常使用empty来检查一个字符串或者一个集合是否为空 ${empty userList}当userList不为null但是是空集合时返回true

 

JSTL表达式(用来代替jsp脚本片段)

    JSP虽然为我们提供了EL表达式用来替代JSP表达式,但是由于EL表达式仅仅具有输出功能,而不替代页面中的JSP脚本片段。为了解决这个问题,JSP为我们提供了可以自定义标签库(Tag Library)的功能。所谓自定义标签库就是指可以在JSP页面中以类似于HTML标签的形式调用Java中的方法。使用方法和我们JSP动作标签类似。而为了方便开发使用Sun公司又定义了一套通用的标签库名为JSTL(JSP Tag Standard Tag Library),里面定义很多我们开发中常用的方法,方便我们使用。JSTL的标准由Sun公司定制,Apache的Jakarta小组负责实现。JSTL由5个不同功能的标签库组成。

学习JSTL的原因

      从数据表中取得的数据,需要在页面上进行显示,按着目前的学习情况,可以使用 Java 脚本来显示内容。但 Java 代码和 HTML 标签嵌套 起来会比较乱.

          用jsp脚本来写的代码如下

 

<%
    List books2 = (List)request.getAttribute("books");
    for(int i = 0; i < books2.size(); i++){
        Book book = (Book)books2.get(i);
%>
    <%= book.getId() %>, <%= book.getAuthor() %>, <%= book.getTitle() %>
    <br>
<%       
    }
%>

          使用 JSTL 之后,显示将变得特别的规整.

 

<c:forEach items="${books }" var="book">
    ${book.id } , ${book.author }, ${book.title }
    <br>
</c:forEach

 

 

 

JSTL的使用

    1.使用JSTL必须在项目中导入两个jar包
            taglibs-standard-impl-1.2.1.jar
            taglibs-standard-spec-1.2.5.jar
    2.在JSP页面中通过taglib标签引入标签库(C标签)。
            <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
            prefix用来指定前缀名,我们通过该名来使用JSTL
            uri相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库,可以通过 uri 属性定位到指定的标签库.(要用1.1以上的版本)。
    3.使用JSTL
            <c:out value="hello"></c:out>这个例子标识,调用前缀为c的标签的out方法,向页面中输出value属性中的字符串。JSTL的使用非常像html标签。

 

 

 

 

 

 c:if【重要】
        进行逻辑判断,若 test 属性值为 true,则输出标签体的内容:
       <c:if test="${param.age > 10 }">
              大于 10 岁.
       </c:if>
 c:forEach(重要)
         对集合数据进遍历的.
                  <c:forEach items="${books }" var="book">
                        ${book.id } , ${book.author }, ${book.title }
                        <br>
                  </c:forEach>
 
    items: 集合数据。来自于域对象.
    var: 正在遍历时的单位对象,放入到了 pageContext 中。
 
    注意 varStatus 属性中存放了正在遍历的 "遍历相关" 的属性.
              <c:forEach items="${books }" var="book3" varStatus="status">
                     book3: ${pageScope.book3 }。index: ${status.index }. count: ${status.count }
                     <br>
              </c:forEach>
 
    注意:items属性里传的是EL表达式
              index: 表示索引
              count: 表示正在被遍历的元素顺序值. 其值通常为 index + 1.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值