現(xiàn)在我們來創(chuàng)建一個web應(yīng)用,就叫【myservlet】好了,如下圖所示:
可以從項目窗口中看出,只要創(chuàng)建web工程,就會自動幫我們創(chuàng)建【web-inf】目錄,并在其下創(chuàng)建【lib】目錄和web.xml文件。我們順便來看一下剛創(chuàng)建的web.xml文件內(nèi)容:
web.xml文件中只有設(shè)置主頁而已,為什么先看這個,稍后會說到。
我們當(dāng)然可以按照《servlet的學(xué)習(xí)(一)》中的方法來建立servlet,即創(chuàng)建一個類來繼承servlet的實現(xiàn)類genericservelet,復(fù)寫service()方法,并在web.xml文件中配置這個servlet。
但是!!!我們并不使用繼承g(shù)enericservelet類的方式,而是去繼承g(shù)enericservelet類的子類httpservlet類。這么做有什么好處呢?httpservlet是指能夠處理http請求的servlet,它在原有servlet的接口上添加了一些http協(xié)議處理方法,比servlet接口的功能更加強(qiáng)大,所以我們只需要繼承httpservlet類就可以了。如果你在myeclipse中對web工程建立servlet也是可以看到myeclipse是默認(rèn)將你創(chuàng)建的servlet繼承httpservlet的,如下圖所示:
選擇【servlet】,彈出,寫好包名和我要創(chuàng)建的servlet名:secondservlet,如下圖:
可以看到myeclipse自動將你要創(chuàng)建的servlet的父類選擇為httpservlet。
當(dāng)我們選擇了httpservlet類作為要繼承的servlet父類,那么就該知道httpservlet類已經(jīng)復(fù)寫了service()方法,這個方法內(nèi)的代碼會自動判斷用戶的請求方式,如果為get請求,則調(diào)用httpservlet的doget()方法;如果為post請求,則調(diào)用dopost()方法,因此我們開發(fā)的時候,只需要復(fù)寫doget()方法或dopost()方法,無需再去復(fù)寫service()方法。具體可以看servlet的api文檔中有關(guān)httpservlet的詳細(xì)內(nèi)容。
我們勾選doget方法和dopost方法,其他方法根據(jù)實際情況添加。接著點擊【next】,會看到另一個設(shè)置窗口:
【generate/map web.xml file】:將創(chuàng)建好的servlet映射到web.xml文件中,這樣能省我們很多事,當(dāng)我們選擇將servlet映射進(jìn)web.xml文件中時,就可以根據(jù)下面幾個指定來設(shè)置映射到web.xml文件中哪些內(nèi)容。
【servlet/jsp class name】:這是作為在web.xml文件中<servlet-class>標(biāo)簽中的內(nèi)容。
【servlet/jsp name】:設(shè)置在web.xml文件中<servlet-name>標(biāo)簽中的內(nèi)容。
【servlet/jsp mapping url】:設(shè)置web.xml文件中<servlet-mapping>標(biāo)簽下<url-pattern>標(biāo)簽的內(nèi)容,也就是設(shè)置該servlet的對外訪問路徑。
【file path of web.xml】:該web.xml的路徑,一般不用設(shè)置。
點擊完成之后,我們再來看看web.xml文件,是的,剛才設(shè)置的servlet到web.xml文件的映射都已經(jīng)被myeclipse在web.xml文件中添加好了,為我們省事了不少。如下圖所示:
我們來看看servlet中的內(nèi)容:
是的,有點亂,這是因為myeclipse在創(chuàng)建servlet時是按模板生成的,這里我們可以將這些不需要的代碼先去除,最后的部分我們再來講解如何修改myeclipse中的servlet模板。
在這種繼承httpservlet的servlet開發(fā)中,我們只關(guān)心doget方法和dopost方法,對于不知何時http請求是get方式何時是post方式來說,可以使用以下“小聰明”的方式來滿足在一個方法中同時處理get請求或post請求:
剛才說到在httpservlet中的service()方法已經(jīng)復(fù)寫了其父類genericservlet的service()方法,那我們就來看一下httpservlet中的service()方法,將光標(biāo)點擊httpservlet,然后按下鍵盤“f3”鍵,會發(fā)現(xiàn):
缺少servlet的jar包源碼,這里我們有兩種解決方式:
一、到sun官網(wǎng)或oracle官網(wǎng)下載servlet源碼;
二、到apache-tomcat官網(wǎng)下載tomcat的源碼,這里我選擇這種方式:
選擇zip格式就可以(貌似tar.gz是給linux用的)。
下載解壓后,目錄后面是帶有“src”字樣:
那么我們就可以在myeclipse中點擊“attach source”,因為是導(dǎo)入整個目錄,所以選擇“external folder”即可,導(dǎo)入之后我們就可以看到httpservlet的源碼了,看到其service()方法,代碼較長,這里就不附出,但思想就是先獲取請求對象httpservletrequest的請求方式,然后用if判斷來針對各個請求調(diào)用不同的方法,如doget方法或dopost方法。
接下來我們就可以安心回到剛剛創(chuàng)建的servlet,在doget方法中編寫代碼,我們就寫個簡單的返回客戶端一點數(shù)據(jù)好了:
1
2
3
4
5
6
7
|
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { outputstream out = response.getoutputstream(); out.write( "hello servlet again !" .getbytes()); } |
接著啟動服務(wù)器,并將這個寫好的servlet發(fā)布
最后,我們就能在瀏覽器查看:
記住,在地址欄中輸入完主機(jī)地址和端口(如果有)后,如果web.xml沒有另外設(shè)置的話,跟的是web項目名稱和你在web.xml文件中為該servlet設(shè)置的對外訪問路徑。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。