servlet的三大作用域包括request,session,application(ServletContext)
考虑到服务器的内存问题,能用小的不用大的:Request < Session < ServletContext
常见的使用场景:
Request:一次查询的结果。例如,Servlet 转发 JSP。
Session:存放当前会话的私有数据。例如,用户登录状态,验证码,购物车。
application(ServletContext):若需要所有的 Servlet 都能访问到,才使用这个域对象。
定义:request表示一个请求,只要发出一个请求就会创建一个request
它的作用域仅在当前请求中有效,如果Web组件之间需要共享同一个请求中的数据,只能使用请求转发。
作用:
- 用于服务器间同一请求不同页面之间的参数传递
- 用于表单的控件值传递
方法:
request.setAttribute(); 将request.getParameter()方法获取的数据保存到request域中,即将获取的数据重新封装到一个域中。 request.getAttribute(); 返回在request.setAttribute()封装的域中存在的数据 request.removeAttribute(); 删除请求中的一个属性。 request.getParameter().获取通过类似post,get等方式传入的数据,即获取客户端到服务端的数据,代表HTTP请求数据。2.session
定义:Session 是一个接口(HttpSession),用来维护一个客户端和服务器之间关联的一种技术。
每个客户端都有自己的一个 Session 会话。所以session中的数据可供当前会话中所有servlet共享
Session 会话中,我们经常用来保存用户登录之后的信息。
作用域:会话从用户打开浏览器开始,直到关闭浏览器才结束,一次会话期间只会创建一个session对象。
作用:
- 用于web开发中的登陆验证界面
- 用于电商网站购物车功能
方法:
session.setAttribute("sessionName",Object); //保存
//用来设置session值的,sessionName是名称,object是你要保存的对象。
session.getAttribute("sessionName"); //取得
//用来得到对应名称的session值,即得到object对象,注意需要进行类型转换!
session.removeAttribute();用于清空指定的属性
session.invalidate()是清除当前session的所有相关信息
在Servlet直接获取session:
HttpSession session = request.getSession();
JSP页面中直接使用(session属于JSP九大内置对象之一):
<%session.serAttribute("name","admin")%>
3.application(ServletContext)
定义:ServletContext在 服务器启动时创建,服务器关闭时销毁。一个JavaWeb应用只创建一个ServletContext对象,所有的浏览器在访问服务器时都共享同一个ServletContext对象,ServletContext对象一般用于在多个浏览器间共享数据时使用。
作用:存储数据和访问来自任何页面的变量,类似于session。不同之处在于,所有用户分享一个application。而session是一个对象一个session对象
在一起协同工作以完成某项任务的一组 ASP 文件称作应用程序(application)
因为application持有会被应用程序中的许多页面使用信息(比如数据库连接信息),所以可以从任何页面访问这些信息。同时也意味着你可在一个地点改变这些信息,任何这些改变会自动反应在所有的页面上
Servlet中获取Application对象:
ServletContext app01 = this.getServletContext();
app01.setAttribute("name", "kaixuan");//设置一个值进去
ServletContext app02 = this.getServletContext();
app02.getAttribute("name"); //获取键值对
ServletContext同属于JSP九大内置对象之一,故可以直接使用
提示:服务器只会创建一个ServletContext 对象,所以app01就是app02,通过app01设置的值当然可以通过app02获取。
作用域对象共享数据:
设置作用域中的共享数据 作用域对象.setAttribute(String name,Object value); 获取作用域中的共享数据 Object value = 作用域对象.getAttribute(String name); 删除作用域中的指定的共享数据 作用域对象.removeAttribute(String name);总结: 1.生命周期
(1) request:只限于一次请求
(2) session:一次会话(多次请求)
(3) application:项目的加载到卸载
requset:所有被请求转发的Servlet
session:所有Servlet(当前浏览器)
application:所有Servlet(所有浏览器都行)
3. 正确选择作用域
request:跟当前操作功能相关
session:跟用户信息相关,如登录信息、银行账号
application:跟项目全局信息相关,如:京东配送地址
(如果不正确选择作用域会出现内存浪费)
总结网上的一些资料加上自己补充,对servlet三大域的基础介绍就是这些



