当前位置:网站首页>浅析Servlet三大容器的常用方法及其作用域
浅析Servlet三大容器的常用方法及其作用域
2022-08-09 14:51:00 【Ran959】
在JavaWeb中,Servlet中三大作用域对象分别是request,session,application,其主要目的是用来共享数据的。
三大作用域的使用,其本质是根据作用域的范围,生命周期决定其使用的方式.:
| 对象名称 | 对象的类型 |
| request | HttpServletRequest |
| session | HttpSession |
| application | ServletContext |
作用域对象如何共享数据:
1.设置作用域中的共享数据。
作用域对象名.setAttribute(String name,Object value);
2.获取作用域中的共享数据。
Object value=作用域对象名.getAttribute(String name);
3.获取作用域中的共享数据。
作用域对象.removeAttribute(String name);
注意:在哪一个作用域中设置共享数据,就只能从该作用域中取出数据。
三大作用域:
request:每一次请求都是一个新的request对象,如果在Web组件之间需要共享同一个请求中的数据,只能使用请求转发。
session:每一次会话都是一个新的session对象,如果需要在一次会话中的多个请求之间需要共享数据,只能使用session。
application:应用对象,Tomcat 启动到关闭,表示一个应用,在一个应用中有且只有一个applic-ation对象,作用于整个Web应用,可以实现多次会话之间的数据共享。
代码演示:
我们新建两个类:ScopeServlet ResultServlet
package com.ape.view;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ScopeServlet
*/
@WebServlet("/scope.do")
public class ScopeServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.request
Integer numInRequest=(Integer)req.getAttribute("NUM_IN_REQUEST") ;
if (numInRequest == null) {
req.setAttribute("NUM_IN_REQUEST",1);
}
else {
req.setAttribute("NUM_IN_REQUEST",numInRequest+1);
}
//2.Session
Integer numInSession=(Integer)req.getSession().getAttribute("NUM_IN_SESSION") ;
if (numInSession == null) {
req.getSession().setAttribute("NUM_IN_SESSION",1);
}
else {
req.getSession().setAttribute("NUM_IN_SESSION",numInSession+1);
}
//3.application
Integer numInApplication=(Integer) req.getServletContext().getAttribute("NUM_IN_APPLICATION");
if (numInApplication == null) {
req.getServletContext().setAttribute("NUM_IN_APPLICATION",1);
}
else {
req.getServletContext().setAttribute("NUM_IN_APPLICATION",numInApplication+1);
}
req.getRequestDispatcher("/result").forward(req,resp);
}
}package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ResultServlet
*/
@WebServlet("/result.do")
public class ResultServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
Integer numInRequest=(Integer) req.getAttribute("NUM_IN_REQUEST");
Integer numInSession=(Integer) req.getSession().getAttribute("NUM_IN_SESSION");
Integer numInApplication=(Integer) req.getServletContext().getAttribute("NUM_IN_APPLICATION");
out.println("Request="+numInRequest);
out.println("Session="+numInSession);
out.println("Application="+numInApplication);
}
}然后我们运行一下
第一次访问 三个作用域都是1

刷新了5次 会看到 request一次 session与Application都是6次

接下来我们换一个浏览器 会发现 session 是1了 而 Appplication又增加了一次

又刷新了几次,发现session从0开始重新计数

返回我们的第一个Google浏览器 Google里面的session自己又加1了

因此 我们会发现
Request是一次请求
Session是一个会话
Application是多次会话(Tomcat开启到关闭)
常用方法:
1. Request:
request.setAttribute(); //向request域里设置数据
request.getAttribute(); //向request域里取出数据
request.removeAttribute(); //向request域里移除数据
request.getParameter(). //从request域里获取传递的数据
2.Session:
session.setAttribute(); //向session域里存放共享数据
session.getAttribute(); //从session域里取出共享数据
session.removeAttribute();//从session域里移除共享数据
3. Application(ServletContext):
1. 设置作用域中的共享数据
作用域对象.setAttribute(String name,Object value);
2. 获取作用域中的共享数据
Object value = 作用域对象.getAttribute(String name);
3. 移除作用域中的指定的共享数据
作用域对象.removeAttribute(String name);
完事。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
边栏推荐
- Startup error: Caused by: org.apache.ibatis.binding.BindingException summary solution
- DSPE-PEG-Hydrazide,DSPE-PEG-HZ,磷脂-聚乙二醇-酰肼MW:1000
- 基于FPGA的FIR滤波器的实现(3)—采用Filter Design & Analysis设计
- 生产者/消费者问题(线程信号)
- 和月薪5W的测试聊过后,才知道自己一直在打杂...
- [DevOps] jekins configuration (2)
- 思维导图FreeMind安装问题及简单使用
- 985测试工程师被吊打,学历和经验到底谁更重要?
- 6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
- 【OpenGL】三、OpenGL总结:OpenGL坐标系
猜你喜欢

【Qt5 + OpenGL】glPointSize(10); error: undefined reference to `__imp_glPointSize‘

docker安装单机版redis、集群版redis

听书项目总结

DBCO-PEG-DSPE,磷脂-聚乙二醇-二苯并环辛炔,在无铜离子的催化下反应

C语言程序设计笔记(浙大翁恺版) 第九周:指针

JS 选项卡切换tab

机器学习--数学库--概率统计

【NodeJs篇】关于path 路径模块的学习和使用

DMPE-PEG-Mal Maleimide-PEG-DMPE dimyristoylphosphatidylethanolamine-polyethylene glycol-maleimide

xshell7连接工具下载
随机推荐
MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据
【NodeJs篇】关于path 路径模块的学习和使用
优化代码 —— 减少 if - else
OpenCV - 矩阵操作 Part 3
【STM32】TCL2543CN 12位11通道ADC芯片stm驱动程序,使用32自带SPI实现
【LeetCode】1898. 可移除字符的最大数目
Shell编程之正则表达式
6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
C语言——void指针、NULL指针、指向指针的指针、常量和指针
Grad CAM 模型可视化
.NET现代应用的产品设计 - DDD实践
【基础版】整数加减乘除计算器
玩转云端 | 天翼云电脑的百变玩法
物联网技术概论:1~7章汇总(西安交通大学)
C语言程序设计笔记(浙大翁恺版) 第十三周:文件
约束性统计星号‘*’
DMPE-PEG-Mal Maleimide-PEG-DMPE dimyristoylphosphatidylethanolamine-polyethylene glycol-maleimide
C语言程序设计笔记(浙大翁恺版) 第十一周:结构类型
MongoDB adds permission management
基于FPGA的FIR滤波器的实现(2)—采用kaiserord & fir2 & firpm函数设计