• JSTL 与 EL


    编写Java无脚本的jsp页面

    一、JSP表达式语言EL

    1、EL 表达式和 JSP 脚本表达式

      1>  EL表达式总是放在大括号里,而且前面有一个美元符前缀

          例如:${person.name}

      2>  与JSP脚本表达式比较

          例如:室外温度是 <%= temp %> 度。

             如果使用EL,则是:

             室外温度是${temp}度。

      3>  EL表达式以“${”开始,以“}”结尾,而JSP脚本表达式是以“<%”开始,以“%>”结尾 。EL表达式不能在脚本中定义变量 。目标是从JSP页面中消除Java代码

    2、EL 表达式中使用隐式变量

      1>  

          

    3、EL 运算符

      1>  EL运算符可以分为四类

          a、属性和集合访问运算符

          b、算术运算符

          c、关系运算符

          d、逻辑运算符

      2>  用于访问属性和集合的EL运算符

          a、   a.b:返回a的属性b的值。

          b、  a[b]:返回a的键或索引为b的值。

          注:如果b是一个字符串的话,这两个运算符在EL中的操作方式是可以互换的。

            ${header["host"]}

            ${header['host']}

            ${header.host}

      3>  EL 算术、关系、逻辑运算符

    类型 操作 运算符 示例 示例结果
    算术运算符 + ${2+3} 5
    -    
    * ${9-8} 1
    / 或 div ${9/3} 3
    取模 % 或 mod ${24%5} 4
    关系运算符 等于 ==  或  =    
    不等于 !=    
    小于 < 或 lt    
    大于 > 或 gt    
    小于等于 <= 或 le    
    大于等于 >= 或 ge    
    逻辑运算符 逻辑与 && 或 and    
    逻辑或 || 或 or    
    逻辑非 ! 或 not    
    其它 是否为空 empty    
    条件运算 a?b:c    

     

    4、EL 函数(暂时未完成,待续)

     

    二、JSP 自定义标记库与标准标记库 JSTL

    1、标准标记库JSTL

      1>  需要两个JAR文件。第一个文件是jstl.jar,它为JSTL标记库提供API类。第二个文件是standard.jar,它提供了标记库的实现类 。复制到WEB-INF目录下的lib子目录下。 通过<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>引入到JSP

     

      2>

         

     

    2、通用标记

      1>  使不使用JSP脚本执行Java程序成为可能

          例如:<c:catch var="e">

              会抛出异常的代码

             </c:catch>

             <c:out value="${number}" />

     

      2>  支持变量

          例如:<c:set var="num" value="${4*4}" />

             <c:set var="num">

              ${8*2}

             </c:set>

             <c:set var="num">

               <c:out value="${8+8}" />

             </c:set>

     

      3>  设置对象属性

           例如:<c:set target="customer1" property="zipcode">

              55501

              </c:set>

             或者

              <c:set target="customer1" property="zipcode" value="55501" />

     

    3、变量支持标记

      1>  <c:set>标记

          a、标记<c:set>用于设置变量和对象的值,变量和对象的值可以在标记内或标记体内设置。使用value属性或标记体的内容来设置变量的值。

           <c:set var="num" value="${4*4}">

            或

           <c:set var="num">

             ${8*2}

           </c:set>

          注:第二种,允许我们在<c:set>标记内插入标记操作。

            例如:<c:set var="num">

                <c:out value="${8+8}" />

               </c:set>

     

      2>  <c:remove>标记

         a、标记<c:remove>用于将一个变量从作用域中删除。

         b、在标记中用var属性指定变量的名称,用scope属性来指定其作用域。

         c、如果不指定其作用域,那么容器会首先查找page作用域,然后是request,再然后是session,最后是application作用域。

          例如:<c:remove var="num" scope="作用域" />

          注:与<c:set>不同的是,<c:remove>标记不能用于JavaBean和Map对象。

     

    4、流程控制

      1>  JSTL 条件处理

          a、<c:if> 与java的if语句一样,只有当满足条件时,才显示x的值。

             例如:<c:if test="${x == '9'}">

                  ${x}

                </c:if>

           注:变量的测试值必须用单引号括起来,容器根据这个单引号来识别比较。

     

            b、<c:choose> 与java的switch语句一样,在JSTL的<c:choose>标记中,当没有条件满足时,我们使用可选的<c:otherwise>标记作为默认选项。

             例如:<c:choose>

                  <c:when  test="${color == 'white'}">

                  Hight!

                </c:when>

                <c:when  test="${color == 'black'}">

                  Dark!

                </c:when>

                <c:otherwise>

                  Colors!

                </c:otherwise>

                </c:choose>

     

      2>  循环

            a、<c:forEach>

           例如1:创建一个由var属性指定的变量,并将变量初始化为begin属性的值,然后开始处理循环体体内的内容,直到变量等于end属性的值。step:每隔3次显示x的当前值。

                <c:forEach var="x" begin="0" end="30" step="3">

                  ${x}

                  </c:forEach>

             例如2:遍历numArray的元素,将这些元素的值都赋值为100。

                <c:forEach var="num" items="${numArray}">

                  <c:set var="num" value="100" />

                  </c:forEach>

     

            b、<c:forTokens> 标记用于循环处理字符串中由分隔符分割的各成员。

             例如:  <c:forTokens items=".." delims="..">

                //内容体

                  </c:forTokens>

            注:items属性是要处理的用分割符分割的字符串对象,delims指定的分隔符。

     

    5、用 JSTL 访问 URL 信息

      1>    <c:url>,重写URL并对其参数编码

         a、如果客户端浏览器不接受Cookies,我们需要重写URL以维护回话状态,<c:url>就是用于重写URL的。

            例如:<c:url value="/page.html" var="pagename">

           b、如果客户端浏览器接受Cookies,但是容器不能在当前会话中找到一个cookie,那么容器就会用session ID 数字重写URL。

         c、如果value属性的值不是以斜杠开始,那么上下文的名称不会添加到var中。

         d、在<c:url>标记的内容体中使用<c:param>标记,可以为URL添加参数。

            例如:<c:url value="/page.html" var="pagename">

                 <c:param name="param1" value="${2*2}"/>

                 <c:param name="param2" value="${3*3}"/>

               </c:url>

     

      2>    <c:import>,访问Web应用程序之外的内容

          a、 在<c:import>标记的内容体中使用<c:param>标记,将参数添加到URL中。

            例如:<c:import value="/page.html" var="newstuff" scope="session">

                 <c:param name="par1" value="val1"/>

                 <c:param name="par2" value="val2"/>

               </c:import>

     

      3>    <c:redirect>,重定向到不同的URL

          a、<c:redirect>标记的功能与HttpServletResponse的sendRedirect()方法相同,它发送一个重定向响应到客户端,并且告诉客户端去访问由其url属性指定的URL。

          b、和前面两个URL标记一样,我们可以在<c:redirect>标记中使用context属性指定URL的上下文,使用<c:param>标记添加参数。

            例如:<c:redirect url="/content.html">

                 <c:param name="par1" value="val1"/>

                 <c:param name="par2" value="val2"/>

               </c:redirect>

     

     

     

     

     

     

    本文为作者原创,不可用于商业用途,转载请注明出处
  • 相关阅读:
    Windows脚本转换Liunx识别并执行
    分布式事物常见解决方案
    SIMD加速计算矩阵(组成原理实验5)
    Code-server搭建web IDE
    CentOS 8 修改SSH端口
    Floyd算法的原理和实现代码
    initNativeTransServiceId . ntrans:object componentId :-368613127 微信小程序
    对象搜索算法挑战
    微信小程序小窗无效
    《六层楼》--宋东野
  • 原文地址:https://www.cnblogs.com/CHENCHAO7367/p/5974557.html
Copyright © 2020-2023  润新知