濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > Servlet動(dòng)態(tài)網(wǎng)頁技術(shù)詳解

Servlet動(dòng)態(tài)網(wǎng)頁技術(shù)詳解

熱門標(biāo)簽:四川正規(guī)外呼系統(tǒng)軟件 山東ai外呼電銷機(jī)器人好用嗎 汝南縣地圖標(biāo)注app 甘肅銷售電銷機(jī)器人公司 湖北地圖標(biāo)注公司 地圖標(biāo)注專業(yè)和非專業(yè) 智能電話機(jī)器人銷售話術(shù) 福建電銷貓機(jī)器人收費(fèi) 外呼直播語音系統(tǒng)

一、Servlet簡介:
隨著互聯(lián)網(wǎng)技術(shù)的逐步普及,以及人們對互聯(lián)網(wǎng)要求提高,以前那種靜態(tài)網(wǎng)頁已經(jīng)不再是適應(yīng),我們看到今天的網(wǎng)頁不但有flash,vide等等,顯然
以前的那種靜態(tài)網(wǎng)頁展示無法解決,為了解決這個(gè)問題,SUN公司提供了一門用于解決上述出現(xiàn)的問題的技術(shù),這就是Servlet技術(shù)。
Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。
Sun公司在其API中提供了一個(gè)servlet接口,用戶若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:
編寫一個(gè)Java類,實(shí)現(xiàn)servlet接口。
把開發(fā)好的Java類部署到web服務(wù)器中。

二、Servlet的運(yùn)行過程:
Servlet程序是由WEB服務(wù)器調(diào)用,web服務(wù)器收到客戶端的Servlet訪問請求后:
1.Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對象。如果是,則直接執(zhí)行第4步,否則,執(zhí)行第2步。
2.裝載并創(chuàng)建該Servlet的一個(gè)實(shí)例對象。
3.調(diào)用Servlet實(shí)例對象的init()方法。
創(chuàng)建一個(gè)用于封裝HTTP請求消息的HttpServletRequest對象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對象,然后調(diào)用Servlet的service()方法并將請求和響應(yīng)對象作為參數(shù)傳遞進(jìn)去。
4.WEB應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎(WEB服務(wù)器中調(diào)用該Servlet的類)將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。

三、Servlet的生命周期:
1.說到生命周期,那么我們就不得不提一下周期的概念,那么什么是生命周期的概念呢?
生命周期定義:一件事物,什么時(shí)候生,什么時(shí)候死,以及在其生存階段的某一時(shí)點(diǎn)會(huì)觸發(fā)的事件,統(tǒng)稱為該事物的生命周期。
Servlet的生命周期:
通常情況下,服務(wù)器會(huì)在Servlet第一次被調(diào)用時(shí)創(chuàng)建該Servlet類的實(shí)例對象(servlet出生);一旦被創(chuàng)建出來,該Servlet實(shí)例就會(huì)駐留在內(nèi)存中,為后續(xù)請求服務(wù);直至web容器退出,servlet實(shí)例對象才會(huì)被銷毀(servlet死亡)。
在Servlet的整個(gè)生命周期內(nèi),Servlet的init方法只有在servlet被創(chuàng)建時(shí)被調(diào)用一次。
而對一個(gè)Servlet的每次訪問請求都導(dǎo)致Servlet引擎調(diào)用一次servlet的service方法。對于每次訪問請求,Servlet引擎都會(huì)創(chuàng)建一個(gè)新的HttpServletRequest請求對象和一個(gè)新的HttpServletResponse響應(yīng)對象,
然后將這兩個(gè)對象作為參數(shù)傳遞給它調(diào)用的Servlet的service()方法,service方法再根據(jù)請求方式分別調(diào)用doXXX方法。servlet被銷毀前,會(huì)調(diào)用destroy() 方法。

2.Servlet接口的實(shí)現(xiàn)類:
我們知道,如果我們要實(shí)現(xiàn)Servlet接口,就必須全部實(shí)現(xiàn)里面的全部方法,然而里面的所有的方法并不是我們想要的,那這個(gè)時(shí)候,我們實(shí)現(xiàn)這個(gè)方法又有什么用呢?
所以為了解決這個(gè)問題,我們一般不會(huì)去實(shí)現(xiàn)該接口,而是會(huì)去繼承該類的實(shí)現(xiàn)類,這樣我們只要實(shí)現(xiàn)我們想要的方法就行;

