当前位置:网站首页>浅析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);
完事。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
边栏推荐
- DMPE-PEG-Mal Maleimide-PEG-DMPE dimyristoylphosphatidylethanolamine-polyethylene glycol-maleimide
- A Preliminary Study on Baidu Open Source e-chart
- 看完腾讯大佬90天整理的“Redis深度笔记”,我直接当场膜拜
- [Database] How does Sqlserver backup the database regularly and clear it regularly
- DSPE-PEG-Aldehyde,DSPE-PEG-CHO,磷脂-聚乙二醇-醛基MW:1000
- benchmark性能测试
- docke安装mysql以及主从搭建(并且指定数据生成路径)
- 常用类学习
- Jmeter性能测试步骤入门
- After reading the "Redis In-depth Notes" compiled by Tencent bosses in 90 days, I worshipped on the spot.
猜你喜欢
随机推荐
玩转云端 | 天翼云电脑的百变玩法
经典面试题 之 JVM调优
回归测试:意义、挑战、最佳实践和工具
6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
.NET现代应用的产品设计 - DDD实践
6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
Docker安装Redis详细步骤
Common sql records
JVM简学笔记
What is the difference between the four common resistors?
FilenameFilter过滤文件名
【LeetCode】1413. 逐步求和得到正数的最小值
ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions unless TOP, OFFSET, or FOR XML is also specified
Shell functions and arrays
OpenCV - 图像模板匹配 matchTemplate
Redis6.2.1配置文件详解
易基因|作物育种:DNA甲基化在大豆优良品种培育中的作用研究成果
Technology Sharing | How to Handle Header Cookies in Interface Automation Testing
C语言程序设计笔记(浙大翁恺版) 第十一周:结构类型
MySQl表的增删查改(聚合查询+联合查询)









