首頁  >  文章  >  Java  >  最全的java四大域總結(圖文)

最全的java四大域總結(圖文)

PHPz
PHPz原創
2017-04-03 09:49:181494瀏覽

最近學完了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設定檔,加入以下內容

  

#    data

        

    


  

##  從Servlet存取這些初始化參數:

#  從Servlet存取這些初始化參數:

#              ServletContext application=this.getServletContext();

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

 

###  c)讀取資源檔案#########

     使用ServletContext介面可以直接存取web應用程式中的靜態內容文檔結構.包括HTML,GIF和JPEG檔案。下列方法:
         .getResource()
         .getResourceAsStream()
   這兩個方法的參數都是以根的相對路徑.文檔結構可以存在於伺服器檔案系統,或是war套件中,或是在遠端伺服器上,抑或其他位置。不可以用來獲得動態資源,比如,getResource("/index.jsp"),這個方法將返回該jsp文件的源碼,而不是動態頁面.可以用"Dispatching Requests" 獲得動態內容.列出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方法傳回發出請求的客戶機的完整主機名稱
 伺服器的IP位址。
      getLocal
Name方法返回WEB伺服器的主機名稱      getMethod得到客戶機請求方式
   b) 取得客戶機請求頭
  。 ##      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的請求時開始,當回應結束時銷毀。

#

以上是最全的java四大域總結(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn