請(qǐng)問(wèn)SocketServletTomcat是如何通信的?
socket是java實(shí)現(xiàn)tcp/ip協(xié)議組的抽象,也就是說(shuō)在java環(huán)境中,你要通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),進(jìn)行數(shù)據(jù)交互就不得不使用socket套接字,位于最底層。servlet是j2ee標(biāo)準(zhǔn)用于加速web快發(fā),提供了javaweb開(kāi)發(fā)的高度抽象。tomcat就是對(duì)servlet抽象的具體實(shí)現(xiàn),它屏蔽了復(fù)雜的網(wǎng)絡(luò)交互,提供了對(duì)http協(xié)議的封裝,具體的網(wǎng)絡(luò)交互都由tomcat替程序員做了,程序員只需要按照servlet的標(biāo)準(zhǔn)寫(xiě)一些業(yè)務(wù)代碼就行。 那么試著想想,如果沒(méi)有servlet和tomcat我們需要實(shí)現(xiàn)從一個(gè)普通的頁(yè)面中的某一個(gè)form表單,點(diǎn)擊提交請(qǐng)求到后端某個(gè)接口。大概會(huì)做那些事?1.對(duì)于服務(wù)端來(lái)說(shuō) 肯定需要?jiǎng)?chuàng)建一個(gè)socket,然后綁定ip和port,阻塞等待客戶端進(jìn)行請(qǐng)求。2.頁(yè)面上是不是也得通過(guò)socket進(jìn)行對(duì)服務(wù)端的連接?3.連接成功后開(kāi)始傳輸數(shù)據(jù),是不是得將普通的字符串,文件啥的轉(zhuǎn)化成byte進(jìn)行傳輸.....還有很多限制,就不一一列舉了。這才僅僅是一個(gè)普通的接口,一個(gè)普通的form表單,一個(gè)項(xiàng)目中成千上萬(wàn)個(gè)接口都來(lái)這么搞,肯定不行的。所以出現(xiàn)了servlet規(guī)范,它列舉了關(guān)于java web開(kāi)發(fā)的一切相關(guān)的東西,我們只需要按照它的標(biāo)準(zhǔn)來(lái),繼承一個(gè)servlet就行,然后重寫(xiě)它的service方法,通過(guò)配置在web.xml中就可以直接進(jìn)行交互。參數(shù),數(shù)據(jù)都放在request里面,要啥就去里面取... tomcat就是把servlet的所有標(biāo)準(zhǔn)都實(shí)現(xiàn)的容器,做類(lèi)比 servlet可以看成一個(gè)普通的java interface,那么tomcat就是它的一個(gè)具體的實(shí)現(xiàn)類(lèi)。面向接口編程,是面向的servlet,具體怎么做我們不用關(guān)心都交給tomcat就行。說(shuō)了這么多,水平有限也不知道你能不能理解。僅代表個(gè)人觀點(diǎn),如有不嚴(yán)謹(jǐn)?shù)牡胤剑€望大家多多包涵。