java四大域總結,java四大域

來源:互聯網
上載者:User

java四大域總結,java四大域

最近學完了web部分,發現有些地方總是單個容易理解,可是把所有的放在一起來大雜燴,總是有那麼幾個知識點容易混淆。其實網上的資料已經夠多了,雖然也不乏辛勞的搬運工。可是最終的目的不就是要我們自身理解嗎?自己理解了的東西才正真是我們的。作為額外的獎勵,我們先來關注一下JSP的九大隱式對象。

可以看看中關於JSP的九大隱式對象,它們可總是被老師們說是重點重點哦。

 

 

範圍------顧名思義,起作用的大小範圍也!如果是你自己去學習一個知識點,你要達到哪些目標才算是對一個知識點稱得上是懂得,理解,掌握呢?從扁神醫的望聞問切,到資料庫的增刪改查,所有的事物開始也不外乎:是什嗎?有什麼用?怎麼用?為什麼可以這麼用?故而,我覺得咱們應該把握以下問題,帶著這些問題去學習,發現自己的不足,才是學習的上策。

1)範圍的實際大小。(是什嗎?)

2)  範圍的作用。(有什麼用?)

3)怎麼使用這些範圍。(怎麼用?)

4)它這樣使用實現的原理。(為什麼可以這麼用?)

 

下面開始逐一分析:

(一)servletcontext域(application域)

1)範圍的實際大小。(是什嗎?)

  servletcontext域起作用的範圍是:整個web應用程式。

  資料產生之後,不僅等會還要用 ,還要給別人用,則請使用servletcontext。

  它是四個域中範圍最大的域。

2)  範圍的作用。(有什麼用?)

  由於一個web應用中的所有servlet共用同一個servletcontext對象,所以多個servlet通過servletcontext對象實現了資料在不同servlet之間的共用。

3)怎麼使用這些範圍。(怎麼用?)

  a)可以通過編程的方式綁定,也可以作為web應用的全域變數被所有Servlet和JSPs訪問

 

      

設定Context屬性:              ServletContext application=this.getServletContext();              application.setAttribute("person1",new Person("Jim"));              application.setAttribute("person2",new Person("Green"));      擷取Context屬性:              ServletContext application=this.getServletContext();              Enumberation persons=application.getAttributeNames();               while(persons.hasMoreElements()){                      String name=(String)persons.nextElement();                      Person p=(Person)persons.getAttribute(name);                      application.removeAttribute(name);              }

 

  b)為整個web應用配置context域:

  修改web.xml設定檔,加入以下內容

  <context -param>

    <param-name>data</param-name>

    <param-value>Hello world !</param-value>

  </context - param>

  從Servlet中訪問這些初始化參數:

              ServletContext application=this.getServletContext();

              out.println(application.getInitParameter("data"));

 

  c)讀取資源檔

     使用ServletContext介面可以直接存取web應用中的靜態內容文檔結構.包括HTML,GIF和JPEG檔案。如以下方法:
        .getResource()
        .getResourceAsStream()
  這兩個方法的參數都是以"/"開頭的字串,表示資源相對於context根的相對路徑.文檔結構可以存在於伺服器檔案系統,或是war包中,或是在遠程伺服器上,抑或其他位置。不可以用來獲得動態資源,比如,getResource("/index.jsp"),這個方法將返回該jsp檔案的源碼,而不是動態網頁面.可以用 "DispatchingRequests" 獲得動態內容.列出web應用中可被訪問的資源,可以使用getResourcePaths(String path)方法。

             

4)它這樣使用實現的原理或優缺點。(為什麼可以這麼用?)

  servlet並不適合做資料輸出,故需要將資料轉寄給JSP檔案進行美化再輸出給用戶端。

  JSP中可嵌入java代碼,這使得它接收java資料變得可能。同時,由於servletcontext域可使整個web應用共用該資料,因此而帶來“安全執行緒”問題同樣影響對轉寄的資料,故而需要使用request域。

 

(二)Httpsession域(session域)

1)範圍的實際大小。(是什嗎?)

  Httpsession的範圍是:一次會話。

  資料產生之後顯示給使用者了,等會還要使用的情況下使用Httpsession域。

  它是四個域中範圍第二大的域。

2)  範圍的作用。(有什麼用?)

  (會話範圍)在第一次調用request.getSession()方法時,伺服器會檢查是否已經有對應的session。如果沒有,就在記憶體中建立一個session並返回。當一短時間內(預設30分鐘)session沒有被使用,則伺服器會銷毀該session。若伺服器非正常關閉,未到期的session也會跟著銷毀。若調用session提供的invalidate()方法,可以立即銷毀session。

3)怎麼使用這些範圍。(怎麼用?)

  

  a) jsp中操作session    (String)request.getSession().getAttribute("username"); // 擷取    request.getSession().setAttribute("username", "xxx");  // 設定   b) java中操作session    //servlet中    request.getSession();    session.getAttribute("username");    session.setAttribute("username", "xxx");    session.setMaxInactiveInterval(30*60);    session.invalidate();     //struts中方法1    ServletActionContext.getRequest().getSession().setAttribute("username", "xxx");    ServletActionContext.getRequest().getSession().getAttribute("username");    ServletActionContext.getRequest().getSession().setMaxInactiveInterval(30*60);    ServletActionContext.getRequest().getSession().invalidate();    //struts中方法2    ActionContext.getContext().getSession().put("username", "xxx");    ActionContext.getContext().getSession().get("username");    ActionContext.getContext().getSession().clear();   c) web.xml中操作session    <session-config>          <session-timeout>30</session-timeout>      </session-config>   d) tomcat-->conf-->conf/web.xml    <session-config>        <session-timeout>30</session-timeout>    </session-config>

 

 

 

