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(){};
}
<%@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 uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%--JSTL中的 "hello world!" />
set var="a" value="David" />
"${a}" /> --%>
<%
request.setAttribute("user", new User(1, "张三", "1班"));
List list = new ArrayList();
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}
<br />
${List[0].name}
<br/>
${Map["u1"].name}
<br/>
${Map.u1.name }
<br/>
${null}
<%
String str = null;
out.println(str);
%>
<%--JSTL中的 "i" begin="1" end="5" step="2">
"${i}"/>
"1" end="3" step="1" varStatus="i">
${i.index}
"item" items="${List}" varStatus="status" >
a ${status.begin}:${item.name}
--%>
body>
html>
【注意】①,②两处虽然写法不同,但是“.”与“ [ ]”都可以访问对象的属性。
不过,当属性的名字包含有空格,点号等复杂符号时,使用“.”来访问对象的属性将会出现异常。
算术操作符(+,-,*,/,%)
逻辑操作符(&&,||,!或and,or,not)
XML操作符
lt <
le <=
gt >
ge >=
比较操作符(>,>=,<,<=,==,!==)—可以自动转换数据类型
空操作符(empty)//当值为null时返回true
JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库JSTL中,所以在使用这些函数之前必须在JSP中引入标准函数的声明
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:length("Get my length")}
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"]}