[Java學習筆記]JavaWeb中的四大域對象

域對象

可以在不同Servlet之間傳遞數據的對象,就是域對象

只要是域對象都有如下方法

  • setAttribute(name,value);存儲數據的方法
  • getAttribute(name);根據name獲取對應數據值
  • removeAttribute(name);刪除數據

JavaWeb有 ServletContext、ServletRequest、HttpSession、PageContext 四大域對象,下面主要從域對象的生命週期、作用、作用範圍進行介紹。
Servlet中只有前三個域對象,JSP中多了一個pageContext對象。

.
.

圖解作用域

在這裏插入圖片描述

一、ServletContext(jsp中對象名:application)

1.生命週期

當web應用被加進容器時,創建代表整個web應用的ServletContext對象,當服務器關閉,或web應用被移除時,ServletContext對象跟着被銷燬。

2.作用範圍

整個web應用內部共享。

3.作用

由於一個web應用中的所有Servlet共享同一個ServletContext對象:因此Servlet對象之間可以通過ServletContext來是實現通訊。ServletContext對象通常也被稱爲context域對象。
應用

  • 多個Servlet通過ServletContext對象實現數據共享。
  • 獲取web應用的初始化參數 getInitParameter。
  • 利用ServletContext對象讀取資源文件。
    servletContext.getRealPath("/xx.properties"),servletContext.getResourceAsStream()。
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");

    //將數據存儲到ServletContext中
    getServletContext().setAttribute("emplist", list);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    //獲取數據
    Object object = getServletContext().getAttribute("emplist");
    if(object!=null){
        List<String> list = (List<String>) object;
        for (String string : list) {
            response.getWriter().write(string);
        }
    }
}

二、Session

1.生命週期

  • 服務器在運行時可以爲每一個用戶的瀏覽器創建一個對應JSESSIONID獨享的session對象,由於session爲用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的數據放在各自的session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的session中取出數據爲用戶服務。
  • 在第一次調用request.getSession()方法時,服務器會檢查是否已經有對應的session,如果沒有就在內存中創建一個並返回。
  • 當一段時間內,session沒有被使用(默認是30分鐘),服務器會銷燬該session。如果服務器非正常關閉(強行關閉),還未到期的session也會被銷燬。
    另外,調用session的invalidate()方法可以立即銷燬session。

2.作用範圍

一次回話(客戶端與服務器任意一端關閉就結束)。

三、ServletRequest

1.生命週期

在service方法調用前由服務器創建,傳入service()方法,整個請求結束,ServletRequest生命週期結束。

2.作用範圍

整個請求鏈。(請求轉發也存在,請求轉發屬於一次請求。)

3.作用

在整個請求鏈中共享數據,主要可通過getAttribute、setAttribute將數據帶到jsp頁面中進行顯示。

  • 獲得客戶端信息,可通過getRequestURL()、getRequestURI()、getQueryString()、getPathInfo()、getRemoteAddr()、getRemoteHost()、getRemotePort()、getLocalAddr()、getLocalName()。
  • 獲得客戶機請求頭,getHeader(String s)、getHeaders(String s)、getHeaderNames()。
  • 獲得客戶機請求參數(客戶端提交的數據 POST / GET):getParameter()等。

四、PageContext

PageContext對象是JSP頁面中才有的對象。

1.生命週期

當對JSP的請求開始時創建,當響應結束時銷燬。

2.作用範圍

整個JSP頁面,是四大域中最小的一個。

3.作用

pageContext對象封裝了8大隱式對象,通過它可以獲得其它的8個對象。

  • getException()返回Exception。
  • getPage()返回Page。
  • getRequest()返回request。
  • getResponse()返回response。
  • getServletConfig()返回config。
  • getServletContext()返回application。
  • getSession()返回session。
  • getOut()返回out。
    另外,通過pageContext還能獲取其所有域中的數據。

4.getAttribute()和findAttribute()的區別

getAttribute()只能獲取自己域中保存的屬性,而findAttribute()則會按照(從小到大)
pageContext->request->session->servletContext 的順序查找有無對應的屬性,找到爲止。
四大域中,HttpRequest和HttpResponse,session和cookie有很多聯繫。

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