網站首頁 編程語言 正文
在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);
完事。
原文鏈接:https://blog.csdn.net/weixin_67588007/article/details/125546600
相關推薦
- 2022-05-08 ASP.NET?MVC視圖尋址_實用技巧
- 2022-08-01 MongoDB基礎之查詢文檔_MongoDB
- 2022-02-28 gyp info it worked if it ends with ok npm ERR 解決辦法
- 2023-06-21 Python中sorted()用法案例代碼_python
- 2023-04-06 C#?Csv實現基本的讀寫和轉換DataTable_C#教程
- 2022-12-11 Python?中用多種方式實現單例模式_python
- 2022-10-25 如何利用Python和matplotlib更改縱橫坐標刻度顏色_python
- 2022-08-06 pythonfor循環中range與len區別_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支