javaee笔记(8)JSTL&EL

EL表达式

EL的全称是表达式语言(Expression Language,EL),它是JSP2.0新增加的技术规范。引入EL表达式语言目的之一是为JSP页面计算、访问和打印数据提供方便,尽可能减少JSP页面中的Java代码,使JSP页面更简洁、更易于开发和维护。
EL表达式的基本语法
在这里插入图片描述
前者为即时计算。后者为延迟计算,通常用于JSF框架中
EL表达式可以写在HTML标记的标记体内,也可以写标记属性值内。
EL表达式中数值常量直接书写,例如:${3+5}

EL隐含对象

EL定义了11个隐含对象来方便读取JSP环境中的数据。
访问JSP域变量
EL访问4个JSP域变量(pageContext、request、session和application)对应的EL隐含对象是:pageScope、requestScope、sessionScope和applicationScope。
例如:

<%
    session.setAttribute("aa","bb");
	application.setAttribute("cc","dd");
%>
${sessionScope.aa}
${applicationScope.cc}

读取request请求报头
在EL表达式中读取request请求报头信息的隐含对象有header、headerValues
读取cookie
读取客户端cookies对象的EL隐含对象cookie。
读取客户端表单或查询串参数
读取客户端表单或查询串中参数的EL隐含对象为param或paramValues。
读取上下文初始化参数
通过EL的initParam隐含对象可读取上下文初始化参数。

EL运算符

EL表达式中可使用的运算符有:算术算符、关系算符、逻辑算符。
算术算符
主要有+、-、*、/、%、(),含义和用法基本同Java语言。例如:

<body>
${3+(8*4)}
</body> 

关系算符
主要有:>(大于)、<(小于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于),含义和用法基本同Java语言,例如:

<body>
${7<5}
</body> 

逻辑算符
主要有&&、||、!,算符含义同Java,这三个算符也可用保留字and、or、not表示,例如:

<%
    session.setAttribute("a","3");
    request.setAttribute("b","5");
%>
${a==3 && a<b}

empty和not empty //(!empty)算符
empty算符的作用是判断作用范围变量的取值是否为空null,为空则返回true,非空则返回false。

${empty s}//s=null s="" 都为true

. 与 [] 算符
EL使用“.”或“[]”来读取变量中的数据,两个算符的作用相同。

EL的自动数据类型转换
EL会根据表达式的运算性质,将读取到的数据自动转换为适合的数据类型后再参与表达式的运算。

访问JSP隐含对象中的getXXX()方法
在EL表达式中访问JSP隐含对象的getXXX()方法,EL语法如下:
${pageContext.JSP隐含对象名.XXX}
例如,访问request隐含对象的getRequestURI()方法,EL语法为:

 ${pageContext.request.requestURI} 

访问JavaBean中的属性
EL表达式通过“.”算符访问JavaBean中的属性,基本用法为:
${JavaBean名.属性名}
“.”算符实际上是调用JavaBean中的getXXX()方法。

JSTL

JSTL,即JSP标准标记库(JSP Standard Tag Library),它是SUN公司为简化JSP页面设计而提出的一种技术规范。JSTL使用一套新的标准标签库取代原来的scriptlet(代码嵌入<% %>中)进行JSP页面开发,使页面代码的可读性有了显著提高。

JSTL标记的结构
一个JSTL标记主要包含三部份:起始标记(可能包含属性)、标记体、结束标记。如:

<c:if test="${6>5}">
         结果:6>5
</c:if> 

JSTL标记的使用
要在JSP页面中使用JSTL标记(有5个标签库),首先要使用taglib指令声明,基本语法为:
<%@ taglib uri=“标记库的URI” prefix=“标记前缀” %>
例如:

   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     <c:out value="JSTL的使用"/> 

JSTL核心标记库

 JSTL核心标记库提供了控制流、循环语句、异常处理、信息输出、变量定义等动作。

<c:set>标记
用于定义一个JSP作用范围变量,并对变量进行赋值。主要有以下两种用法:
用<c:set>定义作用范围变量,语法如下:
<c:set var=“变量名” [value=“对象”] [scope=“作用范围”]>
[标记体]
</c:set>

例子:

