Servlet

一肢扯、Servlet定義

Servlet是在服務(wù)器上運(yùn)行的小程序必孤。一個(gè)Servlet就是一個(gè)Java類椰苟,并且可以通過“請求-響應(yīng)”編程模型來訪問的這個(gè)駐留在服務(wù)器內(nèi)存里的Servlet程序

  • Tomcat容器等級(jí):
    Tomcat容器分為四個(gè)等級(jí)牢贸,
    1. Container 容器句惯,集裝箱
      2.Engine 引擎容器
      3.Host 主機(jī)()
      4.Servlet容器(tomcat最低級(jí)別的容器)里面包含了一個(gè)或多Context
      —— Context (上下文,背景输拇,環(huán)境) 一個(gè)context對應(yīng)一個(gè)web項(xiàng)目
      —— Wrapper 容器里的封裝部分。

二贤斜、Servlet層級(jí)關(guān)系:

Servlet(接口)-->GenericServlet(抽象類策吠,與協(xié)議無關(guān)的Servlet)-->HttpServlet(抽象類,實(shí)現(xiàn)了Http協(xié)議的Servlet)-->Custom Servlet(自定義的Servlet)瘩绒。

三猴抹、具體步驟

創(chuàng)建一個(gè)Servlet需要經(jīng)過以下步驟:
(1)新建一個(gè)Java類,繼承“javax.servlet.http.HttpServlet”锁荔;
(2)實(shí)現(xiàn)“doGet()”方法和“doPost()”方法蟀给;
(3)在應(yīng)用配置文件“web.xml”中注冊新建的Servlet;
WebXml配置:

<Servlet>
 <Servlet-name>HelloServlet<Servlet-name>
 <Servlet-class>所在包.HelloServlet</Servlet-class>
</Servlet>
<Servlet-mapping>
 <Servlet-name>HelloServlet</Servlet-name>
 <url-patern>/虛擬路徑</url-patern>
</Servlet-mapping>
  • 虛擬路徑必須以/開頭阳堕,/表示項(xiàng)目的根目錄跋理。


    Paste_Image.png
  • eclipse EE 訪問servlet不用配置web.xml

1、新建servlet的時(shí)候恬总,輸完包名前普、類名,點(diǎn)next壹堰;

2拭卿、這是時(shí)可以看到URL Mappings 為/類名(這里的類名就是步驟1輸入的類名);

3贱纠、假如要通過超鏈接訪問該servlet峻厚,可以這樣寫:<a href="****"></a> ****就是servlet的類名 重啟服務(wù)器!

