作用域范围从小到大顺序:
pageContext----request----session----application
其中:
pageContext:
作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
注意:pageContext 页面上下文对象 在调用_jspService的时候创建
作用范围:处于当前页面中有效!
request:
作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
session:
session的作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。
application:
作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。
jsp九大隐式对象
2.7 JSP的九大隐式对象(内置对象)
request HttpServetRequest 请求信息对象 用户发出请求的时候
response HttpServletResponse 响应信息对象 服务器响应用户的时候
session HttpSession 会话对象 调用request.getSession的时候
application ServletContext 当前web应用信息对象 web应用启动的时候
exception Thowable 异常信息对象 异常抛出的时候
page this 当前页面对象 访问这个当前页面的时候
config ServletConfig servlet的配置信息对象 构造servlet对象之后,创建ServetConfig对象,通过init 方法传入servlet
out JspWriter 输出对象 调用_jspService的时候创建
pageContext PageContext 页面上下文对象 调用_jspService的时候创建
out对象
之前servlet里面有一个PrintWriter对象,PrintWriter对象是用于向浏览器输出内容。out对象类型是JspWriter,JspWriter的作用类似于PrintWriter,但是JspWriter有缓存功能,而PrintWriter没有!
当遇到这三种情况,JspWriter缓存区的内容会往浏览器写出!
1)out的缓存区满了。
2)调用out.flush()方法
3)页面读取完毕!
注意:JspWriter的写出效率会比PrintWriter高
pageContext
页面上下文对象
使用场景:自定义标签使用频繁!!
作用:
1、可以通过pageContext获取其他八个隐式对象
2、通过pageContext保存和获取数据
2.1 在指定域中保存和获取
2.2 在四个域中从小到大自动匹配数据
<%
//2 可以向pageContext
//默认方式
//保存数据
pageContext.setAttribute("itcast", "www.itcast.cn");
//往指定域保存数据.默认保存的域是PAGE_SCOPE
//pageContext.setAttribute("message", "pageContext's value", PageContext.PAGE_SCOPE);
//pageContext.setAttribute("message", "request's value", PageContext.REQUEST_SCOPE);
//pageContext.setAttribute("message", "session's value", PageContext.SESSION_SCOPE);
pageContext.setAttribute("message", "application's value", PageContext.APPLICATION_SCOPE);
/**
以上方式等价于:
pageContext.setAttribute();
request.setAttribute();
session.setAttribute();
context.setAttribute();
*/
%>
<%--
获取数据
--%>
<%=pageContext.getAttribute("itcast") %><br/>
<%--
从指定域中获取数据
注意:在哪个域把数据保存进去,就得从这个域中取出
--%>
<%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/>
<%---
自动在四个域中匹配数据,从小到大依次匹配,如果匹配到了,就返回对应域中的数据;如果没有,则返会空
从小到大:
pageContext < request < session < application
--%>
<%=pageContext.findAttribute("message") %>