JSP技术的重要功能是用于在浏览器的页面显示数据,那么从某地取出数据就变得十分重要了,于是就诞生了EL表达式。EL表达式的目的就是:取得数据,将其显示在浏览器的页面上!
Table of Contents
什么是EL表达式
第一个EL表达式程序
取值操作
取出4个域对象中存放的值
取出域中所存的数组
取出域中所存的集合
取出域中Map集合的值
输出对象的值
表达式的计算
什么是EL表达式:
EL表达式的核心功能:
写法格式:${表达式 }
尽管在JSP中,也有相应的写法可以取得并输出域对象中的数据,但是其过于冗余和复杂,所以使用EL表达式来使得这种对数据的取得和输出变得容易!
从域中取出数据:
Servlet代码:request.getAttribute(“name”);
JSP脚本:<%=request.getAttribute(“name”)%>
EL表达式替代上面的脚本:${requestScope.name};
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
第一个EL表达式程序
<% //在JSP中写Java代码(在实际开发中要尽量避免)
pageContext.setAttribute("name","kyle"); //向域对象"page"中放一个键值对:key=name, value=kyle
pageContext.setAttribute("age", 23); //向域对象"page"中放一个键值对:key=age,value=23
%>
使用EL表达式从page域对象中取出值:
name: ${pageScope.name }
age: ${pageScope.age }
执行结果:
EL表达式的主要目的就是获得数据并输出,而在Web的回话中,存放数据有四个地方(即四个域对象):page、request、session、application。
EL最主要的作用是获得四大域中的数据,格式${EL表达式}
特性:
取出4个作用域中存放的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
按普通手段取值
<%= pageContext.getAttribute("name")%>
<%= request.getAttribute("name")%>
<%= session.getAttribute("name")%>
<%= application.getAttribute("name")%>
使用EL表达式取出作用域中的值
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
<%@ page language="java" import="java.util.Enumeration" pageEncoding="UTF-8"%>
EL表达式
获取某个参数的请求名:${param.请求名 }
获取该个请求名对应的值:${paramValue.请求名 }
取出域中所存的数组
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<%
String[] a = { "aa", "bb", "cc", "dd" };
pageContext.setAttribute("array", a);
%>
使用EL表达式取出作用域中数组的值
${array[0] }, ${array[1] }, ${array[2] }, ${array[3] }
取出域中所存的集合
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
Insert title here
<%
List list = new ArrayList();
list.add("11");
list.add("22");
list.add("33");
list.add("44");
//pageContext.setAttribute("li", list);
session.setAttribute("li", list);
%>
使用EL表达式取出作用域中集合的值
${li[0] } , ${li[1] },${li[2] },${li[7] }
取出域中Map集合的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
Insert title here
<%
Map map = new HashMap();
map.put("name", "zhangsna");
map.put("age",18);
map.put("address","北京..");
map.put("address.aa","深圳..");
//pageContext.setAttribute("map", map);
application.setAttribute("m", map);
%>
使用EL表达式取出作用域中Map的值
${applicationScope.m.name }, ${m.age }, ${m.address }, ${m["address.aa"] }
EL实现输出对象的值
Student类文件:
package kyle;
public class Student {
private String name1;
private int age;
public String getName() {
return name1;
}
public void setName(String name) {
this.name1 = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
super();
this.name1 = name;
this.age = age;
}
public Student() {
super();
}
}
JSP文件:
<%@ page language="java" import="java.util.*,kyle.*"
pageEncoding="utf-8"%>
从四个域中获取数据
<%
//准备对象
Student student = new Student("eric",20);
//放入域中
pageContext.setAttribute("student1",student); //保持参数的两个名字一致;
%>
<%--使用EL获取对象 --%>
${student1.name} - ${student1.age }
${student1 } //输出的是该类的toString()方法;
<%--
${student1.name} 等价于(点意味着调用getXX()方法,而不是调用该类的属性;故要在Student类里面要对name实现getXx方法)
<%=((Student)pageContext.findAttribute("student1")).getName()%>
--%>
EL表达式计算
<%@ page language="java" import="java.util.*,kyle.*"
pageEncoding="utf-8"%>
EL表达式获取List的值
<%--1)算术表达式 + - * / --%>
${10+5 }
${10*5 }
<%-- 2)比较运算 > < >= <= == != --%>
${10>5 }
${10<5 }
${10!=10 }
<%-- 3)逻辑运算 && || ! --%>
${true && false }
${true || false }
${!false }
<%--4)判空 null 或 空字符串: empty --%>
<%
//String name = "eric";
//String name = null;
String name = ""; //空字符串
pageContext.setAttribute("name",name);
%>
判断null: ${name==null }
判断空字符: ${name=="" }
判空:${name==null || name=="" } //判断是否为空 或者 是否为null;
另一种判空写法: ${empty name } //等价于上一种写法