什么是servlet
servlet是服務(wù)器上運(yùn)行的小程序笛钝,一個(gè)servlet就是一個(gè)java類,通過(guò)“請(qǐng)求-響應(yīng)”模型來(lái)訪問(wèn)servlet。jsp的前身是servlet狗准,所以先有servlet后又jsp跋炕。
tomcat容器
tomcat容器分四個(gè)等級(jí)赖晶,servlet容器負(fù)責(zé)管理context容器,一個(gè)context對(duì)應(yīng)一個(gè)web工程辐烂。
編寫servlet
- 繼承HttpServlet
- 重寫doGet()或doPost()方法
- 在web.xml中注冊(cè)servlet
- 編寫servlet時(shí)可以直接在new->servlet,ide會(huì)自動(dòng)版我們重寫doGet和doPost方法遏插,并且自動(dòng)在web.xml中注冊(cè)servlet
- 編寫jsp頁(yè)面時(shí),將默認(rèn)的第一行的PageEncoding刪除纠修,然后添加ContentType修改字符編碼
servlet生命周期
- 服務(wù)器裝載servlet類并創(chuàng)建實(shí)例胳嘲,此時(shí)會(huì)調(diào)用servlet的構(gòu)造方法
- 調(diào)用init方法
- 響應(yīng)請(qǐng)求,調(diào)用service方法扣草,service方法會(huì)根據(jù)情況自動(dòng)調(diào)用doGet()或doPost()方法了牛。
- 調(diào)用destory()方法
構(gòu)造方法和init方法
Servlet特別之處在于它們的生命周期由web容器管理,它們負(fù)責(zé)創(chuàng)建Servlet實(shí)例辰妙,以及在它們沒(méi)有足夠資源或需要支持更多Servlets實(shí)例的時(shí)候destroy它們鹰祸。Servlet實(shí)現(xiàn)類可以有constructor,但是它們應(yīng)該使用init()方法來(lái)初始化Servlet密浑,因?yàn)橐韵聝蓚€(gè)原因:
- java中蛙婴,你不能在接口里面聲明構(gòu)造函數(shù),也就是說(shuō)你不能對(duì)任何實(shí)現(xiàn)Servlet接口的類強(qiáng)制這個(gè)要求尔破。
- Servlet需要容器創(chuàng)建的ServletConfig對(duì)象來(lái)初始化街图,因?yàn)镾ervletConfig有指向ServletContext object的引用浇衬。
servlet容器裝載servlet的三種情況
- servlet容器啟動(dòng)時(shí)根據(jù)webl.xml中的servlet標(biāo)簽中的loadon-startup標(biāo)簽對(duì)自動(dòng)裝載servlet
- 客戶端向servlet容器首次發(fā)servlet請(qǐng)求,且該servlet尚未被裝載進(jìn)容器台夺,此時(shí)會(huì)被裝載進(jìn)容器
- servlet類文件被更新后径玖,servlet容器會(huì)重新裝載servlet
注:servlet長(zhǎng)期保存在內(nèi)存中,整個(gè)servlet周期中颤介,init()方法只被調(diào)用一次
servlet與jsp內(nèi)置對(duì)象
servlet與表單
獲取表單單個(gè)數(shù)據(jù):request.getParamter("name");
獲取表單多個(gè)數(shù)據(jù)(復(fù)選框類型):request.getParamterValues("name");
將數(shù)據(jù)保存到session范圍中:request.getSession.setAttribute("name", value);
獲取servlet初始化參數(shù)
在web.xml中配置servlet時(shí)梳星,可以配置一些初始化參數(shù)。在servlet中可以通過(guò)ServletConfig接口提供的方法來(lái)獲得這些參數(shù)滚朵。
- 在web.xml中的servlet標(biāo)簽中添加init-param標(biāo)簽冤灾,在其中定義參數(shù)名與參數(shù)值
- 在init()方法中使用this.getInitParamter("param_name")獲得參數(shù)。
MVC模型
-
model1模型
-
model2模型
- model2在model1的基礎(chǔ)上又抽像出一個(gè)servlet層充當(dāng)控制層辕近,使得jsp不用既充當(dāng)展示層又充當(dāng)控制層韵吨。