天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

一、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)頁展示無法解決,為了解決這個問題,SUN公司提供了一門用于解決上述出現(xiàn)的問題的技術(shù),這就是Servlet技術(shù)。
Servlet是sun公司提供的一門用于開發(fā)動態(tài)web資源的技術(shù)。
Sun公司在其API中提供了一個servlet接口,用戶若想用發(fā)一個動態(tài)web資源(即開發(fā)一個Java程序向瀏覽器輸出數(shù)據(jù)),需要完成以下2個步驟:
編寫一個Java類,實現(xiàn)servlet接口。
把開發(fā)好的Java類部署到web服務(wù)器中。

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

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

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

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

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

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

由于客戶端是通過URL地址訪問web服務(wù)器中的資源,所以Servlet程序若想被外界訪問,必須把servlet程序映射到一個URL地址上,這個工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。
<servlet>元素用于注冊Servlet,它包含有兩個主要的子元素:<servlet-name>和<servlet-class>,分別用于設(shè)置Servlet的注冊名稱和Servlet的完整類名。
一個<servlet-mapping>元素用于映射一個已注冊的Servlet的一個對外訪問路徑,它包含有兩個子元素:<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中的一些小細節(jié):
細節(jié)1:
同一個Servlet可以被映射到多個URL上,即多個<servlet-mapping>元素的<servlet-name>子元素的設(shè)置值可以是同一個Servlet的注冊名。
在Servlet映射到的URL中也可以使用*通配符,但是只能有兩種固定的格式:一種格式是“*.擴展名”,另一種格式是以正斜杠(/)開頭并以“/*”結(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>

細節(jié)2:
對于如下的一些映射關(guān)系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
問題:
當請求URL為“/abc/a.html”,“/abc/*”和“/*”都匹配,哪個servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。
當請求URL為“/abc”時,“/abc/*”和“/abc”都匹配,哪個servlet響應(yīng)
Servlet引擎將調(diào)用Servlet3。
當請求URL為“/abc/a.do”時,“/abc/*”和“*.do”都匹配,哪個servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。
當請求URL為“/a.do”時,“/*”和“*.do”都匹配,哪個servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。
當請求URL為“/xxx/yyy/a.do”時,“/*”和“*.do”都匹配,哪個servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。
細節(jié)3:
如果在<servlet>元素中配置了一個<load-on-startup>元素,那么WEB應(yīng)用程序在啟動時,就會裝載并創(chuàng)建Servlet的實例對象、以及調(diào)用Servlet實例對象的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)用寫一個InitServlet,這個servlet配置為啟動時裝載,為整個web應(yīng)用創(chuàng)建必要的數(shù)據(jù)庫表和數(shù)據(jù)。

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

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

jsp技術(shù)Servlet動態(tài)網(wǎng)頁技術(shù)詳解,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人精品免费青青草原app | 91精品一区二区三区在线观看 | 亚洲成人中文 | 亚洲精品久久久久久蜜臀 | 国产麻豆91网在线看 | 伊人久久综合网站 | 国产亚洲AV无码成人网站 | 国产成人自拍视频在线观看 | 亚洲精品黄色 | 嫩草影院精品视频在线观看 | 第一次处破女完整版电影 | 国产精品国产三级国产AV麻豆 | 精品成人在线视频 | 久久91精品国产91久 | 国产69精品久久久久乱码免费 | 国产AV亚洲精品久久久久 | 国产精品久久久久久久久爆乳 | 亚洲字幕在线观看 | 91久久线看在观草草青青 | 影音先锋av丝袜天堂 | 国产精品xxxav免费视频 | 高h喷水荡肉爽文总攻 | 男女车车的车车网站W98免费 | 做a爱片的全过程 | 国产在线自天天人人 | 成人影院久久久久久影院 | 大桥未久电影在线观看 | 2021年国产精品久久 | 中文字幕久久久 | 国内精品久久人妻无码HD浪潮 | 伊人色综合久久天天 | 一二三四韩国免费观看 | 亚洲精品久久久久久蜜臀 | 少妇精品无码一区二区三区 | JK白丝校花爽到娇喘视频 | 国产午夜一级鲁丝片 | 18禁裸乳无遮挡免费网站 | 快播dvd吧 | 国产中文在线观看 | 国产精品97久久AV色婷婷综合 | 国产真实乱对白精彩 |