Expression Language
表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。格式为
${表达式}
EL表达式输出Bean的普通属性、数组属性、List集合属性、map集合属性。
//Person测试类 注意到Person类中没有age属性,但是写了一个public int getAge()方法
package bean;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
@author Forrestyu
@create 2021-04-18 20:29
*/
public class Person {
private String name;
private String[] phones;
private List
private Map
public int getAge() {
return 18;
}
public Person() {
}
public Person(String name, String[] phones, List
this.name = name;
this.phones = phones;
this.cities = cities;
this.map = map;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getPhones() {
return phones;
}
public void setPhones(String[] phones) {
this.phones = phones;
}
public List
return cities;
}
public void setCities(List
this.cities = cities;
}
public Map
return map;
}
public void setMap(Map
this.map = map;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", phones=" + Arrays.toString(phones) +
", cities=" + cities +
", map=" + map +
'}';
}
}
//el.jsp
<%@ page import="bean.Person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Forrestyu
Date: 2021/4/18
Time: 20:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
map.put("key4","value4");
person.setMap(map);pageContext.setAttribute("p",person);
%>
输出Person:${ p }<br/>
输出Person的name属性:${ p.name }<br/>
输出Person的phones数组属性值:${ p.phones[0] }<br/>
输出Person的cities集合中的元素值:${ p.cities }<br/>
输出Person的List集合中的个别元素值:${ p.cities[1] }<br/>
输出Person的Map集合:${ p.map }<br/>
输出Person的Map集合个别元素值:${ p.map[3] }<br/>
输出Person的age属性:${ p.age }<br/>
注意到这里p.属性其实是在类中找到相应的getXxx方法,并不是单纯的找该属性的值。由最后一个age属性可以看出来
除了和java相同的关系运算、逻辑运算、算数运算、三元运算之外。还提供了:
empty运算,使用方法为:
&{ empty variable }
来判断该变量是否为空。
"."运算和"[]"运算
比如属性值key中含有.-+等特殊字符,就需要使用[]
${ map.a.a.a }
其实是属性key是a.a.a,但此时并不能解析出来,需要${ map.['a.a.a'] }
这是EL表达式中自己定义的,可以直接使用
变量
类型
作用
pageContext
PageContextImpl
它可以获取 jsp 中的九大内置对象
pageScope
Map
它可以获取 pageContext 域中的数
requestScope
Map
它可以获取 requestContext 域中的数
sessionScope
Map
它可以获取 sessionContext 域中的数
applicationScope
Map
它可以获取 applicationContext 域中的数
param
Map
它可以获取请求参数的值
paramValues
Map
它也可以获取请求参数的值,获取多个值的时候使用。
header
Map
它可以获取请求头的信息
headerValues
Map
它可以获取请求头的信息,它可以获取多个值的情况
cookie
Map
它可以获取当前请求的 Cookie 信息
initParam
Map
它可以获取在 web.xml 中配置的上下文参数
EL获取四个特定域中的属性
<%
pageContext.setAttribute("key1", "pageContext1");
request.setAttribute("key1", "request");
session.setAttribute("key1", "session");
application.setAttribute("key1", "application");
%>
${ pageScope.key1 }
${ requestScope.key1 }
${ sessionScope.key1 }
${ applicationScope.key1 }
pageContext的作用
一般用来获取协议、服务器IP、服务器端口、工程路径、请求方法等等;操作jsp的九大内置对象
<%=request.getScheme() %>
//原本需要使用getXxx()
<%
pageContext.setAttribute("req", request);
%>
1.协议: ${ req.scheme }
2.服务器 ip:${ pageContext.request.serverName }
3.服务器端口:${ pageContext.request.serverPort }
4.获取工程路径:${ pageContext.request.contextPath }
5.获取请求方法:${ pageContext.request.method }
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }
7.获取会话的 id 编号:${ pageContext.session.id }
其他隐含对象的使用
//这里测试用的请求参数为http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=kkk&password=666666&hobby=java&hobby=cpp
输出请求参数 username 的值:${ param.username }
输出请求参数 password 的值:${ param.password }
输出请求参数 username 的值:${ paramValues.username[0] }
输出请求参数 hobby 的值:${ paramValues.hobby[0] }
输出请求参数 hobby 的值:${ paramValues.hobby[1] }
输出请求头【User-Agent】的值:${ header['User-Agent'] }
输出请求头【Connection】的值:${ header.Connection }
输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] }
获取 Cookie 的名称:${ cookie.JSESSIONID.name }
获取 Cookie 的值:${ cookie.JSESSIONID.value }
EL表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。
JSTL的使用步骤如下:
先导入 jstl 标签库的 jar 包。
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
、第二步,使用 taglib 指令引入标签库。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用:
<c:set/>:往域中保存数据
scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域
var 属性设置 key 是多少
value 属性设置值
<c:set scope="" var="" value="" />
<c:if/>
if 标签用来做 if 判断。
test 属性表示判断的条件(使用EL表达式输出)
<c:if test=""/>
<%--
<c:choose> <c:when> <c:otherwise>标签
作用:多路判断。跟 switch ... case .... default 非常接近
choose 标签开始选择判断
when 标签表示每一种判断情况
test 属性表示当前这种判断情况的值
otherwise 标签表示剩下的情况
<c:choose> <c:when> <c:otherwise>标签使用时需要注意的点:
1、标签里不能使用 html 注释,要使用 jsp 注释
2、when 标签的父标签一定要是 choose 标签
--%>
<c:foreach/>
items 表示遍历的集合
var 表示遍历到的数据
begin 表示遍历的开始索引值
end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态
手机扫一扫
移动阅读更方便
你可能感兴趣的文章