欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EL表达式

程序员文章站 2022-05-06 07:54:09
...

一. EL表达式简介

1. JSP的核心语法

 JSP表达式 <%=%>和JSP脚本<%  %>。

2. 开发JSP的原则

尽量在JSP页面中少写甚至不写Java代码,使用EL表达式替换掉JSP表达式。

3. EL表达式的作用

EL全名为Expression Language,它主要向浏览器输出域对象中的变量值或表达式计算的结果!因为EL表达式强

制要求使用域对象保存变量或者表达式计算的结果,所以它只能输出域对象中的变量或者结果。

(1) 获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式以从各种类型的web域 中检索java对象、获取数据。(某个web

域 中的对象,访问Javabean的属性、访问list集合、访问map集合、访问数组)

(2) 执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的

逻辑运算。比如:${user==null}。

(3) 获取web开发常用对象:

EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而

获得这些对象中的数据。

(4) 调用Java方法:

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

4. EL表达式语法

${变量或表达式}

二. EL表达式语法

1. 获取数据

(1) 获取基本数据类型变量

EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、

request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,

不是null,而是空字符串)。 

① 从四个域获取:${name}。

② 从指定域获取:${pageScope.name}

域范围:pageScoep / requestScope / sessionScope / applicationScope

③ 实例

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL语法</title>
</head>

<body>
	<%
	 String name = "rose";  
	 //只有把变量放入域中
	 //pageContext.setAttribute("name",name);
	 pageContext.setAttribute("name",name,PageContext.REQUEST_SCOPE); 
	  %>
	<%=name %>
	<br />
	<%-- (1)从四个域中自动搜索  --%>
	EL表达式: ${name }
	<%--  ${name } 等价于<%=pageContext.findAttribute("name")%>  --%>
	<%-- (2)从指定的域中获取数据  --%>
	EL表达式: ${requestScope.name }
	<%--  ${pageScope.name } 等价于<%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%>  --%>
</body>
</html>

运行结果:

EL表达式

(2) 获取对象的属性值

① 实例

package zw_entity;

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();
	}
}

<%@ page language="java" import="java.util.*,zw_entity.*"
	pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL输出不同类型的数据</title>
</head>

<body>
	<%--(1)EL输出对象的属性    --%>
	<%
     	//保存数据
     	Student student = new Student("eric",20);
     	//放入域中
     	pageContext.setAttribute("student",student);
     %>

	<%--使用EL获取对象 --%>
	${student.name} - ${student.age }
	<%--
       ${student.name}等价于(点相当于调用getXX()方法)<%=((Student)pageContext.findAttribute("student")).getName()%>
    --%>
</body>
</html>

② 运行结果:

EL表达式

③ 注意:Student这里的属性是私有的,为什么能访问?因为student.name中的”.”调用的是方法,getName方法。

(3) 获取集合对象List和Map

① 实例:

<%@ page language="java" import="java.util.*,zw_entity.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>EL输出不同类型的数据</title>  
  </head>
  
  <body>
  	<% 
     	//集合List
     	List<Student>  list = new ArrayList<Student>();
     	list.add(new Student("rose",18));
     	list.add(new Student("jack",28));
     	list.add(new Student("lucy",38));
     	//放入域中
     	pageContext.setAttribute("list",list);
     	
     	//Map
     	Map<String,Student> map = new HashMap<String,Student>();
     	map.put("100",new Student("mark",20));
     	map.put("101",new Student("maxwell",30));
     	map.put("102",new Student("narci",40));
     	//放入域中
     	pageContext.setAttribute("map",map);
     	
      %>

       <%--使用EL获取List对象 --%>
       ${list[0].name } - ${list[0].age }<br/>
       ${list[1].name } - ${list[1].age }<br/>
       ${list[2].name } - ${list[2].age }
       <%--
  			list[0]等价于       (中括号相当于调用get(参数)方法)
       		((List)pageContext.findAttribute("list")).get(0)
        --%>
        <hr/>
        <%--使用EL获取Map对象 ,通过key来获取value--%>
        ${map['100'].name } -  ${map['100'].age }<br/>
        ${map['101'].name } -  ${map['101'].age }<br/>
        ${map['102'].name } -  ${map['102'].age }<br/>
  </body>
</html>

② 运行结果:

EL表达式

③ 注意:

EL表达式没有遍历功能,只能一个一个的获取,只有结合标签才可以遍历。

2. 执行运算

(1) 语法:

${运算表达式}

(2) EL表达式支持如下运算符:

EL表达式

EL表达式

(3) empty运算符:检查对象是否为null或“空”。

(4) 实例:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>EL表达式计算</title>  
  </head>
  
  <body>
    <%--(1)算术表达式+  -  *  /--%>
     ${10+5 }<br/>
     ${10*5 }
     <hr/>
     <%--(2)比较运算  >  <  >=  <=  ==   != --%>
     ${10>5 }<br/>
     ${10<5 }<br/>
     ${10!=10 }
     <hr/>
     <%--(3)逻辑运算 &&  ||  ! --%>
     ${true && false }<br/>
     ${true || false }<br/>
     ${!false }<br/>
     <hr/>
      <%--(4)判空    null或 空字符串:  empty --%>
     <%
     	//String name = "eric";
     	//String name = null;
     	String name = "";
     	pageContext.setAttribute("name",name);
      %>
     	 判断null: ${name==null }<br/>
      	 判断空字符串: ${name=="" }<br/>
     	 判空:  ${name==null || name=="" }
     	 另一种判空写法(等价于上面的判空): ${empty name } 
  </body>
</html>

运行结果如下图所示:

EL表达式

3. 获得web开发常用对象

(1) EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。

(2) 语法:${隐式对象名称}可以获得对象的引用。

(3) 11个隐含对象

EL表达式EL表达式

三. EL表达式的注意事项

1. EL表达式是JSP 2.0规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的

WEB服务器。

2. 注意:有些Tomcat服务器如不能使用EL表达式。

(1) 升级成tomcat6。

(2) 在JSP中加入<%@ page isELIgnored="false" %>

3. EL表达式保留关键字

(1) 所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。

(2) 保留关键字

EL表达式