2.1SUN公司提供了通常用的實(shí)現(xiàn)類:
Servlet接口SUN公司定義了兩個(gè)默認(rèn)實(shí)現(xiàn)類,分別為:GenericServlet、HttpServlet。

HttpServlet指能夠處理HTTP請求的servlet,它在原有Servlet接口上添加了一些與HTTP協(xié)議處理方法,它比Servlet接口的功能更為強(qiáng)大。因此開發(fā)人員在編寫Servlet時(shí),通常應(yīng)繼承這個(gè)類,而避免直接去實(shí)現(xiàn)Servlet接口。

HttpServlet在實(shí)現(xiàn)Servlet接口時(shí),覆寫了service方法,該方法體內(nèi)的代碼會(huì)自動(dòng)判斷用戶的請求方式,如為GET請求,則調(diào)用HttpServlet的doGet方法,如為Post請求,則調(diào)用doPost方法。因此,開發(fā)人員在編寫Servlet時(shí),
通常只需要覆寫doGet或doPost方法,而不要去覆寫service方法。

由于客戶端是通過URL地址訪問web服務(wù)器中的資源,所以Servlet程序若想被外界訪問,必須把servlet程序映射到一個(gè)URL地址上,這個(gè)工作在web.xml文件中使用servlet>元素和servlet-mapping>元素完成。
servlet>元素用于注冊Servlet,它包含有兩個(gè)主要的子元素:servlet-name>和servlet-class>,分別用于設(shè)置Servlet的注冊名稱和Servlet的完整類名。
一個(gè)servlet-mapping>元素用于映射一個(gè)已注冊的Servlet的一個(gè)對外訪問路徑,它包含有兩個(gè)子元素:servlet-name>和url-pattern>,分別用于指定Servlet的注冊名稱和Servlet的對外訪問路徑。例如:

復(fù)制代碼 代碼如下:

  servlet>
     servlet-name>servlet3/servlet-name>
     servlet-class>cn.baidu.serlvet.Demo3Servlet/servlet-class>
   /servlet>
  servlet-mapping>
  servlet-name>servlet3/servlet-name>
  url-pattern>/demo3/url-pattern>
  /servlet-mapping>

