EL即Expression Language(表达式语言),主要用来替代JSP页面中用来做简单运算和显示的代码。EL表达式可以用来显示page、request、session和application中的数据。
EL表达式的语法非常简单:
${ EL exprission },${ bean.name } 或 ${ bean['name'] }
案例:在页面上显示个人信息。
User类代码如下:
package com.test.entity;
public class User {
private String loginID;
private String loginPWD;
private String nickName;
private String tel;
public String getLoginID() {
return loginID;
}
public void setLoginID(String loginID) {
this.loginID = loginID;
}
public String getLoginPWD() {
return loginPWD;
}
public void setLoginPWD(String loginPWD) {
this.loginPWD = loginPWD;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
index.jsp页面代码如下:
<body>
<%
User user = new User();
user.setNickName("李大爷");
session.setAttribute("user", user);
%>
<p style="color:red;">${user.nickName }</p>
</body>
运行效果:
JSTL(JavaServerPages Standard Tag Library)是指JSP标准标签库。
使用JSTL的步骤:
1. 在JSP页面添加JSTL引用。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
2. 使用JSTL标签。常用JSTL标签有if标签和forEach标签。
if标签用于判断条件是否成,与Java中的If语句做用相同。其语法如下:
<c:if test="codition" var="name" scope="applicationArea" >
</c:if>
属性名 | 是否支持EL | 属性类型 | 描述 |
test | true | Boolean | 决定是否处理标签体的内容 |
var | false | String | 用于指定变量名,该变量用于保存test属性的判断结果 |
scope | false | String | 用于指定变量的有效范围,默认值为page。可选值有page、request、session和application |
案例:修改前一篇 文章中的需求,使用if标签。
之前使用的纯JSP的代码实现的登录前后的效果。使用if标签实现,代码如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body>
<c:if test="${empty user}" var="loginState">
<a href="#">登录</a>
<a href="#">注册</a>
</c:if>
<c:if test="${!loginState }">
<a href='#'>${user.loginID }</a>
</c:if>
</body>
forEach标签,用于实现对集合中对象的遍历。语法格式如下:
<c:forEach items=collection var=name begin=start end=end step=count>
</forEach>
属性名 | 是否支持EL | 属性类型 | 描述 |
var | false | Boolean | 决定是否处理标签体的内容 |
item | true | 数组、字符串和集合类型 | 迭代的集合对象 |
varStatus | false | String | 迭代的状态,可以获得迭代自身信息 |
begin | true | int | 如果指定begin属性,则从item的下标为begin的位置开始迭代,如果没有指定begin属性,则从0下标开始迭代 |
end | true | int | 如果指定end属性,就在item的下标为end的位置结束迭代,如果没有指定end属性,将迭代到最后一个下标位置。迭代的步长默认为1 |
step | true | int |
案例:在页面上显示所有歌手。
数据库中的信息如下:
创建singerList.jsp页面,代码如下(可以自己创建集合,添加临时数据,效果相同):
SingerService singerService = new SingerService();
List<Singer> list = singerService.selectAll();
session.setAttribute("singerList", list);
<body>
<c:forEach items="${singerList }" var="singer" varStatus="status">
<p ${status.index%2==1?"style='background-color: #aa8a0c;'":"" }>${singer.singerName } ${singer.birthday }</p>
</c:forEach>
</body>
运行结果如下: