Servlet被服務(wù)器實例化后,容器運行其init(初始化)方法柠傍,請求到達時運行其service方法掌腰,service方法自動派遣運行與請求對應(yīng)的doXXX方法(doGet楷掉,doPost都是我們要進行的工作)等作喘,當服務(wù)器決定將實例銷毀的時候調(diào)用其destroy(銷毀)方法理疙。
注:sevlet的生命周期中,servlet的初始化和銷毀只會發(fā)生一次泞坦,因此init()和destroy()方法只能被servlet容器調(diào)用一次窖贤,而service()方法取決與servlet被客戶端訪問的次數(shù)
與CGI的區(qū)別在于servlet處于服務(wù)器進程中,它通過多線程方式運行其service方法贰锁,
一個實例可以服務(wù)于多個請求赃梧,并且其實例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進程豌熄,
服務(wù)完成后就銷毀授嘀,所以效率上低于servlet。
jsp的九大內(nèi)置對象:
一.request對象(一次請求范圍)
該對象封裝了用戶提交的信息锣险,通過調(diào)用該對象相應(yīng)的方法可以獲取封裝的信息蹄皱,
即使用該對象可以獲取用戶提交信息。它是HttpServletRequest的實例囱持。
下面介紹request的常用方法:
1夯接,getParameter();使用如下 String str=request.getParameter();2,setAttribute();和getAttribute();removeAttribute();getMethod();getProtocol();getReqeustURI();getRemoteAddr();
getServerPort();和 getServerName();
二.response對象(一次請求范圍)
對客戶的請求做出動態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)纷妆。
三.session對象(打開一個瀏覽器范圍)
1.什么是session:session對象是一個JSP內(nèi)置對象盔几,它在第一個JSP頁面被裝載時自動創(chuàng)建,完成會話期管理掩幢。
從一個客戶打開瀏覽器并連接到服務(wù)器開始逊拍,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束,被稱為一個會話际邻。當一個客戶訪問一個服務(wù)器時芯丧,可能會在這個服務(wù)器的幾個頁面之間反復(fù)連接,反復(fù)刷新一個頁面世曾,服務(wù)器應(yīng)當通過某種辦法知道這是同一個客戶缨恒,這就需要session對象。
2.session對象的ID:當一個客戶首次訪問服務(wù)器上的一個JSP頁面時轮听,JSP引擎產(chǎn)生一個session對象骗露,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發(fā)送到客戶端血巍,存放在Cookie中萧锉,這樣session對象和客戶之間就建立了一一對應(yīng)的關(guān)系。當客戶再訪問連接該服務(wù)器的其他頁面時述寡,不再分配給客戶新的session對象柿隙,直到客戶關(guān)閉瀏覽器后叶洞,服務(wù)器端該客戶的session對象才取消,并且和客戶的會話對應(yīng)關(guān)系消失禀崖。當客戶重新打開瀏覽器再連接到該服務(wù)器時衩辟,服務(wù)器為該客戶再創(chuàng)建一個新的session對象。
3.session對象存在一定時間過期問題帆焕,所以存在session中的名值對會在一定時間后失去惭婿,可以通過更改session有效時間來避免這種情況。同時編程時盡量避免將大量有效信息存儲在session中叶雹,request是一個不錯的替代對象财饥。
四.a(chǎn)pplication對象(服務(wù)器啟動范圍內(nèi))
1.什么是application:
服務(wù)器啟動后就產(chǎn)生了這個application對象,當客戶在所訪問的網(wǎng)站的各個頁面之間瀏覽時折晦,這個application對象都是同一個钥星,直到服務(wù)器關(guān)閉。但是與session不同的是满着,所有客戶的application對象都是同一個谦炒,即所有客戶共享這個內(nèi)置的application對象。
2.a(chǎn)pplication對象常用方法:
(1)public void setAttribute(String key,Object obj): 將參數(shù)Object指定的對象obj添加到application對象中风喇,并為添加的對象指定一個索引關(guān)鍵字宁改。
(2)public Object getAttribute(String key): 獲取application對象中含有關(guān)鍵字的對象。
五.out對象
out對象是一個輸出流魂莫,用來向客戶端輸出數(shù)據(jù)还蹲。out對象用于各種數(shù)據(jù)的輸出。
六.Page
page對象就是指向當前JSP頁面本身耙考,有點象類中的this指針谜喊,它是java.lang.Object類的實例
JSP網(wǎng)頁本身,page對象是當前頁面轉(zhuǎn)換后的Servlet類的實例倦始。從轉(zhuǎn)換后的Servlet類的代碼中斗遏,可以看到這種關(guān)系:Object page = this;在JSP頁面中,很少使用page對象鞋邑。
七.config對象
javax.servlet. ServletConfig 的實例诵次,該實例代表該JSP 的配置信息。常用的方法有g(shù)etInitParameter(String paramNarne) 及getInitParameternarnes() 等方法枚碗。事實上藻懒, JSP 頁面通常無須配置,也就不存在配置信息视译。因此,該對象更多地在Servlet 中有效归敬。
八.exception對象
java.lang.Throwable 的實例酷含,該實例代表其他頁面中的異常和錯誤鄙早。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時椅亚,該對象才可以使用限番。常用的方法有g(shù)etMessage()和printStackTrace()等。
九. pageContext對象
javax.servlet.jsp.PageContext 的實例呀舔,該對象代表該JSP 頁面上下文弥虐,使用該對象可以訪問頁面中的共享數(shù)據(jù)。常用的方法有g(shù)etServletContext()和getServletConfig()等媚赖。
//使用pageContext 設(shè)置屬性霜瘪,該屬性默認在page 范圍內(nèi)
pageContext. setAttribute("page" , "hello") ;
//使用request 設(shè)置屬性,該屬性默認在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) ;
以上資源來源于:http://baike.baidu.com/view/3387.htm#4