Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init(初始化)方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX方法(doGet,doPost都是我們要進(jìn)行的工作)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy(銷毀)方法。
注:sevlet的生命周期中,servlet的初始化和銷毀只會(huì)發(fā)生一次,因此init()和destroy()方法只能被servlet容器調(diào)用一次,而service()方法取決與servlet被客戶端訪問(wèn)的次數(shù)
與CGI的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過(guò)多線程方式運(yùn)行其service方法,
一個(gè)實(shí)例可以服務(wù)于多個(gè)請(qǐng)求,并且其實(shí)例一般不會(huì)銷毀,而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,
服務(wù)完成后就銷毀,所以效率上低于servlet。
jsp的九大內(nèi)置對(duì)象:
一.request對(duì)象(一次請(qǐng)求范圍)
該對(duì)象封裝了用戶提交的信息,通過(guò)調(diào)用該對(duì)象相應(yīng)的方法可以獲取封裝的信息,
即使用該對(duì)象可以獲取用戶提交信息。它是HttpServletRequest的實(shí)例。
下面介紹request的常用方法:
1,getParameter();使用如下 String str=request.getParameter();2,setAttribute();和getAttribute();removeAttribute();getMethod();getProtocol();getReqeustURI();getRemoteAddr();
getServerPort();和 getServerName();
二.response對(duì)象(一次請(qǐng)求范圍)
對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)。
三.session對(duì)象(打開(kāi)一個(gè)瀏覽器范圍)
1.什么是session:session對(duì)象是一個(gè)JSP內(nèi)置對(duì)象,它在第一個(gè)JSP頁(yè)面被裝載時(shí)自動(dòng)創(chuàng)建,完成會(huì)話期管理。
從一個(gè)客戶打開(kāi)瀏覽器并連接到服務(wù)器開(kāi)始,到客戶關(guān)閉瀏覽器離開(kāi)這個(gè)服務(wù)器結(jié)束,被稱為一個(gè)會(huì)話。當(dāng)一個(gè)客戶訪問(wèn)一個(gè)服務(wù)器時(shí),可能會(huì)在這個(gè)服務(wù)器的幾個(gè)頁(yè)面之間反復(fù)連接,反復(fù)刷新一個(gè)頁(yè)面,服務(wù)器應(yīng)當(dāng)通過(guò)某種辦法知道這是同一個(gè)客戶,這就需要session對(duì)象。
2.session對(duì)象的ID:當(dāng)一個(gè)客戶首次訪問(wèn)服務(wù)器上的一個(gè)JSP頁(yè)面時(shí),JSP引擎產(chǎn)生一個(gè)session對(duì)象,同時(shí)分配一個(gè)String類型的ID號(hào),JSP引擎同時(shí)將這個(gè)ID號(hào)發(fā)送到客戶端,存放在Cookie中,這樣session對(duì)象和客戶之間就建立了一一對(duì)應(yīng)的關(guān)系。當(dāng)客戶再訪問(wèn)連接該服務(wù)器的其他頁(yè)面時(shí),不再分配給客戶新的session對(duì)象,直到客戶關(guān)閉瀏覽器后,服務(wù)器端該客戶的session對(duì)象才取消,并且和客戶的會(huì)話對(duì)應(yīng)關(guān)系消失。當(dāng)客戶重新打開(kāi)瀏覽器再連接到該服務(wù)器時(shí),服務(wù)器為該客戶再創(chuàng)建一個(gè)新的session對(duì)象。
3.session對(duì)象存在一定時(shí)間過(guò)期問(wèn)題,所以存在session中的名值對(duì)會(huì)在一定時(shí)間后失去,可以通過(guò)更改session有效時(shí)間來(lái)避免這種情況。同時(shí)編程時(shí)盡量避免將大量有效信息存儲(chǔ)在session中,request是一個(gè)不錯(cuò)的替代對(duì)象。
四.a(chǎn)pplication對(duì)象(服務(wù)器啟動(dòng)范圍內(nèi))
1.什么是application:
服務(wù)器啟動(dòng)后就產(chǎn)生了這個(gè)application對(duì)象,當(dāng)客戶在所訪問(wèn)的網(wǎng)站的各個(gè)頁(yè)面之間瀏覽時(shí),這個(gè)application對(duì)象都是同一個(gè),直到服務(wù)器關(guān)閉。但是與session不同的是,所有客戶的application對(duì)象都是同一個(gè),即所有客戶共享這個(gè)內(nèi)置的application對(duì)象。
2.a(chǎn)pplication對(duì)象常用方法:
(1)public void setAttribute(String key,Object obj): 將參數(shù)Object指定的對(duì)象obj添加到application對(duì)象中,并為添加的對(duì)象指定一個(gè)索引關(guān)鍵字。
(2)public Object getAttribute(String key): 獲取application對(duì)象中含有關(guān)鍵字的對(duì)象。
五.out對(duì)象
out對(duì)象是一個(gè)輸出流,用來(lái)向客戶端輸出數(shù)據(jù)。out對(duì)象用于各種數(shù)據(jù)的輸出。
六.Page
page對(duì)象就是指向當(dāng)前JSP頁(yè)面本身,有點(diǎn)象類中的this指針,它是java.lang.Object類的實(shí)例
JSP網(wǎng)頁(yè)本身,page對(duì)象是當(dāng)前頁(yè)面轉(zhuǎn)換后的Servlet類的實(shí)例。從轉(zhuǎn)換后的Servlet類的代碼中,可以看到這種關(guān)系:Object page = this;在JSP頁(yè)面中,很少使用page對(duì)象。
七.config對(duì)象
javax.servlet. ServletConfig 的實(shí)例,該實(shí)例代表該JSP 的配置信息。常用的方法有g(shù)etInitParameter(String paramNarne) 及getInitParameternarnes() 等方法。事實(shí)上, JSP 頁(yè)面通常無(wú)須配置,也就不存在配置信息。因此,該對(duì)象更多地在Servlet 中有效。
八.exception對(duì)象
java.lang.Throwable 的實(shí)例,該實(shí)例代表其他頁(yè)面中的異常和錯(cuò)誤。只有當(dāng)頁(yè)面是錯(cuò)誤處理頁(yè)面,即編譯指令page 的isErrorPage 屬性為true 時(shí),該對(duì)象才可以使用。常用的方法有g(shù)etMessage()和printStackTrace()等。
九. pageContext對(duì)象
javax.servlet.jsp.PageContext 的實(shí)例,該對(duì)象代表該JSP 頁(yè)面上下文,使用該對(duì)象可以訪問(wèn)頁(yè)面中的共享數(shù)據(jù)。常用的方法有g(shù)etServletContext()和getServletConfig()等。
//使用pageContext 設(shè)置屬性,該屬性默認(rèn)在page 范圍內(nèi)
pageContext. setAttribute("page" , "hello") ;
//使用request 設(shè)置屬性,該屬性默認(rèn)在request 范圍內(nèi)
request. setAttribute ("request" , "hello");
//使用pageContext將屬性設(shè)置在request 范圍中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
// 使用session將屬性設(shè)置在session 范圍中
session.setAttribute("session" , "hello");
//使用pageContext將屬性設(shè)置在session范圍中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
//使用application將屬性設(shè)置在application范圍中
application. setAttribute ("app" , "hello") ;
//使用pageContext 將屬性設(shè)置在application 范圍中
pageContext.setAttribute("app2" , "hello" , pageContext.APPLICATION_SCOPE) ;
以上資源來(lái)源于:http://baike.baidu.com/view/3387.htm#4