EL和JSTL的作用:使用开发视图层更容易,JSP页面中不出现Java代码。
JSP标准动作的局限性:
只能操作JavaBean属性
不能自动类型转换
不能进行逻辑判断
而使用EL+JSTL可以弥补这点
关于EL表达式看上一篇博文。
二、JSTL
JavaServer Page standard Tag Library,JSP标准标签函数库。
JSTL 1.1必须在支持Servlet 2.4和JSP 2.0以上版本的Container中使用,如Tomcat 5以上版本。使用必须导入URI。
JSTL 1.1包含两个jar包:jstl.jar和standard.jar。
JSTL提供的标签库分五大类:
JSTL | 前缀 | URI |
核心标签库(Core tag library) | c | http://java.sun.com/jsp/jstl/core |
I18N格式标签库(I18N-capable formatting) | fmt | http://java.sun.com.jsp/jstl/fmt |
SQL标签库(SQL tag library) | sql | http://java.sun.com/jsp/jstl/sql |
XML标签库(XML tag library) | xml | http://java.sun.com.jsp/jstl/xml |
函数标签库(Function tag library) | fn | http://java.sun.com/jsp/jstl/funcions |
注意:JSTL 1.1的URI中有/jsp,而JSTL1.0中没有,不要写错路径。
导入核心标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
1、核心标签库
核心标签库主要包括:基本输入输出,流程控制,迭代,URL操作。
表达式操作(输入输出):out,set,remove,catch
流程控制:if,chose(when,otherwise)
迭代操作:forEach,forTokens
URL操作:import,url,redirect
1)、表达式操作
out:显示数据的内容
<c:out value="" default="" escapeXml="true|false" />
value:要显示的值
default:默认值
escapeXml:是否转换特殊字符
如果没有指定default,而value值为null时,显示空字符串。
如: <c:out value="${sessionScope.loginUser.username }" default="您还没有登录" />
set:将变量存储在JSP范围或JavaBean属性中。
<c:set var="" value="" scope="" target="" property=""/>
var:变量名称
value:被存储的值
scope:范围
target:为一个JavaBean或Map对象
property:指定target对象的属性
remove:移除变量
<c:remove var="" scope=""/>
var:移除的变量名称
scope:范围
如果没有指定范围,则移除所有范围内相同名称的变量。
catch:处理异常
<c:catch var="">
//发生异常的代码
</c:catch>
将会发生异常的代码包围起来,当发生异常时,将错误信息存储在var指定的变量中。只有catch标签内的代码中止执行,其余部分将继续完成。
2、流程控制
if:
<c:if test="" var="" scope="">
//代码
</c:if>
test:如果表达式执行结果为true,则执行本体内的代码,否则不执行。如果要结果为假时执行,则加!。
如:
<c:if test="${ 1==1}">
结果为真。
</c:if>
choose:相当于switch语句块
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
when和otherwise必须在choose之间,when必须在otherwise之前
可以有1个或多个when语句块,可以有0个或多个otherwise块
when块必须有test属性,当有几个when为真时,只有第一个执行。
如:
<c:choose>
<c:when test="true">
when1
</c:when>
<c:when test="true">
when2
</c:when>
<c:when test="false">
when3
</c:when>
<c:otherwise>
otherwise
</c:otherwise>
</c:choose>
foreach:迭代
<c:forEach var="" items="" begin="" end="" step="" varStatus="">
</c:forEach>
var:存放当前元素的变量
items:被迭代的集合对象,数组,list,map等等
begin:开始位置
end:结束位置
step:步长
varStatus:存放当前元素的相关信息。
示例:
<center>
<c:forEach var="i" begin="1" end="10">
<c:forEach begin="1" end="${2*i-1 }">*</c:forEach>
<br />
</c:forEach>
</center>
<table class="indexTable">
<c:forEach var="article" items="${sessionScope.type1Map}" end="3">
<tr>
<td width="55%" align="center">
<a href="#">${article.value.title}</a>
</td>
<td width="45%" align="center">
[${fn:substring(article.value.writeDate,0,16) }]
</td>
</tr>
</c:forEach>
</table>
注意:
如果有step,则必须大于0,否则出异常。
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: 'step' <= 0
如果有begin,则必须大于等于0
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: 'begin' < 0
当begin大于items的大小时,迭代不执行。
items为空时,迭代不执行。
当items为Map时,使用var.value.xxx的方法取出value中的值。
2、I18N格式标签库
用于格式化输出,可实现国际化格式输出等。
主要包括:国际化,消息,数字日期格式化。
数字格式化:
如:
<fmt:formatNumber value="12" pattern="0.00"/>
输出:12.00
3、SQL标签库(不推荐使用)
主要包含:setDataSource,query,update,param等
4、使用函数标签库
引入标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
使用标签截取字符串:
${fn:substring("xxxxxxx",0,5) }
5、使用fmt格式化日期
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:formatDate var="d" type="date" value="${now}"/>
now : ${now}
d : ${d}