一:EL 表达式
1、EL 表达式用于获取数据,在JSP页面中可以使用 ${ 标识符 } 的形式,通知JSP 引擎调用 pageContext.findAttribute() 方法,以标识符为关键字从各个域对象中获取对象,如果域对象中不存在标识符所对应的对象,则返回结果为“”(注意,不是NULL)。
实例:使用EL 表达式获取 request、session、application 域中的数据。
2、EL 表达式也可以使用${ customerBean.name } 的形式来访问JavaBean 对象的属性
实例:使用EL 表达式获取Bean 属性
3、结合 JSTL 标签,EL 表达式也可以轻松获取各个集合中的元素。
实例:使用EL 表达式获取List、Map 集合中的元素
4、EL 表达式也可以使用类如 ${ 1==1 } 的形式进行简单的逻辑判断。
二:范例
Person.java
package com.haizhu.domain;
public class Person {
private String name;
private int age;
public Person(){
}
public Person(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
ELDemo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.haizhu.domain.Person"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'ELDemo.jsp' starting page</title>
</head>
<body>
<%
// 假设这个是从Servlet返回的数据,通过request 带给 JSP
String data = "Hello World !";
request.setAttribute("myData", data);
%>
<!-- 页面接收的时候就可以使用 EL 表达式进行接收 -->
<!-- 原理:pageContext.findAttribute("myData"),查找各个域的顺序是,
page--request--session--appliaction,最后都没找到的话就返回一个“”空字符串 -->
${myData }
<br><br>*********************************************************************<br><br>
<%
Person p = new Person();
p.setName("Haizhu");
request.setAttribute("person", p);
%>
${person.name}
<br><br>*********************************************************************<br><br>
<%
List<Person> list = new ArrayList<Person>();
list.add(new Person("aaList"));
list.add(new Person("bbList"));
list.add(new Person("ccList"));
request.setAttribute("list", list);
%>
<!-- 这里是单个取值,要想迭代的话需要配合 JSTL 使用 -->
${list[0].name } <!-- 注意,这里的list 和 上面声明并实例化的list 不是同一个 list, -->
${list[1].name } <!-- 只是在 setAttribute 的时候,将他们命名为同一个名字 -->
${list[2].name }
<br><br>*********************************************************************<br><br>
<%
Map<String, Person> map = new HashMap<String, Person>();
map.put("a",new Person("aaMap"));
map.put("b",new Person("bbMap"));
map.put("c",new Person("ccMap"));
map.put("1",new Person("11111"));
request.setAttribute("map", map);
%>
${map.a.name }
${map.b.name }
${map.c.name }
<br>
<!-- 一般情况下按照上面的方法进行取值,当不能取出的时候(比如当key是数字的时候),可以使用下面的方式: -->
${map['a'].name }
${map['b'].name }
${map['c'].name }
${map['1'].name }
<!--
在 java 程序中,需要map.get(Key) 的方法进行取值
System.out.println(map.get("a"));
System.out.println(map.get("b"));
System.out.println(map.get("c"));
-->
<br><br>*********************************************************************<br><br>
<!-- 下面这个方法,取得当前WEB 应用的项目的路径(名称) -->
${pageContext.request.contextPath }
<br>
<!-- 这个就表示是本项目根目录下的index.jsp 文件 -->
<a href="${pageContext.request.contextPath}/index.jsp">点我</a>
</body>
</html>
结果:
Hello World !
*********************************************************************
Haizhu
*********************************************************************
aaList bbList ccList
*********************************************************************
aaMap bbMap ccMap
aaMap bbMap ccMap 11111
*********************************************************************
/JspDemo
点我
其中“点我”的跳转路径是:
<a href="/JspDemo/index.jsp">点我</a>
问:EL 表达式不需要标签声明什么的?可以直接使用?