Servlet是一門專門用于開(kāi)發(fā)動(dòng)態(tài)web資源的技術(shù),Sun公司在其API中提供了一個(gè)Servlet接口(當(dāng)然,我們不會(huì)去直接實(shí)現(xiàn)這個(gè)接口,而是去繼承其實(shí)現(xiàn)類會(huì)更好),因此,狹義的Servlet是指這個(gè)接口,廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類。 使用Servlet開(kāi)發(fā)一個(gè)動(dòng)態(tài)web資源,其實(shí)就是開(kāi)發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)。
Servlet其實(shí)就是一個(gè)運(yùn)行在服務(wù)器上得Java程序,Servlet是J2EE十三門技術(shù)中的一種,因此我們不能去看J2SE的API文檔,如果是初學(xué)者,最好能看專門Servlet的API文檔。我們來(lái)看Servlet的文檔介紹:
從這個(gè)對(duì)Servlet接口的介紹就可以看出,如果要實(shí)現(xiàn)Servlet接口,就要實(shí)現(xiàn)其所有的方法,Servlet程序是運(yùn)行在web服務(wù)器上得,用來(lái)接收和響應(yīng)從客戶端發(fā)來(lái)的請(qǐng)求。當(dāng)然就像我之前說(shuō)的,如果自己寫一個(gè)類來(lái)實(shí)現(xiàn)Servlet接口,那么就要復(fù)寫Servlet所有的方法,但是我們可以繼承其實(shí)現(xiàn)類,例如GenericServlet類或者HttpServlet類,這樣只需要復(fù)寫我們想復(fù)寫的方法即可。
Servlet中的方法包括了其生命周期方法和非生命周期的方法。在Servlet中,生命周期方法包括:init(ServletConfig config)、destroy()、service(ServletRequest req , ServletResponse res),也就是Servlet初始化、對(duì)請(qǐng)求進(jìn)行響應(yīng)服務(wù),和Servlet的銷毀。
除了Servlet的生命周期方法,還有非生命周期方法,如getServletConfig()和getServletInfo()方法,這兩個(gè)方法可以獲得有關(guān)該Servlet的一些信息。
Servlet生命周期是指Servlet實(shí)例從創(chuàng)建到響應(yīng)客戶端請(qǐng)求,最后銷毀的過(guò)程。具體過(guò)程如下:
1、 Server創(chuàng)建一個(gè)Servlet的實(shí)例,也就是調(diào)用了init()方法;
2、一個(gè)客戶端的請(qǐng)求(對(duì)象)到達(dá)Server;
3、 Server將請(qǐng)求發(fā)送給Servlet;
4、Servlet生成對(duì)請(qǐng)求的響應(yīng)(對(duì)象);
5、Server激活Servlet的service()方法,傳遞請(qǐng)求對(duì)象和響應(yīng)對(duì)象作為參數(shù);
6、 Service()方法獲得請(qǐng)求對(duì)象的信息,處理請(qǐng)求,訪問(wèn)資源,獲得所需的信息;
7、Service()方法使用響應(yīng)對(duì)象的方法,將響應(yīng)傳回Server,最終到達(dá)客戶端。Service方法還可能激活其他方法處理請(qǐng)求,如doGet()或者doPost()方法;
8、對(duì)于更多的客戶端請(qǐng)求,Server創(chuàng)建新的請(qǐng)求和響應(yīng)對(duì)象,仍然激活此Servlet的service方法,將這兩個(gè)對(duì)象作為參數(shù)傳遞給它,無(wú)需再調(diào)用init()方法。一般Servlet只初始化一次。當(dāng)Server不在需要Servlet時(shí)(一般是Server關(guān)閉),Server調(diào)用Servlet的destroy()方法銷毀Servlet。
從以上可以看出,Servlet生命周期上得三個(gè)方法是由服務(wù)器調(diào)用,可以說(shuō)是在Servlet存在開(kāi)始到銷毀這個(gè)過(guò)程中的某個(gè)時(shí)刻(如果有事件觸發(fā))則必定會(huì)被執(zhí)行的方法稱為生命周期方法。
因此,在Servlet中最重要的就是service()方法,要想從服務(wù)器端將資源傳回客戶端或者向客戶端發(fā)送數(shù)據(jù),都將在service()方法中進(jìn)行。
從service(ServletTequest req , ServletResponse res)方法來(lái)看,不僅service()方法是由服務(wù)器調(diào)用執(zhí)行,連ServletTequest請(qǐng)求對(duì)象和ServletResponse響應(yīng)對(duì)象也是由服務(wù)器提供,如果我們要寫一個(gè)簡(jiǎn)單的數(shù)據(jù)給客戶端,就可以在service()方法中操作ServletResponse響應(yīng)對(duì)象:
作為入門,那么我們先不用開(kāi)發(fā)工具IDE來(lái)寫Servlet,而是先手工編寫,這樣有助于理解Servlet的底層原理。在Tomcat的【webapps】目錄下建立我的web應(yīng)用,web應(yīng)用所在目錄為【myservlet】,我們先在【myservlet】目錄下創(chuàng)建【W(wǎng)EB-INF】,并且再在【W(wǎng)EB-INF】中創(chuàng)建【classes】目錄,【lib目錄】和web.xml文件,在【classes】目錄中,建立我的Java程序:FirstServlet.java
因?yàn)樽约壕帉懙腟ervlet是由服務(wù)器調(diào)用,因此我們所創(chuàng)建的Servlet實(shí)現(xiàn)類一定要是公共的,開(kāi)始說(shuō)了,我們沒(méi)必要實(shí)現(xiàn)Servlet的全部方法,因此我們向客戶端傳數(shù)據(jù)只需要復(fù)寫service()方法即可,那么我們只需要繼承Servlet的實(shí)現(xiàn)類,接著取得相應(yīng)對(duì)象ServletResponse的輸出流ServletOutputStream就可以向客戶端輸出數(shù)據(jù)了,同時(shí)因?yàn)檩敵鍪亲止?jié)流,所以需要將字符轉(zhuǎn)換成字節(jié)數(shù)組,再手動(dòng)寫入自定義包名和要導(dǎo)入的Java包:
package fjdingsd.web; import java.io.*; import javax.servlet.*; public class FirstServlet extends GenericServlet{ public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException { OutputStream out = res.getOutputStream(); out.write("Hello Servlet".getBytes()); } }
分享文章:servlet基礎(chǔ)知識(shí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://www.yijiale78.com/article4/pgeoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)