J2EE--Servlet

  1. 什么是Servlet?
  2. 如何使用Servler瘸羡?
  3. Servlet生命周期
  4. Servlet方法體系
  5. Servlet3.0 注解

1. 什么是Servlet漩仙?

  • Servlet是JavaEE的一個組件,也是JavaEE的一個規(guī)范
  • Servlet程序類必須遵循Servlet的規(guī)范必須實現(xiàn)javax.servlet-Servlet接口
image.png

2. 如何使用Servler犹赖?

Servlet 本身不能獨立運行队他,需要在一個web應(yīng)用中運行的,而一個web應(yīng)用是部署在tomcat中的峻村。

所以開發(fā)一個servlet需要如下幾個步驟:

  1. 創(chuàng)建普通的java類并繼承HTTPServlet
  2. 覆寫service方法
  3. 在service方法中書寫邏輯代碼
  4. 在webapp下的WEB-INF文件夾下的web麸折。xml文件中配置servlet

示例代碼 (前三步)

package servlet;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello,Servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

示例代碼(配置xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>servlet.ServletDemo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>
    
</web-app>

運行項目地址

image.png

控制臺打印輸出結(jié)果

image.png

解釋:

  • 服務(wù)器地址:端口號/webapp下的資源名稱/請求名
  • <servlet>:要添加的Servlet節(jié)點
    • <servlet-name>demo</servlet-name>:Servlet請求名稱
    • <servlet-class>servlet.ServletDemo</servlet-class>:請求需要調(diào)用類名(全限定名,就是包名+類名)
  • <servlet-mapping>:Servlet映射
    • <servlet-name>demo</servlet-name>:需要映射的請求名
    • <url-pattern>/demo</url-pattern>:請求地址

3.Servlet 生命周期

  1. 加載Servlet類粘昨。
  2. 創(chuàng)建Servlet實例垢啼。調(diào)用Servlet類的init()方法。
  3. 調(diào)用Servlet類的service()方法张肾。
  4. 調(diào)用Servlet類的destroy()方法

Servlet 生命周期流程圖

Servlet生命周期.png

如上圖所顯示芭析,servlet有三種狀態(tài)模式:新建、就緒吞瞪、結(jié)束

  • 創(chuàng)建新的Servlet的時候處于新建狀態(tài)馁启。
  • 調(diào)用Servlet類的init()方法后,Servlet處于就緒狀態(tài)芍秆,在就緒狀態(tài)下Servlet執(zhí)行任務(wù)进统。
  • 當(dāng)web容器調(diào)用Servlet類的destroy()方法后,Servlet處于結(jié)束狀態(tài)浪听。

分步驟解釋生命周期

3.1 加載Servlet類

  • 類加載器負(fù)責(zé)加載servlet類螟碎。
  • 默認(rèn)當(dāng)Web容器接收到servlet的第一個請求時,將加載servlet類迹栓。
訪問方式 <load-on-startup>
第一次被訪問時創(chuàng)建 負(fù)數(shù)
在服務(wù)器啟動時創(chuàng)建 0或正整數(shù)

3.2 創(chuàng)建Servlet實例

  • Web容器在加載servlet類之后創(chuàng)建一個servlet的實例掉分。
  • servlet實例在servlet生命周期中只創(chuàng)建一次

3.3 調(diào)用init方法

  • Web容器在創(chuàng)建servlet實例后調(diào)用init方法一次。
  • init方法用于初始化servlet克伊。
  • Servlet的init()方法酥郭,只執(zhí)行一次

它是javax.servlet.Servlet接口的生命周期方法。init方法的語法如下:

public void init(ServletConfig config) throws ServletException

3.4 調(diào)用service方法

  • 每當(dāng)接收到servlet的請求時愿吹,Web容器都會調(diào)用service()方法不从。
  • 如果servlet未初始化,則遵循上述前三個步驟犁跪,然后調(diào)用service()方法
  • 如果servlet被初始化椿息,它調(diào)用service()方法歹袁。
  • 每次訪問Servlet時,Service方法都會被調(diào)用一次

Servlet接口的service方法的語法如下:

public void service(ServletRequest request, ServletResponse response)   
  throws ServletException, IOException

3.5 調(diào)用destroy方法

  • 從服務(wù)中刪除servlet實例之前寝优,Web容器調(diào)用destroy()方法条舔。
  • 它使servlet有機(jī)會清理所有資源,例如內(nèi)存乏矾,線程等孟抗。

Servlet接口的destroy方法的語法如下:

public void destroy()
  • servlet僅初始化一次
  • Servlet的init方法,只執(zhí)行一次钻心,說明一個Servlet在內(nèi)存中只存在一個對象凄硼,Servlet是單例的
    多個用戶同時訪問時,可能存在線程安全問題捷沸。
    解決:盡量不要在Servlet中定義成員變量摊沉。即使定義了成員變量,也不要對修改值

4.Servlet體系介紹

image.png
  • GenericServlet:將Servlet接口中其他的方法做了默認(rèn)空實現(xiàn)亿胸,只將service()方法作為抽象。將來定義Servlet類時预皇,可以繼承GenericServlet侈玄,實現(xiàn)service()方法即可
  • HttpServlet:對http協(xié)議的一種封裝,簡化操作(只使用這個類)
    1. 定義類繼承HttpServlet
    2. 復(fù)寫doGet/doPost方法
image.png
doPOST.png

5.Servlet3.0 注解

  • 好處:支持注解配置吟温⌒蛳桑可以不需要web.xml了。
  • 操作步驟:
    1. 創(chuàng)建JavaEE項目鲁豪,選擇Servlet的版本3.0以上潘悼,可以不創(chuàng)建web.xml
    2. 定義一個類,實現(xiàn)Servlet接口
    3. 復(fù)寫方法
    4. 在類上使用@WebServlet注解爬橡,進(jìn)行配置 @WebServlet("資源路徑")


      image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末治唤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糙申,更是在濱河造成了極大的恐慌宾添,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柜裸,死亡現(xiàn)場離奇詭異缕陕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疙挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門扛邑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铐然,你說我怎么就攤上這事蔬崩《褡” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵舱殿,是天一觀的道長奥裸。 經(jīng)常有香客問我,道長沪袭,這世上最難降的妖魔是什么湾宙? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮冈绊,結(jié)果婚禮上侠鳄,老公的妹妹穿的比我還像新娘。我一直安慰自己死宣,他們只是感情好伟恶,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毅该,像睡著了一般博秫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眶掌,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天挡育,我揣著相機(jī)與錄音,去河邊找鬼朴爬。 笑死即寒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的召噩。 我是一名探鬼主播母赵,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼具滴!你這毒婦竟也來了凹嘲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤构韵,失蹤者是張志新(化名)和其女友劉穎施绎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞绳,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谷醉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冈闭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俱尼。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萎攒,靈堂內(nèi)的尸體忽然破棺而出遇八,到底是詐尸還是另有隱情矛绘,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布刃永,位于F島的核電站货矮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斯够。R本人自食惡果不足惜囚玫,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望读规。 院中可真熱鬧抓督,春花似錦、人聲如沸束亏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍遍。三九已至定铜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怕敬,已是汗流浹背揣炕。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赖捌,地道東北人祝沸。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓矮烹,卻偏偏與公主長得像越庇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奉狈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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

  • servlet: 一卤唉、簡介: 是jsp前身,在服務(wù)器上運行的小程序仁期,一個servlet相當(dāng)于一個java類桑驱,可由“...
    取名廢同學(xué)閱讀 497評論 0 0
  • J2EE是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件跛蛋,主要可簡化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署熬的,進(jìn)而提高可移植...
    大佛愛讀書閱讀 163評論 0 0
  • 本篇要點:1、servlet入門準(zhǔn)備2赊级、servlet生命周期3押框、request和response對象4、解決中文...
    大數(shù)據(jù)階梯之路閱讀 518評論 0 2
  • Servlet總結(jié) 闡述Servlet和CGI的區(qū)別?CGI的不足之處:Servlet的優(yōu)點: Servlet接口...
    哈哈大圣閱讀 91評論 0 2
  • Servlet總結(jié) 闡述Servlet和CGI的區(qū)別?CGI的不足之處:Servlet的優(yōu)點: Servlet接口...
    程序猿天璇閱讀 380評論 0 6