EL表达式应与JSTL配合使用,但EL表达式在JSP2.0,servlet2.4以上可以单独使用。
EL表达式的基本形式为:
${ expression }
expression可以为page,request,session,application域内的变量,集合,或算术逻辑运算。EL运算符有 +, - , * ,/ 或

div , % 或 mod , == 或 = , = 或 ne  , < 或 lt , > 或 gt , <= 或 le , >= 或 ge , && 或 and , || 或 or , ! 或 not , empty (

测试是否为空如:${empty expression} 结果为true/false), a?b:c。
(1)对存储对象的访问
 若要输出作用域变量saleItem(通过setAttribute方法存储在page,request,session,application作用域内的变量

)的变量:${saleItem},若知道saleItem在request作用域内还可以如此访问:${requestScope.saleItem}。若不指定作用域

则默认在EL四个隐含对象pageScope,requestScope,sessionScope,applicationScope作用域中按顺序查找。
(2)对javaBean属性的简化记法
 要输出作用域变量company的companyName(在javaBean类定义中必须存在getCompanyName()方法才可访

问)属性:${company.companyName}。要访问company的president 属性的firstName(存在相应的getXXX()方法)属性:
${company.president.firstName}。
(3)对集合或数组的访问
 要访问数组,List,Map中的元素为:${variable[index/key]}。

 

JSTL
一. 配置 JSTL
 包括两个 JAR 文件, jstl.jar 和 standard.jar 。
原文引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>   

二.JSTL的标签库

 核心标签库core
 

(1)<c:out value = "expression"  [default = "expression"]  [escapeXml = "true/false"]/>或
 <c:out value = "expression"    [escapeXml = "true/false"]>
  default value
 </c:out>
 value为输出表达式,当value为空又设置了default时输出默认值default的内容,escapeXml为是否照原样输出
 而忽略html标签代码默认为true.

 (2)<c:set var = "name"  [scope = "page/request/session/application"]  value = "expression"/> 或
      <c:set var = "name"  [scope = "page/request/session/application"] >
  value
      </c:set>
 此表达式为在相应的作用域内申明一个name的变量,其值为value的内容.

 (3)<c:remove var = "name"  [scope = "page/request/session/application"] />
 此表达式为在相应的作用域内删除name变量.

 (4)<c:catch var = "name"  [scope = "page/request/session/application"]>...</c:catch>
 捕获异常,并用name标示此异常.

 (5)流程控制:
 条件控制标签:

 1.  c:if 
 <c:if test = "expression" var = "varName" scope = " "></c:if>
 test为测试表达式,var表示test运行后的结果,类型为String值为true/false,scope为var的存储范围。
 
 2.  c:choose 
 <c:choose>
  <c:when test = "expression">
   ...
  </c:when>
  <c:when test = "expression">
   ...
  </c:when>
  <c:otherwise>
   ...
  </c:otherwise>
 </c:choose>
 可以有一个或多个<c:when></c:when>但只能有0个或一个<c:otherwise></c:otherwise>且只能放  

在<c:when></c:when>后面。
 
 循环控制标签:

 1.  c:forEach
 格式一:集合或数组的迭代
 <c:forEach  [var = "varName"] 
      items = "collection/arrays" 
      [varStatus = "varStatusName"] 
      [begin = " "]
      [end = " "]
      [step = " " ]>
  ....
 </c:forEach>
 items为被循环的集合或数组,var用来存储当前被访问的变量,varStatus为当前的循环状态,begin为开始位置,
 end为结束位置,step为步长。
 格式二:一般的迭代
 <c:forEach  [var = "varName"]
      [varStatus = "varStatusName"]
      begin = " "
      end = " "
      [step = " "]>
   ...
 </c:forEach>

 

 2.  c:forTokens
 一般用来字符串的循环。
 <c:forTokens  items = "String"
         delims = ",/ " 
         [var = "varName"]
         [varStatus = "varStatusName"]
         [begin = " "]
         [end = " "]
         [step = " "]>
  ...
 <c:forTokens>
 delims为字符串分隔符逗号、空格等等。

 (6)URL标签:
 <c:import url = " url" [context = " "]  [var = "varName"]  [scope = "scope"]  [charEncoding = " "] />

 <c:redirect url = "url"  [context = " "] />或
 <c:redirect url = "url"  [context = " "] >
  <c:param name = " "  value = " "/>
 </c:redirect>

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