<c:if test="${empty c}">
<c:set var="c" value="1"  scope="session"></c:set>
</c:if> 

<c:if test="${not empty c}">
<c:set var="c" value="${c+1}"  scope="session"></c:set>
</c:if> 
${c}

用<c:set>操作JavaBean对象,基本用法如下:
<c:set target=“Bean对象名” property=“属性名” [value=“新值”]>
[新值]
</c:set>

<c:remove>标记
<c:remove>用于移除一个作用范围变量,基本语法如下:
<c:remove var=“对象的变量名” scope=“作用范围”/>
例子:

<c:set var="c" scope="session"></c:set>

<c:out>标记
用来显示数据,功能相当于<%=%>。可输出常量或EL表达式。语法如下:
<c:out value=“待显示的数据” [default=“变量的默认值”]
[escapeXml=“true|false”]>
[变量的默认值]
</c:out>

例子

 <c:out value="&lt要显示的数据对象(未使用转义字符)&gt" escapeXml="true" default="默认值"></c:out>

<c:catch>标记
用来捕获异常,基本语法如下:
<c:catch [var=“变量名”]>
… 可能发生异常的代码段 …
</c:catch>

例子:

<c:catch var ="catchException">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${catchException != null}">
   <p>异常为 : ${catchException} <br />
   发生了异常: ${catchException.message}</p>
</c:if>

<c:if>标记
类似于Java语言中的if语句,用于测试判断。基本语法为:
<c:if test= “">[..]</c:if><c:if><c:iftest="{条件表达式}"> […标记体…..] </c:if>** <c:if>语句可以逐层嵌套,例如: **<c:if test="{条件表达式1}”>
<c:if test="${条件表达式2}">
条件都成立时,最后显示的内容.
</c:if>
</c:if>

例子:

<c:if test="${6>5}">
         结果:6>5
</c:if> 

<c:choose>标记
实现多分支判断。它的基本语法为:
<c:choose>
<c:when test=“${条件表达式1}”>
… 标记体1 …
</c:when>
… 其它的<c:when>标记 …
<c:otherwise>
… 标记体n …
</c:otherwise>
</c:choose>

例子

<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
    <c:when test="${salary <= 0}">
       太惨了。
    </c:when>
    <c:when test="${salary > 1000}">
       不错的薪水,还能生活。
    </c:when>
    <c:otherwise>
        什么都没有。
    </c:otherwise>
</c:choose>

<c:redirect>标记
实现重定向功能,它的基本用法如下:
<c:redirect url="" [context=""]>
…[<c:param>]…
</c:redirect>

例子

<c:redirect url="http://www.runoob.com"/>

<c:forEach>标记
(1) 计数循环
实现类似Java的for计数循环,它的基本用法如下:
<c:forEach begin=“初值”
end=“终值”
[step=“步长”]
[var=“变量”]
[varStatus=“状态变量”]>
… 标记体(循环体) …
</c:forEach>

例子:

<c:forEach begin="1"  end="10"  var="i"  varStatus="j">
${i} 
<br/>
</c:forEach>
 (2) 集合或数组的遍历

使用<c:forEach>来遍历集合对象或数组的基本用法如下:
<c:forEach items=“对象名” var=“变量” [varStatus=“状态变量”]>
… 标记体(循环体) …
</c:forEach>

例子:

<c:forEach items="sdgsdhs" var="i"  >
${i} 
</c:forEach>

<c:forTokens>标记
用来遍历一个字符串中的单词,单词用指定分隔符隔开。基本用法为:
<c:forTokens items=“字符串” delims=“单词分隔符”
[varStatus=“状态变量”] [begin=“起始位置”]
[end=“结束位置”] Step=“步长值” var=“变量”>
…(循环体)…
</c:forTokens>

例子:

<c:forTokens items="google,runoob,taobao,dsge" delims=","  begin="0"  end="3" step="2" var="name">
   <c:out value="${name}"/><p>
</c:forTokens>

<c:import>标记
将其它文本资源包含到当前页面中。基本用法为:
<c:import url="" [context=""] [var=""] [scope=""] [charEncoding=""]>
… [<c:param>] …
</c:import>

在这里插入图片描述
例子:

<c:import var="data" url="http://www.runoob.com"/>
<c:out value="${data}"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章