目录
四大域对象:
1.pageContext:属性的作用范围仅限当前的jsp页面(范围最小)
2.request:属性的作用范围仅限同一个请求(转发有效)
3.session:属性的作用范围仅限于一次会话,浏览器打开直到关闭称为一次会话(在此期间会话不失效)
4.application:属性的作用范围仅限于当前web应用(范围最大)
tip:四个域对象作用分别是从小到大的:pageContext<request<session<application
同理:优先级也是从小到大的,所以pageContex是优先级最大的。
为什么要使用EL:
1.在以往使用javabean时,获取的属性必须要实例化,还需要强转类型
2.在页面出现逻辑错误时,将会导致代码执行报错,并且在JSP编译时也会产生错误
--这时我们就会想到使用EL简化表达式
那么,EL是什么?
EL即expression language(表达式语言)
EL能做什么?
简而言之,就是简化代码,用于替换JSP页面中的复杂代码
EL语法:
1.以"${"作为开始,结尾于"}"
2.${ EL expression}
3.直接使用变量名获取值:${ bean.name} or ${bean['name']}
EL优点:
1.能够自动转换类型,对于数据的限制就没有那么的强烈了
2.使用简便,比较在JSP中嵌入Java代码这样就显得更加简单
EL运算符:
1.[ ]
在session保存的元素(list:goods):${sessionScope.goods[1}:获取对象集合中的第二位元素
2."."
获得对象属性:${user.name}<==>${user[name]}
EL隐式对象:
1.作用域访问对象
(1)pageContextScope:返回页面范围的变量名,这些变量已经映射至对应的值
(2)requestScope:返回请求范围的变量名,这些变量已经映射至对应的值
(3)sessionScope:返回会话范围的变量名,这些变量已经映射至对应的值
(4)applicationScope:返回应用范围的变量名,并且将变量映射至对应的值
2.参数访问对象
(1)param:返回客户端的请求参数的字符串
(2)paramValues:返回映射至客户端的请求参数的一组值
3.JSP隐式对象
(1)pageContext:提供对用户请求和页面信息的访问
使用el获取集合中的对象
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.pojo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
//List
List<User>list=new ArrayList<User>();
pageContext.setAttribute("us",list);
%>
<body>
User:${user}
<br>
<%--${user.getName()} --%>
名字: ${user.name}
<br>
<%--${user.getPwd()} --%>
密码: ${user.pwd}
<br>
<%--判断是否为空 --%>
${us.size()==0}
${empty us}
${not empty us}
</body>
</html>
在简化代码之后需要使用到JSTL标签来进行逻辑判断
什么是JSTL?
JSTL(JavaServerPages Standerd Tag Library)JSP标准标签库
JSTL的优点:
1.可用于编写jsp的各种动态标签
2.提供一组标准标签
jstl使用步骤:
1.在JSP页面添加taglib指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2.uri指的是引进来是:http://java.sun.com/jsp/jstl/core
3.prefix指的是标签库的名字,一般都是"c"
JSTL标准标签库(核心标签库)
1.通用标签
(1)set:设置指定范围内的变量值
(2)remove:计算表达式并将结果输出显示
(3)out:删除指定范围的变量
<%--设置 --%>
<c:set scope="page" value="1" var="a"></c:set>
<%--输出 --%>
<c:out value="${a}"></c:out>
<%--移除 --%>
<c:remove var="a" scope="page"></c:remove>
2.条件标签
if:用于判断条件是否成立,用法与Java的用法是一致的。
<%@page import="java.util.ArrayList"%>
<%@page import="com.zking.pojo.Goods"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test=""></c:if>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL基本标签</title>
</head>
<body>
<%
//yy这个参数是控制当前用户是否已经登录
String yy=request.getParameter("yy");
pageContext.setAttribute("yy", yy);
%>
<%--如果登录了显示你好 --%>
<%--如果没有登录了显示登录按钮 --%>
<c:if test="${yy!=null}">
<h1>欢迎使用该系统</h1>
<h1>😊😊😊😊😊😊</h1>
</c:if>
<c:if test="${yy==null}">
<h1>你现在还没有登录,请点击下面的按钮</h1>
<button>请进行登录</button>
</c:if>
</body>
</html>
3.迭代标签
- forEach:对集合中的对象进行遍历
- varName指定数据变量名
- varStatus指定var对象的信息
- begin指的是遍历开始的位置
- end指的是遍历结束的位置
- step指的是迭代的次数
使用迭代标签显示商品列表
<%@page import="java.util.ArrayList"%>
<%@page import="com.zking.pojo.Goods"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test=""></c:if>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL基本标签</title>
</head>
<body>
<%
List<Goods> list=new ArrayList<>();
for(int i=0;i<5;i++){
Goods g=new Goods();
g.setGoodsId(i);
g.setGoodsName("小米手机"+i);
g.setGoodsType("✌"+i);
g.setGoodsPrice(i*100.0);
list.add(g);
}
pageContext.setAttribute("list", list);
%>
<%--商品的遍历 --%>
<table border>
<tr>
<th>商品编号</th>
<th>商品名字</th>
<th>商品类型</th>
<th>商品价格</th>
</tr>
<%
for(Goods goods:list){
goods.getGoodsName();
}
%>
<c:forEach items="${list}" var="goods">
<tr>
<th>${goods.goodsId}</th>
<th>${goods.goodsName}</th>
<th>${goods.goodsType}</th>
<th>${goods.goodsPrice}</th>
</tr>
</c:forEach>
</table>
</body>
</html>