一维苔、Servlet簡介
Servlet是運行在服務(wù)端的java小程序,是sun公司提供的一套規(guī)范(接口)用來處理客戶端請求懂昂、相應(yīng)給瀏覽器的動態(tài)資源介时。但servlet的實質(zhì)就是java代碼,通過java 的API動態(tài)地向客戶輸出內(nèi)容
- Servlet規(guī)范:包含三個技術(shù)點(三大組件)
1.servlet技術(shù)
2.filter技術(shù)(過濾器)
3.listener技術(shù)(監(jiān)聽器)
二、Servlet快速入門
實現(xiàn)步驟:
1)創(chuàng)建類實現(xiàn)Servlet接口
2)覆蓋尚未實現(xiàn)的方法---service方法
3)在web.xml進行servlet的配置
但在實際開發(fā)中沸柔,一般不直接實現(xiàn)servlet接口循衰,因為需要覆蓋的方法太多,我們一般創(chuàng)建類繼承HttpServlet
實現(xiàn)步驟:
1)創(chuàng)建類繼承HttpServlet類
2)覆蓋doGet和doPost
3)在web.xml中進行servlet的配置
三勉失、servlet的執(zhí)行過程
四、Servlet生命周期
用戶通過單擊某個鏈接或者直接在瀏覽器的地址欄中輸入URL來訪問Servlet原探,Web服務(wù)器接收到請求后乱凿,先將請求交給Servlet容器/web容器。默認第一次訪問時創(chuàng)建Servlet對象咽弦,在服務(wù)器關(guān)閉時銷毀Servlet對象徒蟆。當Servlet對象創(chuàng)建時會調(diào)用init方法,銷毀時會調(diào)用destroy方法型型,而每次訪問Servlet時都會調(diào)用service方法
(1)Servlet接口中的方法
1)init(ServletConfig config)
何時執(zhí)行:servlet對象創(chuàng)建的時候執(zhí)行
ServletConfig : 代表的是該servlet對象的配置信息
2)service(ServletRequest request,ServletResponse response)
何時執(zhí)行:每次請求都會執(zhí)行
ServletRequest :代表請求 認為ServletRequest 內(nèi)部封裝的是 http請求的信息
ServletResponse :代表響應(yīng) 認為要封裝的是響應(yīng)的信息
3)destroy()
何時執(zhí)行:servlet銷毀的時候執(zhí)行
(2)HttpServlet類的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
(3)Servlet的生命周期(面試題)
1)Servlet何時創(chuàng)建
默認第一次訪問servlet時創(chuàng)建該對象
2)Servlet何時銷毀
服務(wù)器關(guān)閉servlet就銷毀了
3)每次訪問必然執(zhí)行的方法
service(ServletRequest req, ServletResponse res)方法
問題:對XXXServlet進行了10次訪問段审,init(),destory()闹蒜,service()寺枉,doGet(),doPost() 一共執(zhí)行力多少次绷落?request對象創(chuàng)建幾個姥闪?response創(chuàng)建幾個?
init():1次
destroy():0次
service():10次
request和response對象:10個
注意:關(guān)于servlet的自動創(chuàng)建service方法調(diào)用的參數(shù)對象req和res
http://blog.sina.com.cn/s/blog_823128380101bhd0.html
四砌烁、Servlet的配置
1.url-pattern的配置方法
五筐喳、ServletContext對象
-
什么是ServletContext對象
ServletContext代表是一個web應(yīng)用的環(huán)境(上下文)對象,ServletContext對象 內(nèi)部封裝是該web應(yīng)用的信息函喉,ServletContext對象一個web應(yīng)用只有一個
- 問題:一個web應(yīng)用有幾個servlet對象避归?----多個
- ServletContext對象的生命周期?
創(chuàng)建:該web應(yīng)用被加載(服務(wù)器啟動或發(fā)布web應(yīng)用(前提管呵,服務(wù)器啟動狀 態(tài)))
銷毀:web應(yīng)用被卸載(服務(wù)器關(guān)閉梳毙,移除該web應(yīng)用)
怎樣獲得ServletContext對象
1)ServletContext servletContext = config.getServletContext();(一般不用)
2)ServletContext servletContext = this.getServletContext();
(this可以不寫,因為getServletContext()在父父類中已經(jīng)定義了如方法1的config對象調(diào)用getServletContext())ServletContext的作用
(1)獲得web應(yīng)用全局的初始化參數(shù)
-
web.xml中配置初始化參數(shù)
Paste_Image.png -
通過context對象獲得參數(shù)
Paste_Image.png
(2)獲得web應(yīng)用中任何資源的絕對路徑(重要 重要 重要)
方法:String path = context.getRealPath(相對于該web應(yīng)用的相對地址);
方法2:類加載器
(3)ServletContext是一個域?qū)ο?/strong>(重要 重要 重要)
什么是域?qū)ο缶柘拢渴裁词怯颍?br> 存儲數(shù)據(jù)的區(qū)域就是域?qū)ο?/p>
ServletContext域?qū)ο蟮淖饔梅秶?br> 整個web應(yīng)用(所有的web資源都可以隨意向 servletcontext域中存取數(shù)據(jù)顿天,數(shù)據(jù)可以共享)
域?qū)ο蟮耐ㄓ玫姆椒ǎ?br> setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);-
示例代碼:記錄登入人的個數(shù)
先在繼承父父類的init()方法中輸寫Servletcontext域中存一個數(shù)據(jù)count
Paste_Image.png
再在登入成功后的條件語句中輸寫從servletcontext中取出count進行運算,最后再將計算好的count結(jié)果值存入servletcontext域中
Paste_Image.png
總結(jié)
1.把編寫的web應(yīng)用工程發(fā)布到tomcat內(nèi)部
2.當服務(wù)器一啟動后就會把web工程加載到tomcat內(nèi)存中
3.在加載的同時會為web工程/項目生成唯一的一個ServletContext對象(可以當成當前的web應(yīng)用)蔑担,多個Servlet對象
4.每一個Servlet對象都有一個ServletConfig對象牌废,而且在創(chuàng)建Servlet對象時都會執(zhí)行init()方法,將ServletConfig對象傳遞給servlet啤握。
5.每一個ServletConfig對象代表每一個Servlet對象的配置信息鸟缕,ServletContext對象代表整個web應(yīng)用的配置信息
6.因為一個web應(yīng)用先有ServletContext對象,才有Servlet對象,才有ServletConfig對象懂从,所以在創(chuàng)建config對象的時候把Context對象的引用放到config對象內(nèi)部維護著授段,所以可以通過config對象獲取到context對象