原理:新建servlet時(shí)生成的URL Mappings跟web.xml文檔中<url-pattern>/****</url-pattern> 的url-pattern作用一樣

四、Servlet生命周期:

  • 1.客戶端發(fā)送請求給服務(wù)器谆焊。
  • 2.服務(wù)器開始接受惠桃,先判斷該請求的servlet實(shí)例是否存在,如果不存在先裝載一個(gè)servlet類并創(chuàng)建實(shí)例。如果存在則直接調(diào)用該servlet的service方法刽射,之后進(jìn)行判斷是調(diào)用doGet方法還是doPost方法军拟。
  • 3.servlet創(chuàng)建實(shí)例后,調(diào)用init方法進(jìn)行初始化誓禁。之后調(diào)用servce方法懈息,判斷是調(diào)用doGet方法還是doPost方法。
  • 4.最后判斷服務(wù)是否需要關(guān)閉摹恰,如果需要?jiǎng)t調(diào)用destroy方法辫继。
Paste_Image.png

五、Servlet的裝載三種情況:

  • 1俗慈、自動(dòng)裝載:某些Servlet如果需要在Servlet容器啟動(dòng)時(shí)就加載姑宽,需要在web.xml下它的<Servlet>標(biāo)簽里中,添加優(yōu)先級(jí)代碼:
    <Servlet>
    <load-on-startup>1<load-on-startup>
    </Servlet>
    數(shù)字越小表示該servlet的優(yōu)先級(jí)越高闺阱,會(huì)先于其他自動(dòng)裝載的優(yōu)先級(jí)較低的先裝載
  • 2炮车、Servlet容器啟動(dòng)后,客戶首次向某個(gè)Servlet發(fā)送請求時(shí)酣溃,Tomcat容器會(huì)加載它
  • 3瘦穆、當(dāng)Servlet類文件被更新后,也會(huì)重新自動(dòng)加載

注意:

  • 1赊豌、Servlet是長期駐留在內(nèi)存里的扛或。某個(gè)Servlet一旦被加載,就會(huì)長期存在于服務(wù)器的內(nèi)存里碘饼,直到服務(wù)器關(guān)閉
  • 2熙兔、Servlet被裝載后,Servlet容器創(chuàng)建一個(gè)Servlet實(shí)例并且調(diào)用Servlet的init()方法進(jìn)行初始化艾恼。在Servlet的整個(gè)生命周期內(nèi)住涉,init()方法只被調(diào)用一次

Jsp內(nèi)置對象out與servlet中response.getWriter()獲得對象并不完全匹配,Jsp中是JspWriter類型蒂萎,而servlet中獲得是PrintWriter類型秆吵,其實(shí)一個(gè)是在Jsp中輸出,一個(gè)是在servlet中輸出五慈,類型肯定不一樣纳寂;
request、response內(nèi)置對象可以通過service()方法傳到doGet()泻拦、doPost()里的request毙芜、response來獲取争拐;
session可以通過request.getSession()來獲纫钢唷晦雨;
application可以通過getServletContext()來獲取隘冲;
exception可以通過Throwable 來獲得闹瞧;
page對應(yīng)this對象;
pageContext對象對應(yīng)PageContext對象展辞;
config可以通過getServletConfig()來獲取奥邮。

  • 絕對路徑:放在任意位置都正確
  • 相對路徑:相對于當(dāng)前資源的路徑

六、Jsp和Servlet跳轉(zhuǎn)問題

一罗珍、JSP跳轉(zhuǎn)到Servlet

  • 1洽腺、相對路徑,如href="servlet/TestServlet"
    注意:如果寫成"/servlet/TestServlet"會(huì)報(bào)錯(cuò),因?yàn)榈谝粋€(gè)'/'表示的是【服務(wù)器根目錄:http://localhost:8080/
  • 2、絕對路徑,通過內(nèi)置成員變量path實(shí)現(xiàn)蝙茶,如href="<%=path%>/servlet/TestServlet"。
    注意:這里的path得到的是項(xiàng)目根目錄藕坯,如【http://localhost:8080/Servlet002_GetFormDemo
    二、Servlet跳轉(zhuǎn)JSP
  • 1画舌、請求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");這里通過request.getContextPath()方法獲得項(xiàng)目根目錄堕担,或者通過"../xxx.jsp"取得上層路徑得到
  • 2、服務(wù)器內(nèi)部轉(zhuǎn)發(fā):request.getRequestDispatcher("../xxx.jsp").forward(req,resp);
    小結(jié):都可以通過../xxx.jsp得到

MVC模式:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曲聂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子佑惠,更是在濱河造成了極大的恐慌朋腋,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜楷,死亡現(xiàn)場離奇詭異旭咽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赌厅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門穷绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人特愿,你說我怎么就攤上這事仲墨。” “怎么了揍障?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵目养,是天一觀的道長。 經(jīng)常有香客問我毒嫡,道長癌蚁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮努释,結(jié)果婚禮上碘梢,老公的妹妹穿的比我還像新娘。我一直安慰自己伐蒂,他們只是感情好煞躬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饿自,像睡著了一般汰翠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昭雌,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天复唤,我揣著相機(jī)與錄音,去河邊找鬼烛卧。 笑死佛纫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的总放。 我是一名探鬼主播呈宇,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼局雄!你這毒婦竟也來了甥啄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炬搭,失蹤者是張志新(化名)和其女友劉穎蜈漓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宫盔,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡融虽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灼芭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片有额。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彼绷,靈堂內(nèi)的尸體忽然破棺而出巍佑,到底是詐尸還是另有隱情,我是刑警寧澤苛预,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布句狼,位于F島的核電站,受9級(jí)特大地震影響热某,放射性物質(zhì)發(fā)生泄漏腻菇。R本人自食惡果不足惜胳螟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筹吐。 院中可真熱鬧糖耸,春花似錦、人聲如沸丘薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洋侨。三九已至舍扰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間希坚,已是汗流浹背边苹。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裁僧,地道東北人个束。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像聊疲,于是被迫代替她去往敵國和親茬底。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容