E L(Expression Language) 目的:为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
——参考《百度百科》
PS:参考文章:EL表达式_百度百科,参考博客:JSTL EL 详解,参考博客:EL表达式从数组 Map List集合取值
${……}
括号里面的内容就是表达式。
现在页面里面向域中设置一些值
<%
request.setAttribute(“name”,“lisi”);
%>
${name }
<h1>使用EL获取数组的数据h1>
<%
String[] array = {"北京","上海","广州","深圳"};
pageContext.setAttribute("city", array);
%>
<%-- 这里使用${array }得到一个数组对象,要想得到里面的内容,可以使用角标 --%>
${city[0] }
${city[1] }
${city[2] }
使用EL获取list集合的数据
<%
List list = new ArrayList();
list.add(0, "zhangsan");
list.add(1, "lisi");
list.add(2, "wangwu");
pageContext.setAttribute("list", list);
%>
<%-- ${list}得到的是一个数组,然后可以使用数组的方法进行获取数据 --%>
${list[0] }
${list[1] }
${list[2] }
<h2>使用EL获取Map集合的数据h2>
<%
Map<String,String> map = new HashMap();
map.put("name","张三");
map.put("age","18");
map.put("sex","fatboy");
pageContext.setAttribute("map", map);
%>
<%-- ${map }得到的是一条数据(entry),而entry里面是由一些key=value组成 --%>
${map }<br/>
${map.name }<br/>
${map.age }<br/>
${map['name'] }<br/>
package com.pc.domain;
public class Address {
/*javabean规范:
1.实现序列化接口
2.必须提供无参构造
3.需要提供getter和setter方法 (属性由getter和setter方法确定,get后面单词首字母变小写其余不变,自己定义的那些字段可以没有,如果是boolean类型,那么getXXX方法可以是isXXX)*/
private String city;
public Address() {
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
<h1>使用EL获取对象中的数据h1>
<%
Address addr = new Address();
addr.setCity("东京");
pageContext.setAttribute("addr", addr);
%>
${addr }<br/>
${addr.city }<br/>
${addr['city'] }<br/>
使用EL获取对象集合的数据
<%
Address addr1 = new Address();
addr1.setCity("东京");
Address addr2 = new Address();
addr2.setCity("南京");
Address addr3 = new Address();
addr3.setCity("北京");
List list = new ArrayList();
list.add(addr1);
list.add(addr2);
list.add(addr3);
pageContext.setAttribute("list", list);
%>
<%-- ${list[0]}得到的是一个对象,然后使用对象的获取方式获取数据 --%>
${list[0].city }
${list[1].city }
${list[2]['city']}
如果是数组和list集合那么必须使用[]
如果Map集合和对象可以使用[],还可以使用.
当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或以数字开头的符号,就一定要使用 []
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
术语 | 定义 |
---|---|
算术型 | +、-(二元)、*、/、div、%、mod、-(一元) |
逻辑型 | and、&&、or、||、!、not |
关系型 | ==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。 |
空 | empty 空操作符是前缀操作,可用于确定值是否为空(null)。 |
条件型 | A ?B :C。根据 A的结果来赋值 B 或 C,true为B,false为C |
EL执行算数运算
\${1+2 }=${1+2 }
结果为:${1+2 }=3
<h2>EL执行逻辑运算h2>
${3>2&&2<5 }
${3>2 and 2<5 }
结果为:true ture
EL执行关系元素
${5>2 }
${5 gt 2 }
结果为:true true
三元运算符
${5>2?"正确":"错误" }
结果为:正确
<h3>emptyh3>
${empty ""}
${empty list[0] }
${empty null }
${!empty null }
${not empty null }
结果为:true true true false false
术语
|
定义
|
---|---|
pageScope
|
将页面范围的变量名称映射到其值。例如,EL 表达式可以使用
${pageScope.objectName}访问一个 JSP 中页面范围的对象,还可以使用
${pageScope .objectName. attributeName}访问对象的属性。
|
requestScope
|
将请求(Request)范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用
${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用
${requestScope. objectName. attributeName} 访问对象的属性。
|
sessionScope
|
将会话(Session)范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:
${sessionScope. name}
|
applicationScope
|
将应用程序范围,也就是ServletContext的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。
|
<%
pageContext.setAttribute("name", "张三");
request.setAttribute("name", "李四");
session.setAttribute("name", "王五");
application.setAttribute("name", "赵六");
%>
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name }
${pageScope['name'] }
${requestScope["name"] }
${name }
结果为:
张三
李四
王五
赵六
张三
李四
张三
${name}
:默认从pageScope域中查找,如果找到立马显示,如果未找到,依次从requestScope/sessionScope/applicationScope域中去找,直到找到为止,如果均未找到,页面空白!
术语
|
定义
|
---|---|
param
|
将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name)获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
|
paramValues
|
将请求参数名称映射到一个数值数组。它与param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。
|
访问该jsp,带有的查询字符串为username='switch'&password='123456'
<h1>获取请求参数h1>
${param.username }<br/>
${paramValues.username[0] }<br/>
${paramValues.password[0] }<br/>
结果为:
switch
switch
123456
术语
|
定义
|
---|---|
header
|
将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式${header. name} 相当于 request.getHeader(name)。
|
headerValues
|
将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String)获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
|
<h3>获取请求头信息h3>
${header['User-Agent'] }
术语
|
定义
|
---|---|
initParam
|
将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name)获得)。
|
<context-param>
<param-name>usernameparam-name>
<param-value>Switchparam-value>
context-param>
<h3>获取应用初始化参数h3>
${initParam.username }<br/>
术语
|
定义
|
---|---|
cookie
|
将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式
${cookie.name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用
${headerValues. name} 表达式。
|
<h3>获取cookie对象中的数据h3>
<%-- ${cookie.JSESSIONID }得到的是一个cookie对象本身 --%>
${cookie.JSESSIONID.value }
术语
|
定义
|
---|---|
pageContext
|
JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext等。例如,${pageContext.response} 为页面的响应对象赋值。
|
获取pageContext对象中的数据
获取地址:${pageContext.request.remoteAddr }
获取工程路径:${pageContext.request.contextPath }