一、Servlet介紹

1.1Servlet的開發(fā)

Servlet是個(gè)特殊的Java類番枚,這個(gè)Java類必須繼承HttpServlet忽肛。每個(gè)Servlet可以響應(yīng)客戶端的請(qǐng)求村砂。
Servlet響應(yīng)客戶端請(qǐng)求的方法:

  • doGet:用于響應(yīng)客戶端的GET請(qǐng)求。
  • doPost:用于響應(yīng)客戶端的Post請(qǐng)求屹逛。
  • doPut:用于響應(yīng)客戶端的Put請(qǐng)求础废。
  • doDelete:用于響應(yīng)客戶端的Delete請(qǐng)求汛骂。

大部分時(shí)候Servlet對(duì)于所有的請(qǐng)求響應(yīng)都完全一樣,可以通過重寫service()方法即可響應(yīng)客戶端的所有請(qǐng)求评腺。

HttpServlet包含兩個(gè)方法:

  • init(ServletConfig config):創(chuàng)建Servlet實(shí)例帘瞭,調(diào)用該方法初始化Servlet資源。
  • destroy():銷毀Servlet實(shí)例蒿讥,自動(dòng)調(diào)用該方法回收資源蝶念。

不用為Servlet類實(shí)例編寫構(gòu)造器,如果要對(duì)Servlet執(zhí)初始化操作诈悍,應(yīng)該將初始化操作放在init()方法中祸轮,如果重寫了init()方法,應(yīng)該在init()方法的第一行調(diào)用super.init(config)侥钳。

Servlet和JSP的區(qū)別:

  • Servlet中沒有內(nèi)置對(duì)象适袜,原來的JSP中的內(nèi)置對(duì)象都須要由程序顯示創(chuàng)建。
  • 對(duì)于靜態(tài)的HTML標(biāo)簽Servlet都須要通過輸出流來逐行輸出舷夺。

Servlet中的service()方法的作用類似JSP生成的Servlet類的_jspService()方法苦酱。因此原JSP頁面的JSP腳本、靜態(tài)HTML內(nèi)容给猾,在普通Servlet里都應(yīng)該轉(zhuǎn)換成service()方法的代碼或輸出語句疫萤;原JSP聲明中的內(nèi)容,對(duì)應(yīng)在Servlet中定義的成員變量或成員方法敢伸。

1.2Servlet的配置

Servlet源文件并不能響應(yīng)用戶的請(qǐng)求扯饶,還必須要將其編譯成class文件。將編譯后的源文件放在WEB-INF/classes路徑下池颈,如果Servlet有包尾序,應(yīng)該講Class文件放在對(duì)應(yīng)的包路徑下。

如果需要采用javac來編譯Servlet類躯砰,必須將Servlet AP接口和類添加到系統(tǒng)的CLASSPATH環(huán)境變量中每币。

從Servlet3.0開始,配置Servlet有兩種方式:

  • 在Servlet類中使用@WebServlet注解進(jìn)行配置琢歇。
  • 通過web.xml進(jìn)行配置兰怠。

使用注解配置Servlet:

  • 不要在web.xml文件根元素中指定metatata-complete="true"。
  • 不要在web.xml文件中配置該Servlet李茫。

web.xml中配置Servlet:

  • 配置Servlet的名字:對(duì)應(yīng)web.xml中的<servlet/>元素揭保。
  • 配置Servlet的URL:對(duì)應(yīng)web.xml中的<servlet-mapping/>元素。

web.xml

<!--配置Servlet的名字-->
<servlet>
<!--指定Servlet名字涌矢,相當(dāng)于@WebServlet的name屬性-->
   <servlet-name>servlet</servlet-name>
<!--指定Servlet的實(shí)現(xiàn)類-->
   <servlet-class>servlet</servlet-class>
</servlet>
<!--配置Servlet的URL-->
<servlet-mapping>
   <!--指定Servlet的名字-->
   <servlet-name>servlet</servlet-name>
   <!--指定Servlet映射的URL地址掖举,相當(dāng)于@WebServlet中的urlPatterns屬性-->
   <servlet-mapping>/aa</servlet-mapping>
</servlet-mapping>

1.3JSP/Servlet的生命周期

創(chuàng)建Servlet實(shí)例有兩個(gè)時(shí)機(jī):

  • 客戶端第一次請(qǐng)求每個(gè)Servlet是,系統(tǒng)創(chuàng)建該Servlet實(shí)例。
  • Web應(yīng)用啟動(dòng)時(shí)立即創(chuàng)建Servlet實(shí)例塔次,即load-on-startup Servlet方篮。

Servlet的生命周期:

  • 創(chuàng)建Servlet實(shí)例。
  • Web容器調(diào)用Servlet的init()方法励负,對(duì)Servlet進(jìn)行實(shí)例化藕溅。
  • Servlet初始化后,將一直存在于容器中继榆,用于響應(yīng)客戶端的請(qǐng)求巾表。
  • Web容器調(diào)用Servlet的destroy方法在關(guān)閉Servlet時(shí)銷毀Servlet。

1.4load-on-startup Servlet

