【轉】Servlet 九大對象和四個做用域

隱式對象java

說明web

 request瀏覽器

轉譯後對應HttpServletRequest/ServletRequest對象tomcat

response服務器

轉譯後對應HttpServletRespons/ServletResponse對象session

sessionapp

轉譯後對應HttpSession對象jsp

application網站

轉譯後對應ServletContext對象this

out

轉譯後對應JspWriter對象,其內部關聯一個PringWriter對象

page

轉譯後對應this

config

 轉譯後對應ServletConfig對象

exception

轉譯後對應Throwable對象,表明由其餘JSP頁面拋出的異常對象,只會出現於JSP錯誤頁面(isErrorPage設置爲true的JSP頁面)

pageContext

轉譯後對應PageContext對象,它提供了JSP頁面資源的封裝,並可設置頁面範圍屬性

Jsp隱含變量

一、out 來源於Java.io.Writer類,它用於發送輸出流到客戶端。
二、request 來源於javax.servlet.http.HttpServletRequest接口。它被關聯到每個HTTP請求。
三、response 來源於javax.servlet.http.HttpServletResponse。response對象用於把取得的數據返回到客戶端。
四、pageContext 提供訪問JSP頁面的命名空間。它也提供用來訪問其餘的JSP隱含對象。
五、session 來源於javax.servlet.http.HttpSession。它用於存儲客戶端請求的信息,所以它是有狀態交互式的。
六、application 來源於javax.servlet.ServletContext。
七、config 來源於ServletConfig,它包含了當前JSP/Servlet所在的WEB應用的配置信息。
八、page 來源於當前被訪問JSP頁面的實例化。它實際使用的是JSP轉換成的Servlet。
九、exception 用於捕獲JSP拋出的異常。它只有在JSP頁面屬性isErrorPage=true時纔可用。

JSP九種內置對象:

一  request對象:

該對象封裝了用戶提交的信息,經過調用該對象相應的方法能夠獲取封裝的信息, 即便用該對象能夠獲取用戶提交信息。 客戶端的請求參數都被封裝到這個對象裏面

二  response對象:

對客戶的請求作出動態的響應,向客戶端發送數據。 

三  session對象

1.什麼是session:session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動建立,完成會話期管理。 
從一個客戶打開瀏覽器並鏈接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反覆鏈接,反覆刷新一個頁面,服務器應當經過某種辦法知道這是同一個客戶,這就須要session對象。
2.session對象的ID:當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到客戶端,存放在Cookie中,這樣session對象和客戶之間就創建了一一對應的關係。當客戶再訪問鏈接該服務器的其餘頁面時,再也不分配給客戶新的session對象,直到客戶關閉瀏覽器後,服務器端該客戶的session對象才取消,而且和客戶的會話對應關係消失。當客戶從新打開瀏覽器再鏈接到該服務器時,服務器爲該客戶再建立一個新的session對象。

四  aplication對象

1.什麼是application: 
服務器啓動後就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。可是與session不一樣的是,全部客戶的application對象都是同一個,即全部客戶共享這個內置的application對象。
2.application對象經常使用方法: 
(1)public void setAttribute(String key,Object obj): 將參數Object指定的對象obj添加到application對象中,併爲添加的對象指定一個索引關鍵字。
(2)public Object getAttribute(String key): 獲取application對象中含有關鍵字的對象。 

五 out對象

    out 對象是一個輸出流,用來向客戶端輸出數據。out對象用於各類數據的輸出。

六  page java.lang.Object

對應this關鍵字。JSP網頁自己 
page對象是當前頁面轉換後的Servlet類的實例。從轉換後的Servlet類的代碼中,能夠看到這種關係: 
Object page = this; 
在JSP頁面中,不多使用page對象。

七  config

javax.servlet. ServletConfig 的實例,該實例表明該JSP 的配置信息。經常使用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面一般無須配置,也就不存在配置信息。所以,該對象更多地在Servlet 中有效。

八  exception java.lang.Throwable 的實例

該實例表明其餘頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可使用。經常使用的方法有getMessageO和printStackTraceO等。

 

九  pageContext

javax.servlet.jsp.PageContext 的實例,對象直譯時能夠稱做「頁面上下文」對象,表明的是當前頁面運行的一些屬性,經過此對象能夠拿到其餘8大對象,使用該對象能夠訪問頁面中的共享數據。經常使用的方法有getServletContextO和getServletConfigO等。

//使用pageContext 設置屬性,該屬性默認在page 範圍內 
pageContext. setAttribute ("page" , "hello") ; 

  //使用request 設置屬性,該屬性默認在request 範圍內 
request. setAttribute ("request" , "hello"); 

  //使用pageContext將屬性設置在request 範圍中 
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE); 

  // 使用session將屬性設置在session 範圍中 
