EL&JSTL
EL简介
- 全称:Expression Language,翻译过来叫表达式语言
- 格式:${表达式}
- 作用:主要用来获取域对象中的属性值
- EL表达式默认进行全域查找
- 先从page域中开始查找,找到后直接返回,不再去其他域中查找,如果找不到再去request域中查找,以此类推…
- 如果最终在application域中也找不到则什么也不输出
- EL给我们提供了四个Scope对象,用来精确获取指定域中的属性值,这四个Scope对象相当于将四个域对象中的域单独拿了出来
- pageScope
- requestScope
- sessionScope
- applicationScope
- 通过EL表达式获取JavaBean的属性值
- 通过对象.属性名的方式获取JavaBean的属性值,其实调用的是属性对应的get方法
- 例如:${requestScope.emp.name},调用的是request域中的emp对象所对应的类中的getName()方法
- 只要域中对象所对象的类中有getXxx方法,我们就可以通过对象.xxx(get后面单词的首字母小写)的方式获取该方法的返回值
- 例如:${requestScope.emp.gender },request域中的emp对象所对应的类只要有getGender()方法就可以获取getGender()方法的返回值,不需要有gender这个属性
- 如果域中对象的属性还是一个对象,可以通过一直点的方式获取属性值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%--
EL的全称:Expression Language,表达式语言
格式:${表达式}
作用:主要用来获取域对象中的属性值
EL查找的规则:默认是四个域都查找
先从page域中开始查找,找到后直接返回,不再去其他域中查找;
如果在page域中找不到,再去request域中查找,也是找到后直接返回,不再去其他域中查找,以此类推...
最后如果在application域中也找不到,则什么也不输出
EL给我们提供了四个Scope对象,用来精确获取指定域中的属性值
pageScope
获取page域中的属性值
requestScope
获取request域中的属性值
sessionScope
获取session域中的属性值
applicationScope
获取application域中的属性值
通过EL表达式获取JavaBean的属性值
通过 对象.属性名 的方式获取,注意:调用的是对应的get方法
--%>
<%
Date date = new Date();
pageContext.setAttribute("date",date+"-");
request.setAttribute("date",date+"--");
session.setAttribute("date",date+"---");
application.setAttribute("date",date+"----");
//创建Employee对象
Employee employee = new Employee(1,"张三",new Department(1001,"小卖部"));
//将employee放到page域中
pageContext.setAttribute("emp",employee);
%>
通过JSP表达式获取域中的属性值:<%=pageContext.getAttribute("date")%><br>
通过EL表达式获取当前的时间:${date}<br>
通过EL表达式获取request域中的时间:${requestScope.date}<br>
通过EL表达式获取employee对象的name属性值:${emp.name}<br>
通过EL表达式获取employee对象的getAddress方法的返回值:${emp.address}<br>
通过EL表达式获取employee对象的dept属性的name属性值:${emp.dept.name}<br>
</body>
</html>
EL中的11个隐含对象
- 一个我们比较熟悉的
- pageContext
- 类型:PageContext
- 它既是JSP的隐含对象,也是EL的隐含对象
- 作用:通过它可以获取JSP中其他8个隐含对象
- 四个Scope对象
- pageScope
- 类型:Map<String , Object>
- 作用:获取page域中的属性值
- requestScope
- 类型:Map<String , Object>
- 作用:获取request域中的属性值
- sessionScope
- 类型:Map<String , Object>
- 作用:获取session域中的属性值
- applicationScope
- 类型:Map<String , Object>
- 作用:获取application域中的属性值
- 其他六个隐含对象
- param
- 类型:Map<String , String>
- 作用:获取请求参数
- paramValues
- 类型:Map<String , String[]>
- 作用:获取请求参数中一个键对应多个值的情况
- header
- 类型:Map<String , String>
- 作用:获取请求头中的信息
- headerValues
- 类型:Map<String , String[]>
- 作用:获取请求头中一个键对应多个值的情况
- cookie
- 类型:Map<String , Cookie>
- 作用:根据Cookie对象的名字获取对应的Cookie对象
- initParam
- 类型:Map<String , String>
- 作用:获取当前Web应用的初始化参数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL的隐含对象</title>
</head>
<body>
<%--
EL中一共有11个隐含对象:
一个我们比较熟悉的
pageContext
类型:PageContext
作用:通过它可以获取JSP中其他八个隐含对象
它既是jsp的隐含对象,也是EL的隐含对象;在JSP和EL中可以直接使用,但是如果在EL中
要使用JSP的其他八个隐含对象,需要通过pageContext获取
四个Scope对象
pageScope
类型:Map<String , Object>
作用:获取page域中的属性值
requestScope
类型:Map<String , Object>
作用:获取request域中的属性值
sessionScope
类型:Map<String , Object>
作用:获取session域中的属性值
applicationScope
类型:Map<String , Object>
作用:获取application域中的属性值
其他六个隐含对象
param
类型:Map<String , Stirng>
作用:获取请求参数
paramValues
类型:Map<String , Stirng[]>
作用:获取请求参数中一个键对应多个值的情况
header
类型:Map<String , Stirng>
作用:获取请求头中的信息
headerValue
类型:Map<String , Stirng[]>
作用:获取请求头中一个键对应多个值的情况
cookie
类型:Map<String , Cookie>
作用:根据Cookie的名字获取对应的Cookie对象
initParam
类型:Map<String , String>
作用:获取当前Web应用的初始化参数
--%>
通过JSP表达式获取项目的虚拟路径:<%=request.getContextPath()%><br>
通过EL表达式的隐含对象pageContext获取项目的虚拟路径:${pageContext.request.contextPath}<br>
通过EL表达式的隐含对象param获取请求参数:${param.username}<br>
通过EL表达式的隐含对象header获取请求头中的信息:${header['User-Agent']}<br>
通过EL表达式的隐含对象cookie获取对应的Cookie对象:${cookie.JSESSIONID}<br>
通过EL表达式的隐含对象initParam获取当前Web应用的初始化参数:${initParam.encoding}<br>
</body>
</html>
JSTL简介
- 全称:JSP Standard Tag Library,翻译过来叫JSP的标准标签
- 标签库的分类
- 核心标签库我
- 函数标签库
- 需要结合EL表达式使用,里面定义了一些对字符串的操作(对字符串的截取、替换等)
- 格式化标签库
- sql标签库
- xml标签库
- 使用标签库需要导入以下两个jar包
- taglibs-standard-impl-1.2.5.jar
- taglibs-standard-spec-1.2.5.jar
- 使用c标签需要通过taglib指令将标签导入到页面中
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用的标签
<%--
1.set标签:用来向域中设置属性值,默认添加到page域中
var属性:用来指定向域中设置属性值的key
value属性:用来指定向域中设置的属性值
scope属性:用来指定放到那个域中,可选值有page、request、session、application
--%>
<c:set var="star" value="苍老师" scope="page"></c:set>
<c:set var="star" value="贾老师" scope="request"></c:set>
<c:set var="star" value="沈老师" scope="session"></c:set>
<c:set var="star" value="小泽老师" scope="application"></c:set>
page域对象中的属性值是:${pageScope.star}<br>
request域对象中的属性值是:${requestScope.star}<br>
session域对象中的属性值是:${sessionScope.star}<br>
application域对象中的属性值是:${applicationScope.star}<br>
<%--
2.remove标签:用来移除域中的属性值,默认全域移除,即四个域中都会移除
var属性:用来指定要移除的域中的属性的key
scope属性:用来指定移除那个域中的属性值
--%>
<c:remove var="star" scope="page"></c:remove>
<h1>移除之后再次获取域中的属性值</h1>
page域对象中的属性值是:${pageScope.star}<br>
request域对象中的属性值是:${requestScope.star}<br>
session域对象中的属性值是:${sessionScope.star}<br>
application域对象中的属性值是:${applicationScope.star}<br>
<%--
1.if标签:相当于Java中的if条件判断
test属性:用来接收一个布尔类型的值,通常是通过EL表达式获得,当值是true时才执行标签体中的内容
--%>
<%
int age = 5;
pageContext.setAttribute("age",age);
%>
<c:if test="${age < 18}">
少儿不宜!
</c:if>
<c:if test="${age > 18}">
请尽情浏览!注意身体!
</c:if>
<%--
2.choose标签:相当于Java中的if..else if...else...
when标签不能单独使用,必须放在choose标签中
when标签中的条件的顺序一定要注意
--%>
<c:choose>
<c:when test="${age > 38}">
大龄少妇
</c:when>
<c:when test="${age > 28}">
懵懂少妇
</c:when>
<c:when test="${age > 18}">
花季少女
</c:when>
<c:when test="${age > 8}">
懵懂少女
</c:when>
<c:otherwise>
小屁孩一个
</c:otherwise>
</c:choose>
<%--
forEach标签:相当于Java中的for循环
var属性:用来设置一个变量接收遍历到的值,同时会以变量值为key放到page域中
begin属性:指定循环的开始,值是一个大于等于0的整数
end属性:指定循环的接收
step属性:指定循环的步长,默认是1
--%>
<%--使用方式一:--%>
<c:forEach begin="1" end="10" var="index" step="2">
<a href="#">${pageScope.index}</a>
</c:forEach>
<hr>
<%
List<String> list = new ArrayList();
// list.add("苍老师");
// list.add("马蓉");
// list.add("李小璐");
// list.add("宋吉吉");
// list.add("陶吉吉");
// list.add("白百何");
// list.add("苏大强");
// list.add("文章");
// list.add("姚笛");
//将list放到page域中
pageContext.setAttribute("stars",list);
%>
<%--使用方式二(使用的较多):
items属性:用来接收一个要遍历的集合
--%>
<c:forEach var="star" items="${stars}">
<a href="#">${pageScope.star}</a><br>
</c:forEach>
<%--
empty运算符:主要用来判断一个字符串或一个集合是否为空
非空的表示方式:
not empty
或 !empty
--%>
<c:if test="${empty stars}">
世界很美好!
</c:if>
<c:if test="${not empty stars}">
世界不美好,明星胡乱搞!
</c:if>
<c:if test="${!empty stars}">
世界不美好,明星胡乱搞!
</c:if>
注
EL表达式
<%@ page import="java.util.Date" %>
<%@ page import="com.atguigu.el.beans.Employee" %>
<%@ page import="com.atguigu.el.beans.Department" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%--
EL的全称:Expression Language,表达式语言
格式:${表达式}
作用:主要用来获取域对象中的属性值
EL查找的规则:默认是四个域都查找
先从page域中开始查找,找到后直接返回,不再去其他域中查找;
如果在page域中找不到,再去request域中查找,也是找到后直接返回,不再去其他域中查找,以此类推...
最后如果在application域中也找不到,则什么也不输出
EL给我们提供了四个Scope对象,用来精确获取指定域中的属性值
pageScope
获取page域中的属性值
requestScope
获取request域中的属性值
sessionScope
获取session域中的属性值
applicationScope
获取application域中的属性值
通过EL表达式获取JavaBean的属性值
通过 对象.属性名 的方式获取,注意:调用的是对应的get方法
--%>
<%
Date date = new Date();
pageContext.setAttribute("date",date+"-");
request.setAttribute("date",date+"--");
session.setAttribute("date",date+"---");
application.setAttribute("date",date+"----");
Employee employee = new Employee(1,"张三",new Department(1001,"小卖部"));
pageContext.setAttribute("emp",employee);
%>
通过JSP表达式获取域中的属性值:<%=pageContext.getAttribute("date")%><br>
通过EL表达式获取当前的时间:${date}<br>
通过EL表达式获取request域中的时间:${requestScope.date}<br>
通过EL表达式获取employee对象的name属性值:${emp.name}<br>
通过EL表达式获取employee对象的getAddress方法的返回值:${emp.address}<br>
通过EL表达式获取employee对象的dept属性的name属性值:${emp.dept.name}<br>
</body>
</html>
EL的隐含对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL的隐含对象</title>
</head>
<body>
<%--
EL中一共有11个隐含对象:
一个我们比较熟悉的
pageContext
类型:PageContext
作用:通过它可以获取JSP中其他八个隐含对象
它既是jsp的隐含对象,也是EL的隐含对象;在JSP和EL中可以直接使用,但是如果在EL中
要使用JSP的其他八个隐含对象,需要通过pageContext获取
四个Scope对象
pageScope
类型:Map<String , Object>
作用:获取page域中的属性值
requestScope
类型:Map<String , Object>
作用:获取request域中的属性值
sessionScope
类型:Map<String , Object>
作用:获取session域中的属性值
applicationScope
类型:Map<String , Object>
作用:获取application域中的属性值
其他六个隐含对象
param
类型:Map<String , Stirng>
作用:获取请求参数
paramValues
类型:Map<String , Stirng[]>
作用:获取请求参数中一个键对应多个值的情况
header
类型:Map<String , Stirng>
作用:获取请求头中的信息
headerValue
类型:Map<String , Stirng[]>
作用:获取请求头中一个键对应多个值的情况
cookie
类型:Map<String , Cookie>
作用:根据Cookie的名字获取对应的Cookie对象
initParam
类型:Map<String , String>
作用:获取当前Web应用的初始化参数
--%>
通过JSP表达式获取项目的虚拟路径:<%=request.getContextPath()%><br>
通过EL表达式的隐含对象pageContext获取项目的虚拟路径:${pageContext.request.contextPath}<br>
通过EL表达式的隐含对象param获取请求参数:${param.username}<br>
通过EL表达式的隐含对象header获取请求头中的信息:${header['User-Agent']}<br>
通过EL表达式的隐含对象cookie获取对应的Cookie对象:${cookie.JSESSIONID}<br>
通过EL表达式的隐含对象initParam获取当前Web应用的初始化参数:${initParam.encoding}<br>
</body>
</html>
JSTL
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%--
JSTL全称:JSP Standard Tag Library,JSP的标准标签库
标签库的分类:
★核心标签库,我们也称为c标签
函数标签库,结合EL表达式,主要用来对字符集进行一些操作
格式化标签库,主要用来进行国际化
xml标签库,已被淘汰
sql标签库,已被淘汰
想要使用标签库需要导入以下两个jar包:
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
--%>
<%--
1.set标签:用来向域中设置属性值,默认添加到page域中
var属性:用来指定向域中设置属性值的key
value属性:用来指定向域中设置的属性值
scope属性:用来指定放到那个域中,可选值有page、request、session、application
--%>
<c:set var="star" value="苍老师" scope="page"></c:set>
<c:set var="star" value="贾老师" scope="request"></c:set>
<c:set var="star" value="沈老师" scope="session"></c:set>
<c:set var="star" value="小泽老师" scope="application"></c:set>
page域对象中的属性值是:${pageScope.star}<br>
request域对象中的属性值是:${requestScope.star}<br>
session域对象中的属性值是:${sessionScope.star}<br>
application域对象中的属性值是:${applicationScope.star}<br>
<%--
2.remove标签:用来移除域中的属性值,默认全域移除,即四个域中都会移除
var属性:用来指定要移除的域中的属性的key
scope属性:用来指定移除那个域中的属性值
--%>
<c:remove var="star" scope="page"></c:remove>
<h1>移除之后再次获取域中的属性值</h1>
page域对象中的属性值是:${pageScope.star}<br>
request域对象中的属性值是:${requestScope.star}<br>
session域对象中的属性值是:${sessionScope.star}<br>
application域对象中的属性值是:${applicationScope.star}<br>
</body>
</html>
if和choose标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if和choose标签</title>
</head>
<body>
<%--
1.if标签:相当于Java中的if条件判断
test属性:用来接收一个布尔类型的值,通常是通过EL表达式获得,当值是true时才执行标签体中的内容
--%>
<%
int age = 5;
pageContext.setAttribute("age",age);
%>
<c:if test="${age < 18}">
少儿不宜!
</c:if>
<c:if test="${age > 18}">
请尽情浏览!注意身体!
</c:if>
<hr>
<%--
2.choose标签:相当于Java中的if..else if...else...
when标签不能单独使用,必须放在choose标签中
when标签中的条件的顺序一定要注意
--%>
<c:choose>
<c:when test="${age > 38}">
大龄少妇
</c:when>
<c:when test="${age > 28}">
懵懂少妇
</c:when>
<c:when test="${age > 18}">
花季少女
</c:when>
<c:when test="${age > 8}">
懵懂少女
</c:when>
<c:otherwise>
小屁孩一个
</c:otherwise>
</c:choose>
</body>
</html>
forEach
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %><%--
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>forEach标签</title>
</head>
<body>
<%--
forEach标签:相当于Java中的for循环
var属性:用来设置一个变量接收遍历到的值,同时会以变量值为key放到page域中
begin属性:指定循环的开始,值是一个大于等于0的整数
end属性:指定循环的接收
step属性:指定循环的步长,默认是1
--%>
<%--使用方式一:--%>
<c:forEach begin="1" end="10" var="index" step="2">
<a href="#">${pageScope.index}</a>
</c:forEach>
<hr>
<%
List<String> list = new ArrayList();
pageContext.setAttribute("stars",list);
%>
<%--使用方式二(使用的较多):
items属性:用来接收一个要遍历的集合
--%>
<c:forEach var="star" items="${stars}">
<a href="#">${pageScope.star}</a><br>
</c:forEach>
<%--
empty运算符:主要用来判断一个字符串或一个集合是否为空
非空的表示方式:
not empty
或 !empty
--%>
<c:if test="${empty stars}">
世界很美好!
</c:if>
<c:if test="${not empty stars}">
世界不美好,明星胡乱搞!
</c:if>
<c:if test="${!empty stars}">
世界不美好,明星胡乱搞!
</c:if>
</body>
</html>