9大内置对象
PageContext 存东西
Request 存东西
Response
Session 存东西
Application [ServletContext] 存东西
config [ServletConfig]
out
page
exception
pageContext–>request–>session–>application 作用域逐渐变大
<%
pageContext.setAttribute("name1","渊1");//保存的数据只在一个页面中有效
request.setAttribute("name2","渊2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","渊3");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","渊4");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
request: 客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用了
session:客户端向服务器发送请求,产生数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据
通过请求转发携带数据:
<%
pageContext.forward("/index.jsp");
//request.getRequestDispatcher("/index.jsp").forward(request,response);
%>
第一行代码等价于第二行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--内置对象--%>
<%
//pageContext-->request-->session-->application 作用域逐渐变大
pageContext.setAttribute("name1","渊1");//保存的数据只在一个页面中有效
request.setAttribute("name2","渊2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","渊3");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","渊4");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%--脚本片段中的代码会被原封不动的生成到_JSP.Java中
要求:这里面的代码:必须保证Java语法的正确性--%>
<%
//从pageContext中取出,通过寻找的方式
//从底层到高层(作用域)
String name1 = (String)pageContext.findAttribute("name1");
String name2 = (String)pageContext.findAttribute("name2");
String name3 = (String)pageContext.findAttribute("name3");
String name4 = (String)pageContext.findAttribute("name4");
String name5 = (String)pageContext.findAttribute("name5");
%>
<%--使用EL表达式输出${}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<%--这行不会输出name5--%>
<h3>${name5}</h3>
<%--下面这行会输出null,所以一般用EL表达式输出值,而不是使用下面的方法--%>
<h3><%=name5%></h3>
</body>
</html>
注意:一般都不用JSP表达式输出值,因为值为空会输出null,所以一般使用EL表达式输出,值为空的时候就会被过滤,不会输出null