session.setAttribute("session" , "hello"l; 

  //使用pageContext將屬性設置在session範圍中 
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE); 

  //使用application將屬性設置在application範圍中 
application. setAttribute ("app" , "hello") ; 

  //使用pageContext 將屬性設置在application 範圍中 
pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

 

四個做用域:request域  session域  application域  page域

 

 

application:
全局做用範圍,整個應用程序共享,就是在部署文件中的同一個webApp共享,生命週期爲:應用程序啓動到中止。

 

session:
會話做用域,當用戶首次訪問時,產生一個新的會話,之後服務器就能夠記住這個會話狀態。生命週期:會話超時,或者服務器端強制使會話失效。

 

request:
請求做用域,就是客戶端的一次請求。

 

page
一個JSP頁面。

 

以上做用範圍使愈來愈小, request和page的生命週期都是短暫的,他們之間的區別就是:一個request能夠包含多個page頁(include,forward以及filter)。

 

 

 

 

從顯示的結果來看,咱們能夠直觀的得出結論:

  page裏的變量無法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。

  request裏的變量能夠跨越forward先後的兩頁。可是隻要刷新頁面,它們就從新計算了。

  session和application裏的變量一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啓瀏覽器訪問這頁,session裏的變量就從新計算了。application裏的變量一直在累加,除非你重啓tomcat,不然它會一直變大。

而做用域規定的是變量的有效期限。

  若是把變量放到pageContext裏,就說明它的做用域是page,它的有效範圍只在當前jsp頁面裏。

  從把變量放到pageContext開始,到jsp頁面結束,你均可以使用這個變量。

  若是把變量放到request裏,就說明它的做用域是request,它的有效範圍是當前請求週期。

  所謂請求週期,就是指從http請求發起,到服務器處理結束,返回響應的整個過程。在這個過程當中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裏你均可以使用這個變量。

  若是把變量放到session裏,就說明它的做用域是session,它的有效範圍是當前會話。

  所謂當前會話,就是指從用戶打開瀏覽器開始,到用戶關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要用戶不關瀏覽器,服務器就有辦法知道這些請求是一我的發起的,整個過程被稱爲一個會話(session),而放到會話中的變量,就能夠在當前會話的全部請求裏使用。

  若是把變量放到application裏,就說明它的做用域是application,它的有效範圍是整個應用。

  整個應用是指從應用啓動,到應用結束。咱們沒有說「從服務器啓動,到服務器關閉」,是由於一個服務器可能部署多個應用,固然你關閉了服務器,就會把上面全部的應用都關閉了。

  application做用域裏的變量,它們的存活時間是最長的,若是不進行手工刪除,它們就一直可使用。

  與上述三個不一樣的是,application裏的變量能夠被全部用戶共用。若是用戶甲的操做修改了application中的變量,用戶乙訪問時獲得的是修改後的值。這在其餘scope中都是不會發生的,page, request,session都是徹底隔離的,不管如何修改都不會影響其餘人的數據。

  咱們使用public Object getAttribute(String name)得到變量值,使用public void setAttribute(String name, Object value)將變量值保存到對應做用域中。舉個pageContext的例子就是:

  // page

  Integer countPage = (Integer) pageContext.getAttribute("countPage");

  if (countPage == null) {

  pageContext.setAttribute("countPage", 1);

  } else {

  pageContext.setAttribute("countPage", countPage + 1);

  }

  這裏先從pageContext中取出名爲countPage的整數,由於返回的都是Java.lang.Object類型,因此須要強制轉換成咱們須要的整形。這裏取得的變量若是不存在就會返回null,經過判斷countPage == null來辨別變量是否存在,若是不存在就設置爲1,若是存在就進行累加,最後使用setAttribute()方法將修改後的變量值放入pageContext。將其中的pageContext換成request, session, application就能夠操做其餘三個做用域中的變量。

 

request              請求對象                 類型 javax.servlet.ServletRequest           做用域 Request response             響應對象                 類型 javax.servlet.SrvletResponse           做用域 Page pageContext      頁面上下文對象           類型 javax.servlet.jsp.PageContext          做用域 Page session                會話對象                 類型 javax.servlet.http.HttpSession         做用域 Session  application         應用程序對象             類型 javax.servlet.ServletContext             做用域 Application out                      輸出對象                  類型 javax.servlet.jsp.JspWriter               做用域 Page config                配置對象                  類型 javax.servlet.ServletConfig               做用域 Page page                   頁面對象                  類型 javax.lang.Object                              做用域 Page exception          例外對象                  類型 javax.lang.Throwable                        做用域 page

相關文章
相關標籤/搜索