什么是servlet?

馬克-to-win:在講授Servlet之前,我們先回顧一下,我們?cè)谥v 第九章:網(wǎng)絡(luò)編程(Socket)那章時(shí),留過的一個(gè)作業(yè):
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。



課外作業(yè):
6)請(qǐng)做一個(gè)Web服務(wù)器,客戶端能打印出一個(gè)html文件。

馬克-to-win:在講Socket網(wǎng)絡(luò)編程時(shí),在一次請(qǐng)求(request)響應(yīng)(response)交互過程中,作為基本功能,服務(wù)器可以從客戶端獲取數(shù)據(jù),之后再向客戶端寫回去數(shù)據(jù)。這之間只要服務(wù)器從本地讀出一個(gè)html文件即可,完成以上作業(yè)非常簡(jiǎn)單。馬克-to-win:現(xiàn)在如果作業(yè)難度繼續(xù)增加,變成:請(qǐng)做一個(gè)服務(wù)器,要求客戶端,1)能夠傳送java文件名稱到服務(wù)器,2)且運(yùn)行服務(wù)器端的這個(gè)java文件,3)之后把運(yùn)行結(jié)果打印回客戶端。對(duì)于上面作業(yè)的第一第三項(xiàng)功能點(diǎn),對(duì)我們來講易如反掌。對(duì)于第二項(xiàng)功能點(diǎn),我們只需要調(diào)用jdk先編譯java文件成為class,再調(diào)用jre運(yùn)行class文件,輸出結(jié)果不要輸出到屏幕像以往一樣,而是輸入回我們的正編寫的Server程序,接著我們的Server程序就可以把結(jié)果打印回客戶端了。我上面說的只是思路,真正實(shí)現(xiàn)起細(xì)節(jié)來,工作量是驚人的!馬克-to-win:如果你能完成以上第一步作業(yè),恭喜你:你完成了一個(gè)Web服務(wù)器,代表產(chǎn)品:Apache服務(wù)器的雛形。如果你完成了第二步作業(yè),恭喜你:你完成了一個(gè)Web容器的雛形,代表產(chǎn)品Tomcat。咱們作業(yè)當(dāng)中提到的那個(gè)java文件有一個(gè)專業(yè)術(shù)語:叫做Servlet。講到這兒,我認(rèn)為,是時(shí)候可以提出Servlet的標(biāo)準(zhǔn)定義了:Servlet就是一段運(yùn)行在Web容器里的Java程序。(自己不能獨(dú)立運(yùn)行)




其實(shí)可以用兩張圖來概括我剛才講的東西。







我們剛才的作業(yè),是在講java基礎(chǔ)那部分知識(shí)時(shí)留的。我們那一部分學(xué)習(xí)過程當(dāng)中,事無巨細(xì),什么都得我們自己做。從我們學(xué)習(xí)jsp這部分開始,我們就需要逐漸開始改變我們的思想。即大家伙一塊兒來編程,一人編一部分。這樣可以使我們最終的項(xiàng)目變得非常完美。拿上圖舉例說,Web瀏覽器是火狐,Web容器和 Web服務(wù)器是tomcat,都不是我們編的,我們也知道這兩個(gè)軟件的工作量絕不白給,非常完美!我們只需要在瀏覽器地址欄當(dāng)中敲入地址http://localhost:8080/abc/1.html或http: //localhost:8080/abc/bbb,就可以得到我們想要的abc目錄下的1.html或bbb這個(gè)servlet。我們只需要編我們的 1.html和bbb這個(gè)servlet就可以了。8080端口指定localhost機(jī)器當(dāng)中的tomcat必須作出響應(yīng)。(端口對(duì)應(yīng)軟件).

馬克-to-win:裝個(gè)Tomcat,編一段java程序,全世界的人,都可以利用火狐等有著漂亮界面的瀏覽器在他自己的機(jī)器上執(zhí)行我們編的一段java 程序。這明顯比前一段時(shí)間我們學(xué)的客戶端服務(wù)器的Socket的技術(shù),要先進(jìn)了很多。最大的原因是我們不用把大量時(shí)間花在編寫瀏覽器和Web容器上。我們只需要把精力集中在編寫這個(gè)Servlet上就可以了。這servlet技術(shù)太神奇了!Sun公司是如何實(shí)現(xiàn)這件事情的呢?