欢迎光临
我们一直在努力

JSP中EL表达式笔记

1.1 EL表达式概述

1)基本概念

EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

2)基本语法

EL表达式的语法格式非常简单,写为 ${表达式内容}

例如:在浏览器中输出请求域中名称为message的内容。

假定,我们在请求域中存入了一个名称为message的数据(request.setAttribute(“message”,”EL”);),此时在jsp中获取的方式,如下表显示:

Java代码块JSP表达式EL表达式
<% String message = (String)request.getAttribute(“message”); out.write(message); %><%=request.getAttribute(“message”)%>${message}

通过上面我们可以看出,都可以从请求域中获取数据,但是EL表达式写起来是最简单的方式。这也是以后我们在实际开发中,当使用JSP作为视图时,绝大多数都会采用的方式。

1.2 EL表达式的入门案例

第一步:创建JavaWeb工程

第二步:创建jsp页面

第三步:在JSP页面中编写代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>EL表达式入门案例</title>
 </head>
 <body>
  <%--使用java代码在请求域中存入一个名称为message的数据--%>
  <% request.setAttribute("message","Expression Language");%>

  Java代码块获取:<% out.print(request.getAttribute("message"));%>
   <br/>
  JSP表达式获取:<%=request.getAttribute("message")%>
   <br/>
  EL表达式获取:${message}
 </body>
</html>

第四步:部署工程

第五步:运行测试

Java代码块获取:Expression Language
JSP表达式获取:Expression Language
EL表达式获取:Expression Language

1.3 EL表达式基本用法

在前面的概述介绍中,我们介绍了EL表达式的作用,它就是用于获取数据的,那么它是从哪获取数据呢?

1)获取四大域中的数据

它只能从四大域中获取数据,调用的就是findAttribute(name,value);方法,根据名称由小到大逐个域中查找,找到就返回,找不到就什么都不显示。

它可以获取对象,可以是对象中关联其他对象,可以是一个List集合,也可以是一个Map集合。具体代码如下:

创建两个实体类,User和Address

User

/**
* 用户的实体类
*/
public class User implements Serializable{

private String name = "达维营";
private int age = 18;
private Address address = new Address();

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;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}

Address

/**
* 地址的实体类
*/
public class Address implements Serializable {

private String province = "北京";
private String city = "昌平区";
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}

JSP代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.dvy.domain.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL入门</title>
</head>
<body>
<%--EL表达式概念:
它是Expression Language的缩写。它是一种替换jsp表达式的语言。
EL表达式的语法:
${表达式}
表达式的特点:有明确的返回值。
EL表达式就是把内容输出到页面上
EL表达式的注意事项:
1.EL表达式没有空指针异常
2.EL表达式没有数组下标越界
3.EL表达式没有字符串拼接
EL表达式的数据获取:
它只能在四大域对象中获取数据,不在四大域对象中的数据它取不到。
它的获取方式就是findAttribute(String name)
--%>
<br/>-----------获取对象数据---------------------<br/>
<% //1.把用户信息存入域中
User user = new User();
pageContext.setAttribute("u",user);
%>
${u}===============输出的是内存地址<%--就相当于调用此行代码<%=pageContext.findAttribute("u")%> --%><br/>
${u.name}<%--就相当于调用此行代码<% User user = (User) pageContext.findAttribute("u");out.print(user.getName());%> --%><br/>
${u.age}
<br/>-----------获取关联对象数据------------------<br/>
${u.address}==========输出的address对象的地址<br/>
${u.address.province}${u.address.city}<br/>
${u["address"]['province']}
<br/>-----------获取数组数据---------------------<br/>
<% String[] strs = new String[]{"He","llo","Expression","Language"};
pageContext.setAttribute("strs", strs);
%>
${strs[0]}==========取的数组中下标为0的元素<br/>
${strs[3]}
${strs[5]}===========如果超过了数组的下标,则什么都不显示<br/>
${strs["2"]}=========会自动为我们转换成下标<br/>
${strs['1']}
<br/>-----------获取List集合数据-----------------<br/>
<% List<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
pageContext.setAttribute("list", list);
%>
${list}<br/>
${list[0] }<br/>
${list[3] }<br/>
<br/>-----------获取Map集合数据------------------<br/>
<% Map<String,User> map = new HashMap<String,User>();
map.put("aaa",new User());
pageContext.setAttribute("map", map);
%>
${map}<br/>
${map.aaa}<%--获取map的value,是通过get(Key) --%><br/>
${map.aaa.name}${map.aaa.age}<br/>
${map["aaa"].name }
</body>
</html>

运行结果如下:

-----------获取对象数据---------------------
com.example.tomcatweb.User@6a50fd38===============输出的是内存地址
达维营
18
-----------获取关联对象数据------------------
com.example.tomcatweb.Address@c1da3a6==========输出的address对象的地址
北京昌平区
北京
-----------获取数组数据---------------------
He==========取的数组中下标为0的元素
Language ===========如果超过了数组的下标,则什么都不显示
Expression=========会自动为我们转换成下标
llo
-----------获取List集合数据-----------------
[AAA, BBB, CCC, DDD]
AAA
DDD
​
-----------获取Map集合数据------------------
{aaa=com.example.tomcatweb.User@5912e4d3}
com.example.tomcatweb.User@5912e4d3
达维营18
达维营

2)EL表达式的注意事项

在使用EL表达式时,它帮我们做了一些处理,使我们在使用时可以避免一些错误。它没有空指针异常,没有数组下标越界,没有字符串拼接。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>EL表达式的注意事项</title>
 </head>
 <body>
  <%--EL表达式的三个没有--%>
  第一个:没有空指针异常<br/>
  <% String str = null;
      request.setAttribute("testNull",str);
  %>
  ${testNull}
   <hr/>
  第二个:没有数组下标越界<br/>
  <% String[] strs = new String[]{"a","b","c"};
      request.setAttribute("strs",strs);
  %>
  取第一个元素:${strs[0]}
  取第六个元素:${strs[5]}
   <hr/>
  第三个:没有字符串拼接<br/>
  <%--${strs[0]+strs[1]}--%>
  ${strs[0]}+${strs[1]}
 </body>
</html>

3)EL表达式的使用细节

EL表达式除了能在四大域中获取数据,同时它可以访问其他隐式对象,并且访问对象有返回值的方法.

4)EL表达式的运算符

EL表达式中运算符如下图所示,它们都是一目了然的:

关系运算符说明范例结果
== 或 eq等于${ 5 == 5} 或 ${ 5 eq 5 }true
!= 或 ne不等于${ 5 != 5} 或 ${ 5 ne 5 }false
< 或 lt小于${ 3 < 5} 或 ${ 3 lt 5 }true
> 或 gt大于${ 3 > 5} 或 ${ 3 gt 5 }false
<= 或 le小于等于${ 3 <= 5} 或 ${ 3 le 5 }true
>= 或 ge大于等于${ 3 >= 5} 或 ${ 3 ge 5 }false

逻辑运算

逻辑运算符说明范例结果
&& 或 and交集${ A && B} 或 ${ A and B }true / false
|| 或 or并集${ A || B} 或 ${ A or B }true / false
! 或 not${ !A } 或 ${ not A }true / false

但是有两个特殊的运算符,使用方式的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.dvy.domain.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL两个特殊的运算符</title>
</head>
<body>
<%--empty运算符:
它会判断:对象是否为null,字符串是否为空字符串,集合中元素是否是0个
--%>
<% String str = null;
 String str1 = "";
 List<String> slist = new ArrayList<String>();
 pageContext.setAttribute("str", str);
 pageContext.setAttribute("str1", str1);
 pageContext.setAttribute("slist", slist);
%>
${empty str}============当对象为null返回true<br/>
${empty str1 }==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)<br>
${empty slist}==========当集合中的元素是0个时,是true
<hr/>
<%--三元运算符
条件?真:假
--%>
<% request.setAttribute("gender", "female"); %>
<input type="radio" name="gender" value="male" ${gender eq "male"?"checked":""} >男
<input type="radio" name="gender" value="female" ${gender eq "female"?"checked":""}>女
</body>
</html>

运行结果下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   <title>EL两个特殊的运算符</title>
</head>
<body>


true============当对象为null返回true<br/>
true==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)<br>
true==========当集合中的元素是0个时,是true
<hr/>


<input type="radio" name="gender" value="male"  >男
<input type="radio" name="gender" value="female" checked>女
</body>
</html>

1.4 EL表达式的11个隐式对象

1)隐式对象介绍 EL表达式也为我们提供隐式对象,可以让我们不声明直接来使用,十一个对象见下表,需要注意的是,它和JSP的隐式对象不是一回事:

EL中的隐式对象类型对应JSP隐式对象备注
PageContextJavax.serlvet.jsp.PageContextPageContext完全一样
ApplicationScopeJava.util.Map没有应用层范围
SessionScopeJava.util.Map没有会话范围
RequestScopeJava.util.Map没有请求范围
PageScopeJava.util.Map没有页面层范围
HeaderJava.util.Map没有请求消息头key,值是value(一个)
HeaderValuesJava.util.Map没有请求消息头key,值是数组(一个头多个值)
ParamJava.util.Map没有请求参数key,值是value(一个)
ParamValuesJava.util.Map没有请求参数key,值是数组(一个名称多个值)
InitParamJava.util.Map没有全局参数,key是参数名称,value是参数值
CookieJava.util.Map没有Key是cookie的名称,value是cookie对象

1.5 注意:

${id}表示会从作用域中取得数据。如果没有在EL表达式中指明它会默认的从【JavaWeb中的四个Scope】由小到大寻取,即按照page、request、session、application的顺序寻取。参照如下:

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » JSP中EL表达式笔记

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址