Servlet接口定義了5個(gè)方法,其中前三個(gè)方法與Servlet生命周期相關(guān):
創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、岳塘網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為岳塘等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。void init(ServletConfig config) throws ServletException
void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
void destory()
java.lang.String getServletInfo()
ServletConfig getServletConfig()
Web容器加載Servlet并將其實(shí)例化后,Servlet生命周期開(kāi)始,容器運(yùn)行其init()方法進(jìn)行Servlet的初始化;請(qǐng)求到達(dá)時(shí)調(diào)用Servlet的service()方法,service()方法會(huì)根據(jù)需要調(diào)用與請(qǐng)求對(duì)應(yīng)的doGet或doPost等方法;當(dāng)服務(wù)器關(guān)閉或項(xiàng)目被卸載時(shí)服務(wù)器會(huì)將Servlet實(shí)例銷(xiāo)毀,此時(shí)會(huì)調(diào)用Servlet的destroy()方法。
forward是容器中控制權(quán)的轉(zhuǎn)向,是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪(fǎng)問(wèn)目標(biāo)地址的URL,把那個(gè)URL 的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來(lái)的,所以它的地址欄中還是原來(lái)的地址。
redirect就是服務(wù)器端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,因此從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址,很明顯redirect無(wú)法訪(fǎng)問(wèn)到服務(wù)器保護(hù)起來(lái)資源,但是可以從一個(gè)網(wǎng)站redirect到其他網(wǎng)站。
forward更加高效,所以在滿(mǎn)足需要時(shí)盡量使用forward(通過(guò)調(diào)用RequestDispatcher對(duì)象的forward()方法,該對(duì)象可以通過(guò)ServletRequest對(duì)象的getRequestDispatcher()方法獲得),并且這樣也有助于隱藏實(shí)際的鏈接;在有些情況下,比如需要訪(fǎng)問(wèn)一個(gè)其它服務(wù)器上的資源,則必須使用重定向(通過(guò)HttpServletResponse對(duì)象調(diào)用其sendRedirect()方法實(shí)現(xiàn))。
JSP有9個(gè)內(nèi)置對(duì)象:
request:封裝客戶(hù)端的請(qǐng)求,其中包含來(lái)自GET或POST請(qǐng)求的參數(shù);
response:封裝服務(wù)器對(duì)客戶(hù)端的響應(yīng);
pageContext:通過(guò)該對(duì)象可以獲取其他對(duì)象;
session:封裝用戶(hù)會(huì)話(huà)的對(duì)象;
application:封裝服務(wù)器運(yùn)行環(huán)境的對(duì)象;
out:輸出服務(wù)器響應(yīng)的輸出流對(duì)象;
config:Web應(yīng)用的配置對(duì)象;
page:JSP頁(yè)面本身(相當(dāng)于Java程序中的this);
exception:封裝頁(yè)面拋出異常的對(duì)象。
ervlet是一個(gè)特殊的Java程序,它運(yùn)行于服務(wù)器的JVM中,能夠依靠服務(wù)器的支持向?yàn)g覽器提供顯示內(nèi)容。JSP本質(zhì)上是Servlet的一種簡(jiǎn)易形式,JSP會(huì)被服務(wù)器處理成一個(gè)類(lèi)似于Servlet的Java程序,可以簡(jiǎn)化頁(yè)面內(nèi)容的生成。Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML分離開(kāi)來(lái)。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。有人說(shuō),Servlet就是在Java中寫(xiě)HTML,而JSP就是在HTML中寫(xiě)Java代碼,當(dāng)然這個(gè)說(shuō)法是很片面且不夠準(zhǔn)確的。JSP側(cè)重于視圖,Servlet更側(cè)重于控制邏輯,在MVC架構(gòu)模式中,JSP適合充當(dāng)視圖(view)而Servlet適合充當(dāng)控制器(controller)。
答:JSP中的四種作用域包括page、request、session和application,具體來(lái)說(shuō):
page代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。
request代表與Web客戶(hù)機(jī)發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁(yè)面,涉及多個(gè)Web組件;需要在頁(yè)面顯示的臨時(shí)數(shù)據(jù)可以置于此作用域。
session代表與某個(gè)用戶(hù)與服務(wù)器建立的一次會(huì)話(huà)相關(guān)的對(duì)象和屬性。跟某個(gè)用戶(hù)相關(guān)的數(shù)據(jù)應(yīng)該放在用戶(hù)自己的session中。
application代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性,它實(shí)質(zhì)上是跨越整個(gè)Web應(yīng)用程序,包括多個(gè)頁(yè)面、請(qǐng)求和會(huì)話(huà)的一個(gè)全局作用域。
由于HTTP協(xié)議本身是無(wú)狀態(tài)的,服務(wù)器為了區(qū)分不同的用戶(hù),就需要對(duì)用戶(hù)會(huì)話(huà)進(jìn)行跟蹤,簡(jiǎn)單的說(shuō)就是為用戶(hù)進(jìn)行登記,為用戶(hù)分配唯一的ID,下一次用戶(hù)在請(qǐng)求中包含此ID,服務(wù)器據(jù)此判斷到底是哪一個(gè)用戶(hù)。
1)URL 重寫(xiě):在URL中添加用戶(hù)會(huì)話(huà)的信息作為請(qǐng)求的參數(shù),或者將唯一的會(huì)話(huà)ID添加到URL結(jié)尾以標(biāo)識(shí)一個(gè)會(huì)話(huà)。
2) 設(shè)置表單隱藏域:將和會(huì)話(huà)跟蹤相關(guān)的字段添加到隱式表單域中,這些信息不會(huì)在瀏覽器中顯示但是提交表單時(shí)會(huì)提交給服務(wù)器。
這兩種方式很難處理跨越多個(gè)頁(yè)面的信息傳遞,因?yàn)槿绻看味家薷腢RL或在頁(yè)面中添加隱式表單域來(lái)存儲(chǔ)用戶(hù)會(huì)話(huà)相關(guān)信息,事情將變得非常麻煩。
3)cookie:cookie有兩種,一種是基于窗口的,瀏覽器窗口關(guān)閉后,cookie就沒(méi)有了;另一種是將信息存儲(chǔ)在一個(gè)臨時(shí)文件中,并設(shè)置存在的時(shí)間。當(dāng)用戶(hù)通過(guò)瀏覽器和服務(wù)器建立一次會(huì)話(huà)后,會(huì)話(huà)ID就會(huì)隨響應(yīng)信息返回存儲(chǔ)在基于窗口的cookie中,那就意味著只要瀏覽器沒(méi)有關(guān)閉,會(huì)話(huà)沒(méi)有超時(shí),下一次請(qǐng)求時(shí)這個(gè)會(huì)話(huà)ID又會(huì)提交給服務(wù)器讓服務(wù)器識(shí)別用戶(hù)身份。會(huì)話(huà)中可以為用戶(hù)保存信息。會(huì)話(huà)對(duì)象是在服務(wù)器內(nèi)存中的,而基于窗口的cookie是在客戶(hù)端內(nèi)存中的。如果瀏覽器禁用了cookie,那么就需要通過(guò)下面兩種方式進(jìn)行會(huì)話(huà)跟蹤。當(dāng)然,在使用cookie時(shí)要注意幾點(diǎn):首先不要在cookie中存放敏感信息;其次cookie存儲(chǔ)的數(shù)據(jù)量有限(4k),不能將過(guò)多的內(nèi)容存儲(chǔ)cookie中;再者瀏覽器通常只允許一個(gè)站點(diǎn)最多存放20個(gè)cookie。當(dāng)然,和用戶(hù)會(huì)話(huà)相關(guān)的其他信息(除了會(huì)話(huà)ID)也可以存在cookie方便進(jìn)行會(huì)話(huà)跟蹤。
4)HttpSession:在所有會(huì)話(huà)跟蹤技術(shù)中,HttpSession對(duì)象是最強(qiáng)大也是功能最多的。當(dāng)一個(gè)用戶(hù)第一次訪(fǎng)問(wèn)某個(gè)網(wǎng)站時(shí)會(huì)自動(dòng)創(chuàng)建HttpSession,每個(gè)用戶(hù)可以訪(fǎng)問(wèn)他自己的HttpSession??梢酝ㄟ^(guò)HttpServletRequest對(duì)象的getSession方法獲得HttpSession,通過(guò)HttpSession的setAttribute方法可以將一個(gè)值放在HttpSession中,通過(guò)調(diào)用HttpSession對(duì)象的getAttribute方法,同時(shí)傳入屬性名就可以獲取保存在HttpSession中的對(duì)象。與上面三種方式不同的是,HttpSession放在服務(wù)器的內(nèi)存中,因此不要將過(guò)大的對(duì)象放在里面,即使目前的Servlet容器可以在內(nèi)存將滿(mǎn)時(shí)將HttpSession中的對(duì)象移到其他存儲(chǔ)設(shè)備中,但是這樣勢(shì)必影響性能。添加到HttpSession中的值可以是任意Java對(duì)象,這個(gè)對(duì)象最好實(shí)現(xiàn)了Serializable接口,這樣Servlet容器在必要的時(shí)候可以將其序列化到文件中,否則在序列化時(shí)就會(huì)出現(xiàn)異常。
Java Web開(kāi)發(fā)中的過(guò)濾器(filter)是從Servlet 2.3規(guī)范開(kāi)始增加的功能,并在Servlet 2.4規(guī)范中得到增強(qiáng)。對(duì)Web應(yīng)用來(lái)說(shuō),過(guò)濾器是一個(gè)駐留在服務(wù)器端的Web組件,它可以截取客戶(hù)端和服務(wù)器之間的請(qǐng)求與響應(yīng)信息,并對(duì)這些信息進(jìn)行過(guò)濾。當(dāng)Web容器接受到一個(gè)對(duì)資源的請(qǐng)求時(shí),它將判斷是否有過(guò)濾器與這個(gè)資源相關(guān)聯(lián)。如果有,那么容器將把請(qǐng)求交給過(guò)濾器進(jìn)行處理。在過(guò)濾器中,你可以改變請(qǐng)求的內(nèi)容,或者重新設(shè)置請(qǐng)求的報(bào)頭信息,然后再將請(qǐng)求發(fā)送給目標(biāo)資源。當(dāng)目標(biāo)資源對(duì)請(qǐng)求作出響應(yīng)時(shí)候,容器同樣會(huì)將響應(yīng)先轉(zhuǎn)發(fā)給過(guò)濾器,在過(guò)濾器中你可以對(duì)響應(yīng)的內(nèi)容進(jìn)行轉(zhuǎn)換,然后再將響應(yīng)發(fā)送到客戶(hù)端。
常見(jiàn)的過(guò)濾器用途主要包括:對(duì)用戶(hù)請(qǐng)求進(jìn)行統(tǒng)一認(rèn)證、對(duì)用戶(hù)的訪(fǎng)問(wèn)請(qǐng)求進(jìn)行記錄和審核、對(duì)用戶(hù)發(fā)送的數(shù)據(jù)進(jìn)行過(guò)濾或替換、轉(zhuǎn)換圖象格式、對(duì)響應(yīng)內(nèi)容進(jìn)行壓縮以減少傳輸量、對(duì)請(qǐng)求或響應(yīng)進(jìn)行加解密處理、觸發(fā)資源訪(fǎng)問(wèn)事件、對(duì)XML的輸出應(yīng)用XSLT等。
過(guò)濾器相關(guān)的接口主要有:Filter、FilterConfig和FilterChain。
Java Web開(kāi)發(fā)中的監(jiān)聽(tīng)器(listener)就是application、session、request三個(gè)對(duì)象創(chuàng)建、銷(xiāo)毀或者往其中添加修改刪除屬性時(shí)自動(dòng)執(zhí)行代碼的功能組件,如下所示:
ServletContextListener:對(duì)Servlet上下文的創(chuàng)建和銷(xiāo)毀進(jìn)行監(jiān)聽(tīng)。
ervletContextAttributeListener:監(jiān)聽(tīng)Servlet上下文屬性的添加、刪除和替換。
HttpSessionAttributeListener:對(duì)Session對(duì)象中屬性的添加、刪除和替換進(jìn)行監(jiān)聽(tīng)。
ServletRequestListener:對(duì)請(qǐng)求對(duì)象的初始化和銷(xiāo)毀進(jìn)行監(jiān)聽(tīng)。
ServletRequestAttributeListener:對(duì)請(qǐng)求對(duì)象屬性的添加、刪除和替換進(jìn)行監(jiān)聽(tīng)。
HttpSessionListener:對(duì)Session的創(chuàng)建和銷(xiāo)毀進(jìn)行監(jiān)聽(tīng)。
補(bǔ)充: session的銷(xiāo)毀有兩種情況:
session超時(shí)(可以在web.xml中通過(guò)<session-config>/<session-timeout>
標(biāo)簽配置超時(shí)時(shí)間);
通過(guò)調(diào)用session對(duì)象的invalidate()方法使session失效。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
標(biāo)題名稱(chēng):Jsp和Servlet有什么區(qū)別?-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://aaarwkj.com/article24/cccdje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、面包屑導(dǎo)航、域名注冊(cè)、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容