大家好,今天來為大家分享servlet的生命周期是什么的一些知識點,和簡單描述servlet的生命周期的問題解析,大家要是都明白,那么可以忽略,如果不太清楚的話可以看看本篇文章,相信很大概率可以解決您的問題,接下來我們就一起來看看吧!
servlet是單例的嗎
你好!
在servlet容器中只有一個servlet實例,處理不同的request請求。request-response請求相應(yīng)是一一對應(yīng)的。并且,request請求被服務(wù)器處理過后產(chǎn)生response給瀏覽器,request請求的生命周期就結(jié)束了。所以不存在數(shù)據(jù)沖突。
就像socket編程中的服務(wù)端口一樣,只有一個,來一個請求,就開啟一個線程去為這個請求服務(wù)。
僅代表個人觀點,不喜勿噴,謝謝。
servlet周期由什么控制
Servlet的生命周期是由servlet的容器來控制的。分為3個階段:初始化階段、運行階段、銷毀階段。
初始化階段:
初始化階段步驟:
Servlet容器加載servlet類,把它的.Class文件中的數(shù)據(jù)讀到內(nèi)存中。
Servlet容器創(chuàng)建servletConfig對象。servletConfig對象包含了servlet的初始化配置信息。此外servlet容器還會使得servletConfig對象與當(dāng)前的web應(yīng)用的servletContext對象關(guān)聯(lián)。
Servlet容器創(chuàng)建servlet對象。
Servlet容器調(diào)用servlet對象的init(ServletConfigconfig)方法。
通過初始化步驟,創(chuàng)建了servlet對象和servletConfig對象,并且servlet對象與servletConfig對象關(guān)聯(lián),而servletConfig對象又與當(dāng)前對象的servletContext對象關(guān)聯(lián)。當(dāng)servlet容器完成servlet后,servlet對象只要通過getServletContext()方法就能得到web應(yīng)用的servletContext對象。
注:servlet初始化的情況:
(1)當(dāng)web應(yīng)用處于運行階段時,特定的servlet被客戶端首次請求訪問。
(2)在web.xml文件中為servlet設(shè)置了<load-on-startup>元素
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servlet.servlet1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當(dāng)中,<load-on-startup>5</load-on-startup>的含義是:
標(biāo)記容器是否在啟動的時候就加載這個servlet。
當(dāng)值為0或者大于0時,表示容器在應(yīng)用啟動時就加載這個servlet;
當(dāng)是一個負數(shù)時或者沒有指定時,則指示容器在該servlet被選擇時才加載。
正數(shù)的值越小,啟動該servlet的優(yōu)先級越高。
(3)當(dāng)web應(yīng)用被重新啟動時,web應(yīng)用中的所有servlet會在特定的時間被重新初始化。
運行階段
在這個階段sevlet可以隨時響應(yīng)客戶端的請求。當(dāng)servlet容器接到訪問特定的servlet請求時,servlet容器會創(chuàng)建針對與這個請求的servletRequest和servletResponse對象,然后調(diào)用service()方法,并把這兩個對象當(dāng)做參數(shù)傳遞給service()方法。Service()方法通過servletRequest對象獲得請求信息,并處理該請求,再通過servletResponse對象生成響應(yīng)結(jié)果。
【不管是post還是get方法提交,都會在service中處理,然后,由service來交由相應(yīng)的doPost或doGet方法處理,如果你重寫了service方法,就不會再處理doPost或doGet了,如果重寫sevice()方法,可以自己轉(zhuǎn)向doPost()或doGet()方法】
注:當(dāng)servlet容器把servlet生成的響應(yīng)結(jié)果發(fā)送給客戶后,servlet容器會銷毀servletRequest和sevletResponse對象。
銷毀階段
當(dāng)Web應(yīng)用被終止時,servlet容器會先調(diào)用web應(yīng)用中所有的servlet對象的destroy()方法,然后在銷毀servlet對象。此外容器還會銷毀與servlet對象關(guān)聯(lián)的servletConfig對象。
在destroy()方法的實現(xiàn)中,可以釋放servlet所占用的資源。如關(guān)閉文件輸入輸出流,關(guān)閉與數(shù)據(jù)庫的連接。
java web是什么原理
如果你是70、80后的程序員,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90后,那你更要看看這篇文章,因為你能找到j(luò)avaweb發(fā)展的歷史。
言歸正傳,Java語言能長期霸占語言排行榜一個重要的原因就是強大的web開發(fā)能力,web開發(fā)是java的基石(在EJB推出的時候當(dāng)時的Sun用基石來描述EJB),所以了解javaweb開發(fā)原理是非常重要的。如果僅僅跟大家聊javaweb開發(fā)原理未免有點單薄,今天我將把javaweb開發(fā)包含的主體內(nèi)容跟頭條的讀者一起分享一下(一直計劃寫關(guān)于javaweb的文章,一直也沒時間寫,今天就當(dāng)時開個頭吧)。
Web開發(fā)的歷史web開發(fā)的歷史其實并不久遠,要搞清楚javaweb開發(fā)的特點(主要是優(yōu)點),首先要了解web開發(fā)的歷史(簡單的回歸一下)。早期的web是非常簡單的結(jié)構(gòu),用戶發(fā)出請求(request),服務(wù)器給出回應(yīng)(response),這個時期的web應(yīng)用,我們稱為website(網(wǎng)站),特點是一些列靜態(tài)內(nèi)容的集合??匆粋€圖示:
圖中的服務(wù)器保持了一系列html腳本來響應(yīng)用戶的請求,可以說這個時期的web應(yīng)用還是比較簡單的,但是卻確立了兩個重要的對象:一個request(代表請求),另一個是response(代表回應(yīng))。如果把web開發(fā)的歷史比喻成一部美國大片的話,那么request和response絕對是這部大片的那女主角,而且每一部都是不可或缺的主角(簡單的說就是死不了)。
看到這個圖,不知道第一批從事web開發(fā)的80后是否和我一樣,已經(jīng)有點感觸了,當(dāng)年為了搞清楚這個結(jié)構(gòu),曾經(jīng)連續(xù)多少個通宵做實驗(實驗環(huán)境比較惡劣)。沒關(guān)系,這僅僅是個開始,我想當(dāng)你看完這篇文章的時候,你會淚流滿面的(相信我)。為了配合一下這張結(jié)構(gòu)圖,我配一張圖片(當(dāng)年的我):
在web發(fā)展過程中,有一個小插曲,就是在website向webapplication發(fā)展的過程中,出現(xiàn)了一個小“玩意兒”,就是applet,很多人了解java都是從使用javaapplet開始的(70,80后那一批程序員)。當(dāng)時風(fēng)靡校園(我當(dāng)時在讀大一)的網(wǎng)易聊天室,哎呀那個火?。ù蠹一貞浺幌履阍趯W(xué)校機房上網(wǎng)時的興奮),這個聊天室就是采用了applet構(gòu)建的,當(dāng)時applet給靜態(tài)頁面一個動態(tài)交互的可能,著實火了一段時間?,F(xiàn)在知道applet的程序員,你已經(jīng)暴露年齡了??匆粡垐D片吧:
我想這個時候,淚點低的70、80后已經(jīng)有點濕潤了吧。濕潤的,自覺在這里停留一分鐘,對著屏幕來張合影,發(fā)個朋友圈。
過了這個插曲,真正的三層web開發(fā)來了,一個里程碑式的web處理方式CGI,看一張圖:
CGI的推出,使得web開發(fā)正式進入了動態(tài)處理時代,服務(wù)器能與客戶有真正意義上的交流了,有能存儲數(shù)據(jù)的數(shù)據(jù)庫了,雖然CGI的使用周期并不長,但是一定要紀(jì)念一下它,畢竟它是里程碑式的變革。javaweb技術(shù)正是踩著CGI的肩膀來到了廣大程序員的面前,javaweb解決了CGI的性能問題。CGI是以進程為單位管理請求的,而javaweb則是以線程為單位,處理能力更強,占用的資源更少,這個核心的組件就是Servlet。看一組資源占用圖,先看CGI的:
再看一下javaweb中的servlet資源圖:
孰優(yōu)孰劣一目了然,Servlet解決相同數(shù)量的請求,卻占用較少的系統(tǒng)資源,這就是為什么廣大程序員拋棄了CGI轉(zhuǎn)向javaweb的原因。
另外,開發(fā)一個Servlet并不復(fù)雜,看一個Servlet編寫的HelloWorld應(yīng)用:
這個代碼結(jié)構(gòu)是不是很親切,是不是很有Coding的感覺,其實Servlet就是個java類而已,只不過增加了幾個限制而已,所以開發(fā)一個Servlet并不復(fù)雜。然后就是把它部署到web服務(wù)器上(Tomcat這個老人家現(xiàn)在身體依然硬朗?。?,然后就等待客戶的請求就可以了。這是Servlet的三層部署圖:
javaweb開發(fā)的技術(shù)體系還包括javabean和jsp,采用MVC結(jié)構(gòu)來組合這三個技術(shù)是javaweb開發(fā)的基礎(chǔ)內(nèi)容,先看一下MVC的功能圖:
再看一下組合使用Servlet+javaBean+JSP的Model2開發(fā)結(jié)構(gòu):
這個結(jié)構(gòu)是標(biāo)準(zhǔn)的Javaweb開發(fā)結(jié)構(gòu),現(xiàn)在是不是很少能看到這么“干凈”的描述圖了?以上就是標(biāo)準(zhǔn)的javaweb開發(fā)的歷史描述,當(dāng)然這并不是說這些內(nèi)容已經(jīng)過時了,反而它一直是官方的標(biāo)準(zhǔn)解決方案。只不過web發(fā)展迎來了另一個階段,繁榮的開源架構(gòu)時代來了。。。
開源框架時代這個時代的典型代表就是Struts、Spring和Hibernate,簡稱SSH。
嚴(yán)格的說,這部分內(nèi)容并不是官方解決方案,但是這些方案卻得到了廣大程序員的擁護,一方面原因是EJB的方案太重了,另一方面開源架構(gòu)使用起來非常方便和靈活,所以從03年以后這些開源框架得到了普通的使用。
下面我簡單描述一下這三個框架:
Struts基于MVC結(jié)構(gòu)的解決方案,分為struts1(已經(jīng)淘汰了,用過Struts1的程序員已經(jīng)老了)和struts2兩個版本,和Python一樣,這兩個版本不兼容,目前Struts2的最新版本是2.5.14.1,簡單的說Struts就是構(gòu)建了現(xiàn)成的MVC框架,程序員往這個框架里加代碼就可以了,使用起來非常方便。
Hibernate框架完成了面向?qū)ο笈c面向關(guān)系的映射,讓java程序以面向?qū)ο蟮姆绞讲僮髅嫦蜿P(guān)系的數(shù)據(jù)庫。整體結(jié)構(gòu)基于DAO進行擴展,很多操作只需要配置一下就可以了,極其方便。
Spring提供了javaBean的容器,池化了javabean,提高了性能,而且核心代碼不到2M,小巧且強大。
關(guān)于這三個框架我在頭條將寫專門的文章介紹,今天就不再進行擴展了。
今天看到這個問題,有感而發(fā),原來我們80后真的老了,80后的程序員,看到這篇文章,有沒有所感觸?關(guān)注我吧,我們一起回憶,再一起繼續(xù)奮斗!
eclipse怎么創(chuàng)建servlet程序
eclipse創(chuàng)建servlet程序方法
1.在Eclipse中,打開文件菜單,選擇新建,然后選擇“DynamicWebProject”。
2.在新建的項目中,右鍵單擊“WebContent”文件夾,然后選擇“新建”,然后選擇“Servlet”。
3.在新建的Servlet對話框中,輸入Servlet的名稱,然后點擊“確定”按鈕。
4.在新創(chuàng)建的Servlet文件中,編寫Servlet的代碼,然后保存文件。
5.在Eclipse中,右鍵單擊項目,然后選擇“發(fā)布”,然后點擊“發(fā)布”按鈕。
6.在瀏覽器中輸入Servlet的URL,然后查看Servlet的輸出結(jié)果。
tomcat的功能
tomcat的作用是:1、管理servlet應(yīng)用的生命周期;2、把客戶端請求的url映射到對應(yīng)的servlet;3、與Servlet程序合作處理HTTP請求。
tomcat含義
tomcat是一個輕量級應(yīng)用服務(wù)器,是支持運行Servlet/JSP應(yīng)用程序的容器,運行在jvm上,綁定IP地址并監(jiān)聽TCP端口。
它是由Apache推出的一款免費開源的Servlet容器,可實現(xiàn)JavaWeb程序的裝載,是配置JSP(JavaServerPage)和JAVA系統(tǒng)必備的一款環(huán)境。它也具有傳統(tǒng)的Web服務(wù)器的功能:處理Html頁面。但是與Apache相比,在處理靜態(tài)Html上的能力略遜一籌。
Tomcat運行時占用的系統(tǒng)資源小,擴展性好,支持負載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能,因而深受java愛好者的喜愛,并得到了部分軟件開發(fā)商的認可,和Apache一樣,早已成為主流Web服務(wù)器的一種。
tomcat作用
(1)管理servlet應(yīng)用的生命周期
(2)把客戶端請求的url映射到對應(yīng)的servlet
(3)與Servlet程序合作處理HTTP請求
編程模擬實現(xiàn)servlet的生命周期
servlet的生命周期分為以下幾個步驟,第一,加載并實例化,第二,初始化,第三,服務(wù),第四,銷毀。容器啟動的時候,會加載servlet的class,并new出這個對象,然后,當(dāng)用戶請求這個servlet的時候,容器會調(diào)用init方法初始化這個servlet,這也是整個生命周期中只會調(diào)用一次的方法,然后,會調(diào)用service方法,由這個方法調(diào)用doGet或doPost方法來響應(yīng)用戶,然后,容器在可用資源緊張或是長期沒有對Servlet發(fā)出請求的情況下,會銷毀這個servlet。
關(guān)于servlet的生命周期是什么的內(nèi)容到此結(jié)束,希望對大家有所幫助。