zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—基础巩固篇二十九(EL、JSTL)

    EL:

       EL是JSP内置的表达式语言。Java 2.0开始,不让再使用Java脚本。而是使用EL表达式和动态标签来代替Java脚本。EL代替的是<%= ... %>,也就是说,EL只能做输出。

      EL表达式来读取四大域:

        ${xxx}:全域查找名为xxx的属性,若不存在,输出空字符串,而不是null。

          查找优先级:pageContext、request、session、application。

        ${pageScope.xxx }、${requestScope.xxx }、${sessionScope.xxx}、${applicationScope.xxx}:指定域查找。

      EL十一个内置对象:

        十一个内置对象,其中10个是Map类型,pageContext不是Map,它就是PageContext类型

        1、pageScope

        2、requestScope

        3、sessionScope

        4、applicationScope

        5、param:对应参数。是Map类型,其中key对应参数名,value对应单个参数值。适用于单值的参数。

        6、paramValues:对应参数。是Map类型,其中key对应参数名,value对应多个参数值。适用于多值的参数。

        7、header:对应请求头。适用于单值的请求头。

        8、headerValues:对应请求头。适用于多值的请求头。

        9、initParam:获取<context-param>内的参数。

        10、cookie:是Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。取值:${cookie.xxx.name}、${cookie.xxx.value}

        11、pageContext:是PageContext类型。${pagecontext.request.contextPath}项目名。

      EL函数库:

        由JSTL提供。使用EL函数库需要导入标签库。

        <% taglib prefix="fn" uri="" %>

      EL自定义函数库:

        自定义一个Java类,类中可以定义0~N个静态方法,并且有返回值。

        在WEB-INF目录下创建一个tld文件,并录入:

    <function>
        <name>fun</name>
        <function-class></function-class>
        <function-signature></function-signature>
    </function>

        在JSP页面中导入标签库<%@taglib prefix="fn" uri="/WEB-INF/tlds/xxx.tld"%>;在JSP页面中使用自定义的函数。 

    JSTL:

      JSTL是标签语言;是apache对EL表达式的扩展。依赖与EL。

      JSTL四大标签库:

        core:核心标签库

        fmt:格式化标签库

        sql:数据库标签库。已过时

        xml:xml标签库。已过时

      core:又称c标签。

        out和set:

          <c:out>:输出

            <c:out value="输出的值" />

            <c:out value="${xxx}" default="默认输出值" />:当xxx不存在时,输出default的值。

          <c:set>:设置;初建域的属性

            <c:set var="变量名" value="变量值,可以是EL表达式" scope="域" />

        remove:

          <c:remove>:删除域变量

            <c:remove var="变量名" scope="域" />:若不给出scope,则删除所有域的该名称的变量。若指定,则只删除该域的变量。

        url:

          <c:url value="路径" />:指定一个路径,它会在路径前自动添加项目名。

          子标签:<c:param>:用来给url后添加参数。

          例:

            <c:url value="路径">

              <c:param name="x" value="X" />

            </c:url>

          <c:url value="路径" var="变量名" scope="域" />

          var:指定变量名,添加该属性后,那么url标签就不会再输出该页面,而是把生成url保存到域中。

          scope:它与var一起使用,用来保存url。

        if:

          <c:if>:对应if语句

            <c:if test="布尔类型">

              ...

            </c:if>

            当test的值为true时,指定标签体内容。

        choose:

          <c:choose>:对应if/else if/....../else语句。

            <c:choose>

              <c:when test="布尔类型"></c:when>

              <c:when test="布尔类型"></c:when>
              ...
              <c:otherwise></c:otherwise>

            <c:choose>

        forEach:

          <c:forEach>:循环

          例:

            <c:forEach var="i" begin="1" end="10" step="2">

              ${i}

            </c:forEach>

            <c:forEach items="" var="str">

              ${str}

            </c:forEach>

          var:循环变量

          begin:设置循环变量开始值

          end:设置循环变量结束值

          step:设置步长;默认1。等同于循环中的i++/i+=2

          items:指定要遍历的值

          循环状态:

            可以使用varStatus来创建循环状态变量;循环状态变量由一下属性:

            count:元素个数。index:下标。first:第一个元素。last:最后一个元素。current:当前元素。

      fmt:格式化库

        <fmt:formatDate>:格式化输出。通常需要格式化的由时间、数字。

        <fmt:formatDate value="${date}" partten="yyyy-MM-dd HH:mm:ss">

      自定义标签:

        步骤:

          1、标签处理类:标签也是一个对象,那么就需要先由类。

          2、tld文件,它时一个xml。

          3、页面中使用<%@taglib%>来指定tld文件的位置

        标签处理类:

          SimpleTag接口下的方法:

            doTag();每次指定标签时都会调用这个方法。

            JspTag getParent();返回父标签;非生命周期方法。

            setParent(JspTag);设置父标签

            setJspBody(JspFragment);设置标签体

            setJspContext(JspContext);设置JSP上下文对象,JspContext有个子类PageContext

            其中doTag()会在其他三个setXXX()方法后被tomcat调用。

        配置tld文件:

          tld文件一般都放到web-INF之下,这样保证客户端访问不到。

    <tag>
        <name></name>  <!--指定当前标签的名称-->
        <tag-class></tag-class>  <!--指定当前标签的标签处理类-->
        <body-content>empty</body-content>  <!--指定标签体的类型,empty:空-->
    </tag>

        页面中指定tld文件位置:<%@taglib prefix="" uri="/WEB-INF/tlds/xxx.tld"%>

        标签体内容:

          empty:无标签体

          JSP:jsp 2.0已经不再支持这个类型,表示标签体内容可以是:Java脚本、标签、EL表达式。

          scriptless:只能是EL表达式,也可以是其他的标签。

          tagdependent:标签体内容不会被执行,而是直接赋值标签处理类。

        不再执行标签下面内容的标签:

          在标签处理类中的doTag()中使用SkipPageException来结束。

          tomcat会调用标签处理类的doTag(),然后tomcat会得到SkipPageException,就会跳过本页面的其他内容。

        带有属性的自定义标签:

          步骤:

            1、给自定义标签处理类添加属性

              为标签处理类添加属性,属性至少要有一个set方法。这个set方法会在doTag()之前被tomcat调用执行;所以在doTag()中可以使用属性。

            2、在tld文件中对属性进行配置

              配置方法:

    <attribute>
        <name></name>  <!--指定属性名-->
        <required></required>  <!--指定属性是否为必填项-->
        <rtexprvalue></rtexprvalue>  <!--指定属性是否可以使用EL表达式-->
    </attribute>
  • 相关阅读:
    JTS相关资料和示例
    微信、支付宝支付那点事
    系统化全方位监控告警,这一篇足矣
    耶鲁大学研究创造了模拟人类认知的计算机芯片
    Docker孵化的5个开源项目
    图解数据中心水系统标准和架构(大全)
    React Native 项目整合 CodePush 全然指南
    1分钟了解MyISAM与InnoDB的索引差异
    Google I/O 官方应用中的动效设计
    为了完毕月入三万的目标,我都做了哪些准备?
  • 原文地址:https://www.cnblogs.com/zltao/p/10388293.html
Copyright © 2011-2022 走看看