Servlet的三大作用域對象

簡介

在JavaWeb中,Servlet中三大域對象分別是request,session,ServletContext,其只要是用來存放共享數據的。

三大作用域的使用,其本質是根據作用域的範圍,生命週期決定其使用的方式.:

  • request:每一次請求都是一個新的request對象,如果在Web組件之間需要共享同一個請求中的數據,只能使用請求轉發。
  • session:每一次會話都是一個新的session對象,如果需要在一次會話中的多個請求之間需要共享數據,只能使用session。
  • application:應用對象,Tomcat 啓動到關閉,表示一個應用,在一個應用中有且只有一個application對象,作用於整個Web應用,可以實現多次會話之間的數據共享。
對象名稱 對象類型
request HttpServletRequest
session HttpSession
application ServletContext

三個作用域通用方法

存放數據:setAttribute(name,value)

獲取數據:getAttribute(name);

刪除數據:removeAttribute(name);

在這裏插入圖片描述

application(ServletContext)

作用域

application:應用對象,服務器啓動到關閉,表示一個應用。在一個應用中有且只有一個application對象,作用於整個Web應用,可以實現多次會話之間的數據共享。

生命週期

創建:服務器啓動時爲每一個項目創建一個上下文對象(ServletContext)
銷燬:服務器關閉的時候 或者項目移除的時候

session(HttpSession)

作用域

生命週期

創建 : 第一次調用 request.getsession()

html: 不會
jsp: 會 getSession();
servlet: 會

銷燬 :

  • 默認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"));

    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章