域对象-服务器端四大域对象的分析

本文深入解析了Java服务器端的四大域对象:ServletContext、request、session和pageContext,详细阐述了它们的概念、作用、生命周期及应用场景,帮助读者理解如何在web项目中有效管理和传递数据。

一、域对象的概念

域对象:可以在不同的servlet|jsp之间进行数据传递与共享的对象就是域对象。
Java服务器端有四大域对象:
Servlet的域对象:ServletContext、request、session
JSP的域对象:pageContext
API:存储数据:setAttribute(name,value)
获取数据:getAttribute(name)
删除数据:removeAttribute(name)

四大域对象的作用范围:

  • ServletContext域对象:整个web项目(一个web项目只有一个ServletContext对象)
  • request域对象:一次请求的多次转发中有效
    request.getRequestDispatcher("/资源路径").forward(request,response)
  • session域对象:一次会话(默认)
    第一次执行getSession方法创建对象后会响应给浏览器一个存储了JSESSIONID的cookie,下一次请求资源浏览 器会携带着JSESSIONID给服务器,再次执行getSession方法服务器会拿着JSESSIONID找到之前的session对象
  • pageContext域对象:当前jsp页面

二、ServletContext域对象

2.1 ServletContext的概述

ServletContext:servlet的上下文对象(全局管理者对象),是一个容器(域对象)可以存储键值对数据(String key,Object value),保存在ServletContext中的数据不仅可以提供给所有的servlet使用,而且可以在整个项目范围内使用(后期的过滤器、监听器也可以使用 ServletContext)。
一个web项目只有一个全局管理者(SevletContext对象)

2.2 ServletContext的作用

作用:
作为域对象(可以存储键值对数据 String key,Object value)
可以获取当前应用下任何路径下的任何资源
获取初始化参数

2.3 ServletContext的生命周期

ServletContext对象的生命周期:
1.创建:只要tomcat服务器一启动,就会为部署在它上面的项目创建一个对象的全局管理者—ServletContext
2.销毁:只要tomcat服务器一关闭,该全局管理者—ServletContext就销毁了
3.获取:getServletContext()

三、request域对象

3.1 request的概述

request对象代表浏览器端的请求,当浏览器端通过http协议访问服务器时,http请求中的所有信息都封装在对象中。

3.2 request的作用

作用:
request对象可以获取浏览器传递的数据
request对象可以作为容器在多个servlet|jsp之间进行数据传递
request对象提供了getRequestDispatcher方法,该方法返回一个RequestDisPatcher对象,调用这个对象的foward方法可以实现请求转发,从而共享请求中的数据。

3.3 request的生命周期

request对象的生命周期:
1.当请求来时创建request对象
2.服务器端响应后,request对象就销毁
3.每次请求都是一个新的request对象

四、session域对象

4.1 session的概述

session,是服务器端的会话技术,能够在一次会话的多次请求中共享数据,将数据保存在服务器端的session对象中。

4.2 session的原理分析

1.为什么在一次会话中,使用的都是同一个session对象?
Cookie:JSESSIONID=C573A3AF2DDF0491AE6FB31608525641
因为JSESSIONID相同,根据JSESSIONID获取的session对象是同一个。

2.为什么浏览器关闭以后(不在一个会话了),使用的就不是同一个session对象了?
浏览器一关闭,cookie就销毁了,cookie中的JSESSIONID也就没有了。

4.3 session的执行流程

当执行到调用getSession方法时,首先判断cookie中是否有JSESSIONID。
如果不存在JSESSIONID:
那么直接创建一个新的session对象返回给你,并且向响应头中写一个新的JSESSIONID存放cookie给浏览器保存
如果存在JSESSIONID:
从服务器内存中去获取对应的session对象继续使用。

会话浏览器关闭后:打开新的会话
再次判断cookie中是否有JSESSIONID,如果没有,那么直接创建一个新的session对象返回给你,并且向响应头中写一个新的JSESSIONID存放到cookie给浏览器。

4.4 session的生命周期

创建:Java认为当浏览器首次执行到了request.getSession方法的时候创建session对象
销毁:
被动销毁: 默认当前session30分钟不使用会被销毁
主动销毁:session.invalidate()
注:
服务器正常关闭session不会销毁,会持久化到硬盘上,服务器开启后,会默认从硬盘上读回到服务器中
服务器非正常关闭,session会销毁
存入数据的作用范围:在一次会话中涉及的多个servlet可以共享数据
因为一次会话中,多个sevlet中获取的session是同一个

四、pageContext域对象

4.1 pageContext的概述

pageContext:是jsp的域对象,但不是servlet的域对象。也可以用来存储数据,但存储的数据只在当前页面有效,还不如一个变量好使。

4.2 pageContext的作用

1 可以获取其他八大内置对象(了解)

2 可以从别的作用域中查找数据(了解)
findAttribute(“key”)
作用:依次从作用域范围最小的开始查找 一直到最大的,如果都找不到 返回null

3 pageContext可以操作其他作用域(了解)
request.setAttribute(“msg”, “aaa”);
pageContext.setAttribute(“msg”, “aaa”,PageContext.REQUEST_SCOPE);
参数:
PageContext.REQUEST_SCOPE request域
PageContext.SESSION_SCOPE session域
PageContext.PAGE_SCOPE pageContext域
PageContext.APPLICATION_SCOPE ServletContext域

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值