摘要:什么是維基百科上說,全稱,未有中文譯文。其主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)內(nèi)容。從維基百科中可以看到,一般使用的是協(xié)議。響應(yīng)內(nèi)容動態(tài)生成,通常取決于客戶端的請求服務(wù)器將響應(yīng)返回給客戶端。
最近在看教程的時候,又看到了servlet這個詞,突然發(fā)現(xiàn)我好像并不了解他,只是‘有所耳聞’。所以決定學(xué)習(xí)一下。
什么是servlet維基百科上說:
Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的服務(wù)器端程序。其主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容。狹義的Servlet是指Java語言實(shí)現(xiàn)的一個接口,廣義的Servlet是指任何實(shí)現(xiàn)了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。
簡單來說,Servlet就是個接口,一段程序。
通過上面的介紹,可以看到,中間提到交互式地瀏覽和修改數(shù)據(jù),這突然讓我想到了前一段時間學(xué)的socket,通過socket,我們也會實(shí)現(xiàn)客戶端和服務(wù)器的交互效果。
這就讓我有點(diǎn)想知道,servlet和socket有沒有什么關(guān)系呢?
servlet和socket區(qū)別與聯(lián)系在這里,我會從幾方面來簡單分析兩者。
使用協(xié)議socket:使用TCP/IP協(xié)議或UDP協(xié)議,前者居多。
servlet:從維基百科中可以看到,一般使用的是HTTP協(xié)議。
socket:由于是使用的TCP協(xié)議,所以首先必須要做到的就是建立兩端的連接,建立一條持續(xù)連接的通道。
這需要服務(wù)器端先建立起一個服務(wù),然后由客戶端去連接服務(wù)器端,這樣,就建立好了一條連接,然后就可以進(jìn)行隨意的通信了,服務(wù)器可以發(fā)送消息給客戶端,同樣的客戶端也可以發(fā)送消息給服務(wù)端。
整理一下:
1)服務(wù)器端建立服務(wù)
2)客戶端連接服務(wù)器端
3)相互發(fā)送數(shù)據(jù)
然后我們在看一下servlet的工作模式:
由于servlet大多數(shù)是工作在基于http的web服務(wù)器下,所以它的模式想必大家也很熟悉了:
1) 客戶端發(fā)送請求至服務(wù)器端;
2) 服務(wù)器將請求信息發(fā)送至 Servlet;
3) Servlet 生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(yīng)內(nèi)容動態(tài)生成,通常取決于客戶端的請求;
4) 服務(wù)器將響應(yīng)返回給客戶端。
看到這里,更加覺得兩者太像了。沒錯的,由于兩個服務(wù)協(xié)議的關(guān)系,http本來就是對TCP協(xié)議的一個封裝和完善,所以其底層的數(shù)據(jù)傳輸還是使用TCP的那套東西。
對熟悉網(wǎng)絡(luò)的朋友來說,兩者只是工作層面不同的兩個相互協(xié)作的過程而已。
這樣,有這種類似程度也就不覺得那么稀奇了。
java中的實(shí)現(xiàn)首先是socket,通過之前的學(xué)習(xí),socket的使用如下:
// 服務(wù)端 SocketService socketService = new SocketService(xxxx); Socket socket = socketService.accept(); // 客戶端 Socket socket = new Socket("127.0.0.1", xxxx);
主要的就是這三步,也就是說,在具體實(shí)現(xiàn)的時候,我們需要對服務(wù)器和客戶端兩者都進(jìn)行操作。
然后在看一下servlet。下面這段代碼就是最近教程學(xué)習(xí)到的:
@GetMapping("/me") public Teacher me(HttpServletResponse httpServletResponse) { Teacher teacher = new Teacher(); try { teacher = teacherService.me(); } catch (AuthException e) { httpServletResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); } return teacher; }
這里面我們用到了一個叫做HttpServletResponse的東西,相信我們看到了response這個單詞后,立馬就會想到,是不是還有一個叫做HttpServletRequest的東西,沒錯的。
基于http的通信就是有這樣的特點(diǎn),在服務(wù)器獲取到一個請求之后,就會創(chuàng)建出HttpServletResponse和HttpServletRequest這樣兩個對象,然后如果我想向客戶端發(fā)送東西的話,就使用HttpServletResponse;如果我們要從客戶端獲取東西的話,就使用HttpServletRequest。
比如我們上面會想客戶端返回一個狀態(tài)碼,所以使用了HttpServletResponse。
當(dāng)然,如果我們還想傳遞其他關(guān)于信息也是可以的,比如cookie,header,就像我們手動做了一個http響應(yīng)一樣。
看到這里,我們會發(fā)現(xiàn),servlet的操作貌似都沒有涉及到客戶端,全部都是在服務(wù)器端完成的。是這樣的,servlet在前面也說到了,它是一段服務(wù)器端工作的程序。
區(qū)別和聯(lián)系總結(jié)可能看到這里還是沒有怎么明白socket和servlet的區(qū)別是什么,其實(shí)簡單一點(diǎn)說就是:socket比servlet更基本,servlet基于socket。
因?yàn)閮烧叨际菫橥ㄐ哦?wù),所以,當(dāng)我們結(jié)合了網(wǎng)絡(luò)的知識后,會發(fā)現(xiàn)這根我們的網(wǎng)絡(luò)中的網(wǎng)絡(luò)架構(gòu)是那么的一樣,他的工作模式和我們所熟知的網(wǎng)絡(luò)工作模式又是那么的相似。
servlet容器貌似提到了servlet,就不得不提到servlet容器了。
從字面上理解,servlet容器就是裝servlet的東西。
首先,servlet容器同樣也是一段程序。從上面對servlet的學(xué)習(xí),我們大致知道了servlet是工作在服務(wù)器端的,但是現(xiàn)實(shí)情況是,很多的服務(wù)器都不能直接支持servlet,而我們現(xiàn)在又想用servlet,這時就需要編寫一段程序,加在服務(wù)器上,幫我們來處理servlet。這就是我們說的servlet容器。我們接觸過的Tomcat就是一個這樣的容器。
一般的通信是這樣的:
當(dāng)我們需要使用servlet時,他就是這樣的:
然后在web服務(wù)器收到一個http請求之后,就會轉(zhuǎn)給servlet容器,然后再由容器交給servlet去處理。
總結(jié)通過對servlet的簡單了解,突然發(fā)現(xiàn)很多我學(xué)過的東西并沒有我想象的那樣沒用,很多時候,我們遇到的事情或是問題,他們可能都是想通的。也許,對目前所學(xué),我們并不能看到它的實(shí)際作用,但是說不準(zhǔn)哪天,曾經(jīng)不起眼的所學(xué),就會成為解決問題的關(guān)鍵。
相關(guān)參考:
https://blog.csdn.net/snarlfu...
https://zh.wikipedia.org/wiki...
https://blog.csdn.net/wabiaoz...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72512.html
摘要:實(shí)現(xiàn)一個簡單的作用我們的應(yīng)用會運(yùn)行在中,那么顯然請求必定是先到達(dá)的,對于請求實(shí)際上會進(jìn)行如下的處理提供服務(wù)的啟動,必然是服務(wù),支持協(xié)議。進(jìn)行請求的分發(fā)一個可以為多個應(yīng)用提供服務(wù),那么就需要把下發(fā)到不同的應(yīng)用。下面我們就自己來實(shí)現(xiàn)這三步。 實(shí)現(xiàn)一個簡單的Tomcat 1. Tomcat作用 我們的web應(yīng)用會運(yùn)行在Tomcat中,那么顯然請求必定是先到達(dá)Tomcat的,Tomcat對于請...
摘要:注本文使用規(guī)范是規(guī)范中的一個接口,我們可以自己實(shí)現(xiàn)這個接口在方法中實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。我們只是實(shí)現(xiàn)一個簡單的容器示例,所以和其他方法留待以后實(shí)現(xiàn)。運(yùn)行一下實(shí)現(xiàn)首先編寫一個自己的實(shí)現(xiàn)類。 前言 經(jīng)過上一篇文章《一步一步實(shí)現(xiàn)Tomcat——實(shí)現(xiàn)一個簡單的Web服務(wù)器》,我們實(shí)現(xiàn)了一個簡單的Web服務(wù)器,可以響應(yīng)瀏覽器請求顯示靜態(tài)Html頁面,本文更進(jìn)一步,實(shí)現(xiàn)一個Servlet容器,我們不...
閱讀 2897·2021-11-24 09:39
閱讀 3155·2021-11-19 10:00
閱讀 1559·2021-10-27 14:17
閱讀 1826·2021-10-14 09:43
閱讀 979·2021-09-03 10:30
閱讀 3426·2019-08-30 15:54
閱讀 2750·2019-08-30 13:05
閱讀 2025·2019-08-30 11:02