應(yīng)用啟動(dòng)時(shí)就創(chuàng)建Servlet略吨,通常用于有些后臺(tái)的Servlet集币,或者需要攔截很多的請(qǐng)求的Servlet,這種Servlet通常作為應(yīng)用的基礎(chǔ)Servlet使用翠忠,提供重要的后臺(tái)服務(wù)鞠苟。

配置load-on-startup的Servlet有兩種方式:

  • 在web.xml中通過<servlet.../>元素的<load-on-startup.../>子元素進(jìn)行配置。
  • 通過@WebServlet注解的loadOnStartup屬性指定秽之。
    <load-on-startup.../>元素只接收一個(gè)整形值当娱,值越小,Servlet就越先實(shí)例化考榨。

web.xml:


<servlet>
<!--指定Servlet名字跨细,相當(dāng)于@WebServlet的name屬性-->
   <servlet-name>servlet</servlet-name>
<!--指定Servlet的實(shí)現(xiàn)類-->
   <servlet-class>servlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

1.5訪問Servlet的配置參數(shù)

為Servlet配置參數(shù)有兩種方式:

  • 通過@WebServlet的initParams屬性來指定。
  • 通過在web.xml文件的<servlet.../>元素中添加<init-param.../>子元素來指定河质。

訪問Servlet配置參數(shù)通過ServletConfig對(duì)象來完成冀惭,JSP的內(nèi)置對(duì)象config就是此處的ServletConfig,ServletConfig提供如下方法:

  • String getInitParameter(String name):用于獲取初始化參數(shù)掀鹅。

ServletConfig獲取配置參數(shù)的方法和ServletContext獲取配置參數(shù)的方法完全一樣云头,只是ServletConfig是取得當(dāng)前Servlet的配置參數(shù),而ServletContext是獲取整個(gè)Web應(yīng)用的配置參數(shù)淫半。

1.6使用Servlet作為控制器

使用Servlet作為表現(xiàn)層的三大劣勢(shì):

  • 開發(fā)效率低,所有的HTML標(biāo)簽都續(xù)使用頁面輸出流完成匣砖。
  • 不利于團(tuán)隊(duì)開發(fā)科吭。
  • 程序維護(hù)性差。

JSP作為表現(xiàn)層技術(shù)的作用:

  • 負(fù)責(zé)收集用戶請(qǐng)求參數(shù)猴鲫。
  • 將應(yīng)用的處理結(jié)果对人、狀態(tài)數(shù)據(jù)呈現(xiàn)給用戶。

Servlet的作用類似于調(diào)度員拂共,充當(dāng)控制器角色牺弄。

JavaBean充當(dāng)Model,所有的業(yè)務(wù)邏輯宜狐、數(shù)據(jù)邏輯都在

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末势告,一起剝皮案震驚了整個(gè)濱河市蛇捌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咱台,老刑警劉巖络拌,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異回溺,居然都是意外死亡春贸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門遗遵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萍恕,“玉大人,你說我怎么就攤上這事车要≡试粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵屯蹦,是天一觀的道長(zhǎng)维哈。 經(jīng)常有香客問我,道長(zhǎng)登澜,這世上最難降的妖魔是什么阔挠? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮脑蠕,結(jié)果婚禮上购撼,老公的妹妹穿的比我還像新娘。我一直安慰自己谴仙,他們只是感情好迂求,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晃跺,像睡著了一般揩局。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掀虎,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天凌盯,我揣著相機(jī)與錄音,去河邊找鬼烹玉。 笑死驰怎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的二打。 我是一名探鬼主播县忌,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了症杏?” 一聲冷哼從身側(cè)響起装获,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸳慈,沒想到半個(gè)月后饱溢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡走芋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年绩郎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翁逞。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肋杖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挖函,到底是詐尸還是另有隱情状植,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布怨喘,位于F島的核電站津畸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏必怜。R本人自食惡果不足惜肉拓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梳庆。 院中可真熱鬧暖途,春花似錦、人聲如沸膏执。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽更米。三九已至欺栗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間征峦,已是汗流浹背纸巷。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眶痰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓梯啤,卻偏偏與公主長(zhǎng)得像竖伯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法七婴,類相關(guān)的語法祟偷,內(nèi)部類的語法,繼承相關(guān)的語法打厘,異常的語法修肠,線程的語...
    子非魚_t_閱讀 31,639評(píng)論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司户盯,掛了不少嵌施,但最終還是拿到小米、百度莽鸭、阿里吗伤、京東、新浪硫眨、CVTE足淆、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,253評(píng)論 11 349
  • 0 系列目錄# WEB請(qǐng)求處理 WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理 WEB請(qǐng)求處理二:Nginx請(qǐng)求反向代理 本...
    七寸知架構(gòu)閱讀 13,964評(píng)論 22 190
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96礁阁、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,408評(píng)論 0 10
  • 親愛的女兒: 展信佳巧号。 我和你爸爸都很高興能收到你的信,一番閱讀之后姥闭,竟舍不得放下丹鸿。我心有感慨,就借著...
    杯子君閱讀 199評(píng)論 0 2