目录
EL与JSTL
为什么要使用EL表达式
JSP脚本有哪些不足
代码结构混乱
脚本与HTML混合,容易出错
代码不易于维护
使用EL表达式来优化程序代码,增加程序可读性
<table >
<c:forEach var="news" items="${list}">
<tr><td><c:out value="${news.title}" /></td></tr>
</c:forEach>
</table>
EL语法
EL表达式(Expression Language)
${EL 表达式} 例如:${username}
EL操作符
操作符“.”
获取对象的属性,例如:${news.title}
操作符“[]”
获取对象的属性,例如:${news["title"]}
获取集合中的对象,例如:${newsList[0]}
EL运算符
为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法
关系运算符 | 范例 | 结果 |
---|---|---|
== 或 eq | ${5 == 5}或${5eq 5} | true |
!= 或 ne | ${5 != 5}或${5 ne 5} | false |
< 或 lt | ${3 < 5}或${3 lt5} | true |
> 或 gt | ${3 > 5}或{3 gt 5} | false |
<= 或 le | ${3 <= 5}或${3 le 5} | true |
>= 或 ge | ${3 >= 5}或${3 ge 5} | false |
运算符 | 说明 |
---|---|
( ) | 改变执行的优先级,例如${3(4+5)} |
+,-,*,/,% | 算术运算符,例如${3+2} |
==,!=,>,>=,<,<= | 关系运算符,例如${a==b}或${a eq b} |
&&,||,! | 逻辑运算符,例如${true&&false} |
?: | 条件运算符,例如${a>b?1:2} |
empty | 用于检测变量名是否为空,是否等于NULL,例如${empty name} |
EL功能
取得JavaBean对象的属性
${news.title}
取得数组、List、Map类型对象的元素
${list[0]}
使用各类运算符对原始数据进行简单处理
${totalRecordCount/pageSize}
屏蔽一些常见的异常
${username}
能实现简单的自动类型转换
${news}相当于(News)request.getAttribute("news")
EL访问作用域
request.setAttribute("news", news);
两种方式取数据:
使用Java小脚本:request.getAttribute("news");
使用EL表达式: ${ news } 或者 ${ requestScope.news }
作用域 | Java代码取值 | EL取值 |
---|---|---|
请求作用域 | request.getAttribute("news"); | ${ requestScope.news } |
会话作用域 | session.getAttribute("username"); | ${ sessionScope.username } |
程序作用域 | application.getAttribute("count"); | ${ applicationScope.count } |
页面作用域 | pageContext.getAttribute("userNum"); | ${ pageScope.userNum } |
JSTL介绍
JSTL(JavaServerPages Standard Tag Library)
JSP标准标签库
实现JSP页面中的逻辑控制
JSTL使用步骤
下载jstl.jar和standard.jar包
Index of /dist/jakarta/taglibs/standard/binaries
将这两个包复制到WEB-INF\lib目录
在JSP页面中添加指令
<%@ taglib uri="Oracle Java Technologies | Oracle" prefix="c" %>
JSTL标签分类
标签库名称 | 资源标示符(uri) | 前缀(prefix) |
---|---|---|
核心标签库 | Oracle Java Technologies | Oracle | c |
国际化/格式化标签库 | Oracle Java Technologies | Oracle | fmt |
XML标签库 | Oracle Java Technologies | Oracle | x |
数据库标签库 | Oracle Java Technologies | Oracle | sql |
函数标签库 | Oracle Java Technologies | Oracle | fn |
核心标签库
<%@ taglib uri="Oracle Java Technologies | Oracle" prefix="c" %>
国际化/格式化标签库
<%@ taglib uri="Oracle Java Technologies | Oracle" prefix="fmt" %>
c:out/标签
<c:out value="value" default="default" escapeXml="true|false" />
需要输出显示的表达式value="value"
默认输出显示的值 default="default"
是否对输出的内容进行转义escapeXml="true|false"
设置变量和对象属性
设置变量
<c:set var="name" value= "value" scope="" />
表示变量名称var="name"
表示变量的值value= "value"
存在的作用域scope=""
设置对象属性
<c:set value= "value" target="target" property="propertyName" />
表示属性的值value= "value"
表示对象target="target"
表示对象的属性名称property="propertyName"
c:forEach/标签
c:forEach/迭代标签
实现对集合的遍历
<c:forEach var="varName" items="items" varStatus="varStatus">
……
</c:forEach>
集合中元素的名称 var="varName"
集合对象 items="items"
当前循环的状态信息,例如循环的索引号varStatus="varStatus"
c:if/标签
c:if/条件标签
实现条件的判断
<c:if test="condition" var="varName" scope="scope">
……
</c:if>
判断的结果 var="varName"
判断结果存放的作用域scope="scope"
使用JSTL构建URL
c:url/超链接标签
<c:url value="url" />
c:param/参数标签
<c:param name="name" value="value"/>
c:import/导入标签
<c:import url="URL" />
fmt:formatDate/标签
fmt:formatDate/格式化标签
实现格式化的日期和时间显示
<fmt:formatDate value="date" pattern="yyyy-MM-dd HH:mm:ss"/>
时间对象 value="date"
显示格式 pattern="yyyy-MM-dd HH:mm:ss"
标签名称 | 作用 |
---|---|
<c:out /> | 输出文本内容到out对象,常用于显示特殊字符,显示默认值 |
c:set/ | 在作用域中设置变量或对象属性的值 |
c:remove/ | 在作用域中移除变量的值 |
c:if/ | 实现条件判断结构 |
c:forEach/ | 实现循环结构 |
c:url/ | 构造url地址 |
c:param/ | 在url后附加参数 |
c:import/ | 在页面中嵌入另一个资源内容 |
fmt:formatDate/ | 格式化时间 |
fmt:formatNumber/ | 格式化数字 |