4)它這樣使用實現的原理。(為什麼可以這麼用?)

  HttpSession在伺服器中,為瀏覽器建立獨一無二的記憶體空間,在其中儲存了會話相關的資訊。伺服器建立session出來後,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問伺服器時,都 會帶著session的id號去,伺服器發現客戶機瀏覽器帶session id過來了,就會使用記憶體中與之對應的session為之服務。如果要問我為什麼,我也不知道啊!

 

(三)ServletRequest域(request域)

1)範圍的實際大小。(是什嗎?)

  ServletRequset域是:整個請求鏈(請求轉寄也存在)。

  資料產生之後,只需要使用一次,這種情況下請使用ServletRequset域。

  它是四個域中範圍排第三的域。

2)  範圍的作用。(有什麼用?)

  在整個請求鏈中共用資料。

  最常用到:在servlet中處理好的資料交給JSP顯示,此時參數就可以放置在ServletRequset域中帶過去。

3)怎麼使用這些範圍。(怎麼用?)

  a) 獲得客戶機資訊的方法
      getRequestURL方法返回用戶端發出請求時的完整URL。
      getRequestURI方法返回請求行中的資源名部分。
      getQueryString 方法返回請求行中的參數部分。
      getRemoteAddr方法返回傳出請求的客戶機的IP地址
      getRemoteHost方法返回傳出請求的客戶機的完整主機名稱
      getRemotePort方法返回客戶機所使用的網路連接埠號碼
      getLocalAddr方法返回WEB伺服器的IP地址。
      getLocalName方法返回WEB伺服器的主機名稱
      getMethod得到客戶機請求方式
   b) 獲得客戶機要求標頭
      getHeader(string name)方法
      getHeaders(String name)方法
      getHeaderNames方法
   c) 獲得客戶機請求參數(用戶端提交的資料)
      getParameter(name)方法
      getParameterValues(String name)方法
      getParameterNames方法
      getParameterMap方法

4)它這樣使用實現的原理。(為什麼可以這麼用?)

  在service方法調用前由伺服器建立,傳入service方法。整個請求結束,request生命結束。

 

(四)PageContext域(page域)

1)範圍的實際大小。(是什嗎?)

  PageContext域的作用範圍是:整個JSP頁面。

  它是四個域中範圍最小的一個域。

2)  範圍的作用。(有什麼用?)  
  a) 它可以擷取其它八大隱式對象,可以認為它是一個入口對象。

  b) 擷取其它所有域中的資料。

  c) 跳轉到其它資源。其身上提供了forword和sendRedirect方法,簡化了轉寄和重新導向的操作。 

3)怎麼使用這些範圍。(怎麼用?)

  以下以一個簡單的JSP頁面程式為例:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>pageContext對象_例1</title></head><body><br><%//使用pageContext設定屬性,該屬性預設在page範圍內pageContext.setAttribute("name","地球");request.setAttribute("name","太陽系");session.setAttribute("name","銀河系");//session.putValue("name","麥哲倫系");application.setAttribute("name","宇宙");%>page設定的值:<%=pageContext.getAttribute("name")%><br>request設定的值:<%=pageContext.getRequest().getAttribute("name")%><br>session設定的值:<%=pageContext.getSession().getAttribute("name")%><br>application設定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>範圍1內的值:<%=pageContext.getAttribute("name",1)%><br>範圍2內的值:<%=pageContext.getAttribute("name",2)%><br>範圍3內的值:<%=pageContext.getAttribute("name",3)%><br>範圍4內的值:<%=pageContext.getAttribute("name",4)%><br><!--從最小的範圍page開始,然後是reques、session以及application--><%pageContext.removeAttribute("name",3);%>pageContext修改後的session設定的值:<%=session.getValue("name")%><br><%pageContext.setAttribute("name","宇宙",4);%>pageContext修改後的application設定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>值的尋找:<%=pageContext.findAttribute("name")%><br>屬性name的範圍:<%=pageContext.getAttributesScope("name")%><br></body></html>

 

 

 

顯示結果:

 

page設定的值:地球request設定的值:太陽系session設定的值:銀河系application設定的值:宇宙範圍1內的值:地球範圍2內的值:太陽系範圍3內的值:銀河系範圍4內的值:宇宙pageContext修改後的session設定的值:nullpageContext修改後的application設定的值:宇宙值的尋找:地球屬性name的範圍:1

 

 

 

 

4)它這樣使用實現的原理。(為什麼可以這麼用?)

   pageContext對象,這個對象代表頁面上下文,該對象主要用於訪問JSP之間的共用資料。當對JSP的請求時開始,當響應結束時銷毀。

 

 

 



 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.