簡介
在JavaWeb中,Servlet中三大域對象分別是request,session,ServletContext,其只要是用來存放共享數據的。html
三大做用域的使用,其本質是根據做用域的範圍,生命週期決定其使用的方式.:java
- request:每一次請求都是一個新的request對象,若是在Web組件之間須要共享同一個請求中的數據,只能使用請求轉發。
- session:每一次會話都是一個新的session對象,若是須要在一次會話中的多個請求之間須要共享數據,只能使用session。
- application:應用對象,Tomcat 啓動到關閉,表示一個應用,在一個應用中有且只有一個application對象,做用於整個Web應用,能夠實現屢次會話之間的數據共享。
對象名稱 | 對象類型 |
---|---|
request | HttpServletRequest |
session | HttpSession |
application | ServletContext |
三個做用域通用方法
存放數據:setAttribute(name,value)服務器
獲取數據:getAttribute(name);session
刪除數據:removeAttribute(name);app
application(ServletContext)
做用域
application:應用對象,服務器啓動到關閉,表示一個應用。在一個應用中有且只有一個application對象,做用於整個Web應用,能夠實現屢次會話之間的數據共享。jsp
生命週期
建立:服務器啓動時爲每個項目建立一個上下文對象(ServletContext)
銷燬:服務器關閉的時候 或者項目移除的時候ide
session(HttpSession)
做用域
生命週期
建立 : 第一次調用 request.getsession()this
html: 不會
jsp: 會 getSession();
servlet: 會url
銷燬 :spa
- 默認30分鐘之後
- 服務器關閉的時候
- session.invalidate() 手動銷燬
request(HttpServletRequest)
做用域
每一次請求都是一個新的request對象,若是在Web組件之間須要共享同一個請求中的數據,只能使用請求轉發。
生命週期
建立 : 請求開始的時候建立(訪問服務器資源)。
訪問 html: 會
訪問 jsp: 會
訪問 servlet : 會
銷燬 : 響應開始的時候(資源請求結束)。
使用示例
項目啓動器
@SpringBootApplication @ServletComponentScan public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class,args); } }
定義兩個Servlet,採用Servlet3.0 註解
設置做用域數據
@WebServlet(name = "MyServlet01",urlPatterns = "/test01") public class MyServlet01 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // application System.out.println("Servlet name is "+this.getServletName()); ServletContext servletContext = req.getServletContext(); servletContext.setAttribute("111","1111"); //session HttpSession session = req.getSession(); session.setAttribute("222","2222"); //request req.setAttribute("333","3333"); resp.getWriter().println("set scope attributes -----"); } }
獲取做用域數據
@WebServlet(name = "MyServlet02",urlPatterns = "/test02") public class MyServlet02 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println("get attributes from 3 scopes -----"); //application(ServletContext) ServletContext servletContext = req.getServletContext(); resp.getWriter().println(servletContext.getAttribute("111")); //session HttpSession session = req.getSession(); resp.getWriter().println(session.getAttribute("222")); //request resp.getWriter().println(req.getAttribute("333")); } }