2.2Servlet中的一些小細(xì)節(jié):
細(xì)節(jié)1:
同一個(gè)Servlet可以被映射到多個(gè)URL上,即多個(gè)servlet-mapping>元素的servlet-name>子元素的設(shè)置值可以是同一個(gè)Servlet的注冊名。
在Servlet映射到的URL中也可以使用*通配符,但是只能有兩種固定的格式:一種格式是“*.擴(kuò)展名”,另一種格式是以正斜杠(/)開頭并以“/*”結(jié)尾。

復(fù)制代碼 代碼如下:

servlet-mapping>
  servlet-name>
  AnyName
  /servlet-name>
  url-pattern>
  *.do
  /url-pattern>
/servlet-mapping>
servlet-mapping>
  servlet-name>
  AnyName
  /servlet-name>
  url-pattern>
  /action/*
  /url-pattern>
/servlet-mapping>

細(xì)節(jié)2:
對于如下的一些映射關(guān)系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
問題:
當(dāng)請求URL為“/abc/a.html”,“/abc/*”和“/*”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。
當(dāng)請求URL為“/abc”時(shí),“/abc/*”和“/abc”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet3。
當(dāng)請求URL為“/abc/a.do”時(shí),“/abc/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。
當(dāng)請求URL為“/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。
當(dāng)請求URL為“/xxx/yyy/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。
細(xì)節(jié)3:
如果在servlet>元素中配置了一個(gè)load-on-startup>元素,那么WEB應(yīng)用程序在啟動(dòng)時(shí),就會(huì)裝載并創(chuàng)建Servlet的實(shí)例對象、以及調(diào)用Servlet實(shí)例對象的init()方法。
舉例:
復(fù)制代碼 代碼如下:

servlet>
servlet-name>invoker/servlet-name>
servlet-class>
org.apache.catalina.servlets.InvokerServlet
/servlet-class>
load-on-startup>2/load-on-startup>
/servlet>

用途:為web應(yīng)用寫一個(gè)InitServlet,這個(gè)servlet配置為啟動(dòng)時(shí)裝載,為整個(gè)web應(yīng)用創(chuàng)建必要的數(shù)據(jù)庫表和數(shù)據(jù)。

細(xì)節(jié)4:線程安全問題
當(dāng)多個(gè)客戶端并發(fā)訪問同一個(gè)Servlet時(shí),web服務(wù)器會(huì)為每一個(gè)客戶端的訪問請求創(chuàng)建一個(gè)線程,并在這個(gè)線程上調(diào)用Servlet的service方法,因此service方法內(nèi)如果訪問了同一個(gè)資源的話,就有可能引發(fā)線程安全問題。
如果某個(gè)Servlet實(shí)現(xiàn)了SingleThreadModel接口,那么Servlet引擎將以單線程模式來調(diào)用其service方法。
SingleThreadModel接口中沒有定義任何方法,只要在Servlet類的定義中增加實(shí)現(xiàn)SingleThreadModel接口的聲明即可。
對于實(shí)現(xiàn)了SingleThreadModel接口的Servlet,Servlet引擎仍然支持對該Servlet的多線程并發(fā)訪問,其采用的方式是產(chǎn)生多個(gè)Servlet實(shí)例對象,并發(fā)的每個(gè)線程分別調(diào)用一個(gè)獨(dú)立的Servlet實(shí)例對象。
實(shí)現(xiàn)SingleThreadModel接口并不能真正解決Servlet的線程安全問題,因?yàn)镾ervlet引擎會(huì)創(chuàng)建多個(gè)Servlet實(shí)例對象,而真正意義上解決多線程安全問題是指一個(gè)Servlet實(shí)例對象被多個(gè)線程同時(shí)調(diào)用的問題。
事實(shí)上,在Servlet API 2.4中,已經(jīng)將SingleThreadModel標(biāo)記為Deprecated(過時(shí)的)。

四、Servlet中常用的對象:
1.ServletConfig對象
1.1在Servlet的配置文件中,可以使用一個(gè)或多個(gè)init-param>標(biāo)簽為servlet配置一些初始化參數(shù)。
1.2當(dāng)servlet配置了初始化參數(shù)后,web容器在創(chuàng)建servlet實(shí)例對象時(shí),會(huì)自動(dòng)將這些初始化參數(shù)封裝到ServletConfig對象中,
并在調(diào)用servlet的init方法時(shí),將ServletConfig對象傳遞給servlet。進(jìn)而,程序員通過ServletConfig對象就可以得到當(dāng)前servlet
的初始化參數(shù)信息。
2.ServletContext對象
2.1WEB容器在啟動(dòng)時(shí),它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對應(yīng)的ServletContext對象,它代表當(dāng)前web應(yīng)用。
2.2ServletConfig對象中維護(hù)了ServletContext對象的引用,開發(fā)人員在編寫servlet時(shí),可以通過ServletConfig.getServletContext方法獲得ServletContext對象。
2.3由于一個(gè)WEB應(yīng)用中的所有Servlet共享同一個(gè)ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實(shí)現(xiàn)通訊。
ServletContext對象通常也被稱之為context域?qū)ο蟆?/P>

標(biāo)簽:南充 肇慶 昌都 臨沂 吳忠 白銀 梅州 黔東

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Servlet動(dòng)態(tài)網(wǎng)頁技術(shù)詳解》,本文關(guān)鍵詞  Servlet,動(dòng)態(tài),網(wǎng)頁,技術(shù),詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Servlet動(dòng)態(tài)網(wǎng)頁技術(shù)詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Servlet動(dòng)態(tài)網(wǎng)頁技術(shù)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    龙江县| 宜君县| 鹤庆县| 南投市| 河东区| 许昌县| 清苑县| 遂平县| 西城区| 鄂温| 和平区| 新丰县| 科技| 原平市| 阜宁县| 玉树县| 同仁县| 太仆寺旗| 侯马市| 德昌县| 裕民县| 乌拉特中旗| 蓬溪县| 岐山县| 芷江| 清水县| 桐梓县| 江口县| 酒泉市| 叶城县| 建水县| 云林县| 宜城市| 河南省| 西吉县| 盱眙县| 永安市| 理塘县| 定襄县| 万安县| 耒阳市|