目录
一.jsp内置对象之域对象
1.1 概述
主要负责在不同web资源之间进行数据交换。由于不同的web资源之间需要共享数据,所以就有了域对象。
1.2 域对象
pageContext:属性的作用范围仅限当前的jsp页面,如果跳到别的jsp页面无效(范围最小)
request:属性的作用范围仅限同一个请求(转发有效)
session:属性的作用范围仅限于一次会话,浏览器打开直到关闭称为一次会话(在此期间会话不失效)
application:属性的作用范围仅限于当前web应用,服务器为关闭或重启,数据有效(范围最大)
1.3 域对象的作用
该四个域对象的作用都是用于存储数据。
1.4 域对象的使用方法
保存数据:
pageContext.setAttribute(arg0, arg1) arg0:名字 arg1:值
application.setAttribute("msg1","你好啊我是application");
session.setAttribute("msg2","我是session");
request.setAttribute("msg3","我是requst");
pageContext.setAttribute("msg4", "我是pageConext");
获取数据:
pageContext.getAttribute("");
application.getAttribute("msg1");
session.getAttribute("msg2");
request.getAttribute("msg3");
pageContext.getAttribute("msg4");
清除数据
removeAttribute("msg1")
二.EL表达式
2.1 什么是EL表达式
EL即Expression Language(表达式语言)
2.2 EL表达式的功能
替代jsp页面中的复杂代码,其实就是代替<%= %>
2.3 EL表达式的语法
${bean.name} 实质是调用bean的getName()方法
${name}
注意::EL表达式必须是从域对象中取值,不能完全替代<%= %>的取值方式
2.4 EL表达式的运用
- 先在域对象中存储值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--
先将驱动包导入
jsp内置对象之域对象:
1.application 属性的作用范围仅限于在当前web项目中。(范围最大)
2.session 属性的作用范围权限于一次会话,浏览器打开关闭为一次会话,如果重新在打开浏览器,原本在里面的数据都没有啦。
3.request 属性的作用范围只限于同一个请求(转发才有效)
4.pageContext 属性的作用范围只在当前页面有效(范围最小)
这四个都可以存储数据
-->
<%
application.setAttribute("msg1","你好啊我是application");
session.setAttribute("msg2","我是session");
request.setAttribute("msg3","我是requst");
%>
<jsp:forward page="test02.jsp"></jsp:forward>
- 使用EL表达式,取出域对象中的值
<%@ 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>
<body>
<%
pageContext.setAttribute("msg4","我是pageContext");
%>
application:${msg1}
<br>
session: ${msg2}
<br>
request: ${msg3}
<br>
pageContext:${msg4}
</body>
</html>
- 运行效果
当我们在四个域对象中存入的属性名一样时
- 先往域对象中存入相同的属性名
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
application.setAttribute("msg","application");
session.setAttribute("msg","session");
request.setAttribute("msg","requst");
%>
<jsp:forward page="test04.jsp"></jsp:forward>
- 用EL表达式取值
<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ 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>
<body>
<%
pageContext.setAttribute("msg","我是pageContext");
%>
${msg}
</body>
</html>
- 呈现效果
取出的值: 我是pageContext
原因:他会从最小的域对象中取
- 使用EL中的隐含对象(pageScope、requestScope、sessionScope、applicationScope)来取值
代码如下:
<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ 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>
<body>
<%
pageContext.setAttribute("msg","我是pageContext");
%>
${pageScope.msg}
<br>
${requestScope.msg}
<br>
${sessionScope.msg}
<br>
</body>
</html>
2.5 EL运算符
三元运算运用
Empty运算符
代码如下:
<%@page import="java.util.ArrayList"%>
<%@page import="com.yjx.pojo.User"%>
<%@page import="java.util.List"%>
<%@ 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>
<body>
<%
User u=new User(0,"zz","zz123");
pageContext.setAttribute("user", u);
List<User> user=new ArrayList();
pageContext.setAttribute("u",user);
%>
<!--三元运算符-->
${applicationScope.msg==null?"真":"假"}
<br>
用户名: ${user.name}
<br>
密码:${user.pwd.equals("")?"为空":"不为空"}
<br>
<%--Empty 判断集合中为空--%>
${empty u}
<br>
<%--not empty 判断集合中不为空--%>
${not empty u?"xx":"yy"}
</body>
</html>
三.JSPL标签
3.1 JSPl中常用的标签
--通用标签:set out remove
--条件标签:if
--迭代标签:forEach
3.2 使用JSPL标签的步骤
-
先导入驱动包
- 在页面中导入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
3.3 使用JSPL标签
- JSTL中set标签 ,相当于pageContext.setAttribute("a",1)
<c:set scope="page" var="a" value="1"></c:set>
- JSTL中out标签的使用->
<c:out value="${a}"></c:out>
- JSTL中的remove使用
<c:remove var="a" scope="page"/>
- 条件标签if使用
<!-- 条件标签if使用 -->
<%
String yy="123";
pageContext.setAttribute("yy",yy);
%>
<c:if test="${yy!=null}">
<h1>欢迎登录</h1>
</c:if>
<c:if test="${yy==null}">
<h1>登录失败</h1>
</c:if>
- 迭代标签:forEach
<!-- 迭代标签:forEach -->
<%
List<Shiwu> s=new ArrayList();
for(int i=1;i<=5;i++){
Shiwu sw=new Shiwu();
sw.setId(i);
sw.setName("娃哈哈"+i);
s.add(sw);
}
pageContext.setAttribute("list",s);
%>
今天的学习就到这里啦。