JSTL仅是JSP表达式语言,而EL既是HTML也是JSP表达式语言,全称是Expression Language。
基本语法格式:
${ EL Expression}
${"Hello world"} //输出字符串常量
${str} //输出字符串变量str的值
${3+2} //输出3+2的结果
package demo;
/**
* 定义一个用户类
* @author Administrator
*
*/
public class User {
private int id;
private String name;
private String classname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public User(int id, String name, String classname) {
this.id = id;
this.name = name;
this.classname = classname;
}
public User(){};
}
<!--这是一个jsp文件 -->
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="demo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--以下这两个taglib引用不可少 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--JSTL中的 <c:out value="hello world!" />
<c:set var="a" value="David" />
<c:out value="${a}" /> --%>
<%
request.setAttribute("user", new User(1, "张三", "1班"));
List<User> list = new ArrayList<User>();
list.add(new User(2, "李四", "2班"));
list.add(new User(1, "张三", "1班"));
list.add(new User(3,"王五","3班"));
pageContext.setAttribute("List", list);
Map<String,User>map=new HashMap<String,User>();
map.put("u1", new User(3,"王五","3班"));
pageContext.setAttribute("Map", map);
%>
${user.classname}<!-- 默认是调用User类中的get方法 -->
<br />
${List[0].name}
<br/>
${Map["u1"].name}<!-- ①-->
<br/>
${Map.u1.name }<!-- ②-->
<br/>
${null}<!--不显示,只有通过如下方式 -->
<%
String str = null;
out.println(str);
%>
<%--JSTL中的 <c:forEach var="i" begin="1" end="5" step="2">
<c:out value="${i}"/>
</c:forEach>
</br>
<c:forEach begin="1" end="3" step="1" varStatus="i">
<li> ${i.index}</a></li>
</c:forEach>
</br>
<c:forEach var="item" items="${List}" varStatus="status" >
a ${status.begin}:${item.name}
</c:forEach> --%>
</body>
</html>
【注意】①,②两处虽然写法不同,但是“.”与“ [ ]”都可以访问对象的属性。
不过,当属性的名字包含有空格,点号等复杂符号时,使用“.”来访问对象的属性将会出现异常。
操作符
算术操作符(+,-,*,/,%)
逻辑操作符(&&,||,!或and,or,not)
XML操作符
lt <
le <=
gt >
ge >=
比较操作符(>,>=,<,<=,==,!==)—可以自动转换数据类型
空操作符(empty)//当值为null时返回true
EL中的函数
JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库JSTL中,所以在使用这些函数之前必须在JSP中引入标准函数的声明
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:length("Get my length")}<!--获取一个字符串的长度-->
下面是JSTL中自带的方法列表以及其描述
EL隐含对象
EL支持下表列出的隐含对象:
pageContext对象
是JSP中pageContext对象的引用。通过pageContext对象,可以访问request对象。比如,访问request对象传入的查询字符串:
${pageContext.request.queryString}
Scope对象
pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。
比如,需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。
param和paramValues对象
它们用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。
举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}
接下来的例子表明了如何访问request中的username参数:
<%
request.setAttribute("username","jack");
%>
<p>${param["username"]}</p>
【注】param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。
header和headerValues对象
它们是用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent}
,或者${header["user-agent"]}