java web后台_java web 后台那些事
java web 后臺(tái)運(yùn)行原理
當(dāng)Web服務(wù)器接收到一個(gè)HTTP請(qǐng)求時(shí),它會(huì)先判斷請(qǐng)求內(nèi)容——如果是靜態(tài)網(wǎng)頁(yè)數(shù)據(jù),Web服務(wù)器將會(huì)自行處理,然后產(chǎn)生響應(yīng)信息;如果牽涉到動(dòng)態(tài)數(shù)據(jù),Web服務(wù)器會(huì)將請(qǐng)求轉(zhuǎn)交給Servlet容器。此時(shí)Servlet容器會(huì)找到對(duì)應(yīng)的處理該請(qǐng)求的Servlet實(shí)例來(lái)處理,結(jié)果會(huì)送回Web服務(wù)器,再由Web服務(wù)器傳回用戶端。
針對(duì)同一個(gè)Servlet,Servlet容器會(huì)在第一次收到http請(qǐng)求時(shí)建立一個(gè)Servlet實(shí)例,然后啟動(dòng)一個(gè)線程。第二次收到http請(qǐng)求時(shí),Servlet容器無(wú)須建立相同的Servlet實(shí)例,而是啟動(dòng)第二個(gè)線程來(lái)服務(wù)客戶端請(qǐng)求。所以多線程方式不但可以提高Web應(yīng)用程序的執(zhí)行效率,也可以降低Web服務(wù)器的系統(tǒng)負(fù)擔(dān)。
下圖粗暴解釋了請(qǐng)求到容器流程
下圖解釋了請(qǐng)求到容器到servlet周期流程
文字解說(shuō):
1.客戶發(fā)出請(qǐng)求—>Web 服務(wù)器轉(zhuǎn)發(fā)到Web容器Tomcat;
2.Tomcat主線程對(duì)轉(zhuǎn)發(fā)來(lái)用戶的請(qǐng)求做出響應(yīng)創(chuàng)建兩個(gè)對(duì)象:HttpServletRequest和HttpServletResponse;
3.從請(qǐng)求中的URL中找到正確Servlet,Tomcat為其創(chuàng)建或者分配一個(gè)線程,同時(shí)把步驟2創(chuàng)建的兩個(gè)對(duì)象傳遞給該線程;
4.Tomcat調(diào)用Servlet的servic()方法,根據(jù)請(qǐng)求參數(shù)的不同調(diào)用doGet()或者doPost()方法;
5.假設(shè)是HTTP GET請(qǐng)求,doGet()方法生成靜態(tài)頁(yè)面,并組合到響應(yīng)對(duì)象里;
Servlet線程結(jié)束時(shí):Tomcat將響應(yīng)對(duì)象轉(zhuǎn)換為HTTP響應(yīng)發(fā)回給客戶,同時(shí)刪除請(qǐng)求和響應(yīng)對(duì)象。
可以理解Servlet的生命周期:Servlet類加載(對(duì)應(yīng)3步);Servlet實(shí)例化(對(duì)應(yīng)3步);調(diào)用init方法(對(duì)應(yīng)3步);調(diào)用service()方法(對(duì)應(yīng)4、5步);;調(diào)用destroy()方法(對(duì)應(yīng)6步)。
注意:
1.創(chuàng)建Servlet對(duì)象的時(shí)機(jī):
Servlet容器啟動(dòng)時(shí):讀取web.xml配置文件中的信息,構(gòu)造指定的Servlet對(duì)象,創(chuàng)建ServletConfig對(duì)象,同時(shí)將ServletConfig對(duì)象作為參數(shù)來(lái)調(diào)用Servlet對(duì)象的init方法。
在Servlet容器啟動(dòng)后:客戶首次向Servlet發(fā)出請(qǐng)求,Servlet容器會(huì)判斷內(nèi)存中是否存在指定的Servlet對(duì)象,如果沒(méi)有則創(chuàng)建它,然后根據(jù)客戶的請(qǐng)求創(chuàng)建HttpRequest、HttpResponse對(duì)象,從而調(diào)用Servlet 對(duì)象的service方法。
Servlet Servlet容器在啟動(dòng)時(shí)自動(dòng)創(chuàng)建Servlet,這是由在web.xml文件中為Servlet設(shè)置的屬性決定的。從中我們也能看到同一個(gè)類型的Servlet對(duì)象在Servlet容器中以單例的形式存在。
2.在Servlet接口和GenericServlet中是沒(méi)有doGet()、doPost()等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個(gè)Servlet的時(shí)候,都必須實(shí)現(xiàn)doGet或doPost等這些方法。我們經(jīng)常使用的httpServlet是繼承于GenericServlet實(shí)現(xiàn)的。
總結(jié)
以上是生活随笔為你收集整理的java web后台_java web 后台那些事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: harmonyOS智慧屏,在鸿蒙Harm
- 下一篇: java获取年的第一天和最后一天_jav