天天看點

servlet的九大内置對象

隐式對象 說明
 request 轉譯後對應HttpServletRequest/ServletRequest對象
response 轉譯後對應HttpServletRespons/ServletResponse對象
session 轉譯後對應HttpSession對象
application 轉譯後對應ServletContext對象
out 轉譯後對應JspWriter對象,其内部關聯一個PringWriter對象
page 轉譯後對應this
config  轉譯後對應ServletConfig對象
exception 轉譯後對應Throwable對象,代表由其他JSP頁面抛出的異常對象,隻會出現于JSP錯誤頁面(isErrorPage設定為true的JSP頁面)
pageContext 轉譯後對應PageContext對象,它提供了JSP頁面資源的封裝,并可設定頁面範圍屬性

Jsp隐含變量

1、out 來源于Java​.io.Writer類,它用于發送輸出流到用戶端。

2、request 來源于javax.servlet.http.HttpServletRequest接口。它被關聯到每一個HTTP請求。

3、response 來源于javax.servlet.http.HttpServletResponse。response對象用于把取得的資料傳回到用戶端。

4、pageContext 提供通路JSP頁面的命名空間。它也提供用來通路其他的JSP隐含對象。

5、session 來源于javax.servlet.http.HttpSession。它用于存儲用戶端請求的資訊,是以它是有狀态互動式的。

6、application 來源于javax.servlet.ServletContext。

7、config 來源于ServletConfig,它包含了目前JSP/Servlet所在的WEB應用的配置資訊。

8、page 來源于目前被通路JSP頁面的執行個體化。它實際使用的是JSP轉換成的Servlet。

9、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