一、作用域对象:
1. 什么是作用域
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。
作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。
ServletContext:
Web容器在启动时,会为每一个Web程序都创建一个对应的ServletContext对象。它是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。
作用域对象:pageContext:request:session:application:
pageContext::只能在当前页面定义数据,当前页面使用。
request:后端程序和页面有请求关系,则数据可以共享。
session:是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享)
application:是整个服务器有效,所有用户的请求都可以数据共享。
pageContext:
pageContext对象:它的生命周期即page域,指储存在pageContext对象的数据只在当前页面有效,当页面跳转时,则在pageContext域的数据进行销毁。
request:
request对象主要用于处理客户端请求,同时request对象也是作用域对象,它的作用域范围是同一个请求。
session:
session对象用来储存有关用户会话的所有信息,它的作用域范围是同一个会话。
session对象常用的方法:
void setAttribute(String key,object value):application:以键/值的方式,将一个对象的值存放到session中
session.setAttribute("name","admin");
Object getAttribute(String key):根据名称去获取session中存放对象的值
String name=(String ) session.getAttribute("name");
application:
application类似于系统的“全局变量”,用于实现用户之间的数据共享,它的作用域范围是在服务器一开始执行服务,到服务器关闭为止。
注:请求转发:会保留原来的地址不变。
application 对象实现了javax.servlet.ServletContext 接口
application对象的常用方法:
void setAttribute(String key,Object value): 以键/值的方式,将一个对象的值存放到application中void getAttribute(String key)通过键的方式,把对应的值取出来 。
作用域对象测试:
package com.su.servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class Test01 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.pageContext //2.request request.setAttribute("name","request"); //3.session HttpSession session=request.getSession(); session.setAttribute("name","session"); //4.application ServletContext application = request.getServletContext(); application.setAttribute("name","application"); } }
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2023/2/23 Time: 11:05 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>作用域对象测试</title> </head> <body> <%-- EL表达式获取作用域对象得顺序是:pageContext(当前页面)、request(请求问)、session(当前会话)、application(应用程序) --%> <h2> pageContext只能当前页面定义数据,当前页面使用 request后端程序和页面有情关系,则数据可以共享 session是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享) application是整个服务器有效,所有用户得请求可以数据共享 </h2> ${name} </body>