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>

 

 

 

 

 

 

本文为作者原创,不可用于商业用途,转载请注明出处
原文地址:https://www.cnblogs.com/CHENCHAO7367/p/5974557.html