亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Servlet動態網頁技術詳解

2024-09-05 00:17:40
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

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

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

復制代碼 代碼如下:www.CuoXIn.com

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

復制代碼 代碼如下:www.CuoXIn.com

<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>

細節2:
對于如下的一些映射關系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
問題:
當請求URL為“/abc/a.html”,“/abc/*”和“/*”都匹配,哪個servlet響應
Servlet引擎將調用Servlet1。
當請求URL為“/abc”時,“/abc/*”和“/abc”都匹配,哪個servlet響應
Servlet引擎將調用Servlet3。
當請求URL為“/abc/a.do”時,“/abc/*”和“*.do”都匹配,哪個servlet響應
Servlet引擎將調用Servlet1。
當請求URL為“/a.do”時,“/*”和“*.do”都匹配,哪個servlet響應
Servlet引擎將調用Servlet2。
當請求URL為“/xxx/yyy/a.do”時,“/*”和“*.do”都匹配,哪個servlet響應
Servlet引擎將調用Servlet2。
細節3:
如果在<servlet>元素中配置了一個<load-on-startup>元素,那么WEB應用程序在啟動時,就會裝載并創建Servlet的實例對象、以及調用Servlet實例對象的init()方法。
舉例:
復制代碼 代碼如下:www.CuoXIn.com

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

用途:為web應用寫一個InitServlet,這個servlet配置為啟動時裝載,為整個web應用創建必要的數據庫表和數據。

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品免费在线视频| 欧美成人午夜激情| 久久中国妇女中文字幕| 国产成人精品国内自产拍免费看| 日韩一区在线视频| 日韩成人中文电影| 亚洲色图偷窥自拍| 亚洲黄在线观看| 国产一区二区三区在线观看视频| 日韩中文字幕免费视频| 日韩视频亚洲视频| 国内伊人久久久久久网站视频| 欧美视频国产精品| 国产91精品久| 欧美人与性动交a欧美精品| 成人日韩在线电影| 亚洲自拍偷拍区| 日韩精品极品视频| 亚洲视频欧洲视频| 日本欧美一级片| 久久久精品视频在线观看| 另类图片亚洲另类| 国产91色在线| 国产精品678| 国产亚洲成精品久久| 国产综合视频在线观看| 国产aⅴ夜夜欢一区二区三区| 久久天堂av综合合色| 亚洲精品中文字幕女同| 中文字幕日韩在线视频| 色偷偷88888欧美精品久久久| 91在线观看免费| 久久国产精品久久精品| 国产精品欧美日韩久久| 久久男人资源视频| 亚洲女人被黑人巨大进入al| 色婷婷av一区二区三区在线观看| 欧美人在线观看| 日韩视频在线免费| 成人精品一区二区三区| 精品久久久久久久久国产字幕| 国产精品av在线| 欧美裸体视频网站| 国模精品视频一区二区| 亚洲欧美制服中文字幕| 91久久久久久久一区二区| 日韩电影中文 亚洲精品乱码| 91亚洲一区精品| 欧美日韩国产中文精品字幕自在自线| 久久久久久久一区二区| 亚洲国产精久久久久久久| 国产精品久久久久久久久久三级| 国模视频一区二区三区| 久久伊人精品视频| 欧洲亚洲妇女av| 福利一区福利二区微拍刺激| 日韩av在线不卡| 欧美日韩中文字幕综合视频| 亚洲天堂av女优| 亚洲精品短视频| 美女av一区二区三区| 日韩电影视频免费| 九九热在线精品视频| 精品国产欧美一区二区三区成人| 精品人伦一区二区三区蜜桃网站| 亚洲免费av网址| 国产成人涩涩涩视频在线观看| 久久亚洲精品网站| 亚洲精品视频播放| 久久精品国产一区二区三区| 97精品欧美一区二区三区| 亚洲国产天堂久久国产91| 亚洲四色影视在线观看| 亚洲男人天堂2019| 九九热视频这里只有精品| 久久精品亚洲精品| 亚洲成人激情视频| 欧美富婆性猛交| 国产欧美日韩中文字幕在线| www.亚洲男人天堂| 成人在线视频网| 97精品视频在线观看| 亚洲男人天堂九九视频| 91久久久久久国产精品| 欧美日韩国产成人| 国产精品久久久久久久久影视| 国产精品福利无圣光在线一区| 亚洲国产精品推荐| 不用播放器成人网| 亚洲天堂网站在线观看视频| 久久久噜噜噜久噜久久| 久久精品99久久久久久久久| 国产精品99蜜臀久久不卡二区| 日韩美女视频免费看| 国产成人精品视频在线| 亚洲精品成人久久| 日韩电影中文字幕| 精品激情国产视频| 欧美极品少妇xxxxx| 亚洲第一精品自拍| 97热精品视频官网| 97国产在线视频| 日韩精品免费在线播放| 92看片淫黄大片欧美看国产片| 亚洲香蕉av在线一区二区三区| 亚洲国产99精品国自产| 欧美激情精品久久久久久变态| 伊人成人开心激情综合网| 久久精品99国产精品酒店日本| 国产成人精品日本亚洲专区61| 欧美视频专区一二在线观看| 色诱女教师一区二区三区| 色综合久久88色综合天天看泰| 久久精品91久久香蕉加勒比| 欧美肥老太性生活视频| 日韩最新免费不卡| 午夜精品视频网站| 91在线播放国产| 亚洲国产成人精品久久| 日韩精品在线看| 91精品视频播放| 自拍偷拍亚洲精品| 亚洲欧美国产制服动漫| 国产精品久久久一区| 成人在线视频网| 欧美激情久久久久| 久久久精品一区二区| 亚洲伊人一本大道中文字幕| 欧美电影免费观看高清| 68精品国产免费久久久久久婷婷| 欧美性理论片在线观看片免费| 成人黄色片在线| 久久伊人精品天天| 欧美日韩国产色视频| 九九久久精品一区| 国产精品高潮粉嫩av| 日韩av电影在线网| 色综合伊人色综合网| 高清日韩电视剧大全免费播放在线观看| 日韩高清人体午夜| 国产午夜精品视频| 91在线高清免费观看| 亚洲天堂视频在线观看| 日本精品久久久久影院| 这里只有精品久久| 日韩在线观看你懂的| 亚洲人成在线免费观看| 久久综合免费视频| 日韩中文字幕国产| 中文字幕av一区中文字幕天堂| 久久精品视频亚洲| 狠狠躁夜夜躁人人躁婷婷91| 亚洲qvod图片区电影| xvideos成人免费中文版| 亚洲国产精品久久久久久| 97久久精品视频| 欧美性猛交99久久久久99按摩| 久久精品人人爽| 国产精品户外野外| 色琪琪综合男人的天堂aⅴ视频| 国产色婷婷国产综合在线理论片a| 亚洲精品欧美日韩专区| 成人欧美一区二区三区在线| 国产丝袜一区二区三区|