JavaWeb之Servlet

概念

Servlet 是服務(wù)端的組件瓷叫,運行在 Servlet 容器中妄辩,而 Servlet 容器負責 Servlet 和 客戶的通信以及調(diào)用 Servlet 的方法春瞬,Servlet 和客戶的通信采用“請求/響應(yīng)”的模式凳寺。

可以完成以下功能:

1鸭津、創(chuàng)建并返回基于客戶請求的動態(tài) HTML 頁面

2、創(chuàng)建可以嵌入到現(xiàn)有 HTML 頁面中的部分 HTML 頁面

3肠缨、與其他服務(wù)器資源進行通信

使用

當項目里找不到? Servlet 類時逆趋,需要在 Project Structure 中的 Libraries 進行添加 jar 包。

創(chuàng)建類 helloServlet 并實現(xiàn) Servlet:

在 web.xml 文件里配置和映射 Servlet:

注:必須配置和映射晒奕,為了讓網(wǎng)頁直接訪問 Java 類

運行 Tomcat闻书,并訪問 localhost:8080/hello:

可以看出 Servlet 所執(zhí)行的生命周期,如果一直刷新網(wǎng)頁則會一直執(zhí)行 service:

當我們關(guān)閉 Tomcat 時:

Servlet 生命周期的方法(以下方法都是由 Servlet 容器負責調(diào)用)

1脑慧、構(gòu)造器:只被調(diào)用一次魄眉,只有第一次請求 Servlet 時,創(chuàng)建 Servlet 的實例闷袒,調(diào)用構(gòu)造器坑律。說明 Servlet 是單實例的。

2囊骤、init 方法:只被調(diào)用一次晃择,在創(chuàng)建好實例后立即被調(diào)用,用于初始化當前 Servlet也物。

3宫屠、service 方法:被多次調(diào)用,每次請求都會調(diào)用 service 方法焦除。實際用于響應(yīng)請求的激况。

4、destroy 方法:只被調(diào)用一次,在當前 Servlet 所在的 WEB 應(yīng)用被卸載后調(diào)用乌逐,用于釋放當前 Servlet 所占用的資源竭讳。

load-on-startup 參數(shù)

1、配置在 servlet 的節(jié)點中浙踢,如下圖

2绢慢、指定 Servlet 被創(chuàng)建的時機,如果該數(shù)值若為負數(shù)洛波,則在第一次請求時被創(chuàng)建胰舆,若為 0 或者正數(shù),則在當前 WEB 應(yīng)用被 Servlet 容器加載時創(chuàng)建實例蹬挤,且數(shù)值越小越早被創(chuàng)建缚窿。

關(guān)于 servlet-mapping

1、同一個 Servlet 可以被映射到多個 URL 上焰扳,即多個 <servlet-mapping> 元素 <servlet-name> 子元素的設(shè)置值可以是同一個 Servlet 注冊名倦零。

2、在 Servlet 映射到 URL 中也可以使用 * 通配符吨悍,但是只能有兩種固定的格式:

⑴ “ *.擴展名 ”

⑵ “ /* ”

注:帶擴展名的不能帶斜桿

Servlet 初始化參數(shù)

以節(jié)點 <init-param> 配置初始化參數(shù)扫茅,且該節(jié)點位置必須在節(jié)點 <load-on-startup> 前面。

獲取初始化參數(shù):

1育瓜、通過 getInitParamter 獲取指定參數(shù)名稱的參數(shù)值

2葫隙、通過 getInitParameterNames 獲取參數(shù)名組成的 Enumeration 對象

ServletContext:

Servlet 引擎為每個 WEB 應(yīng)用都創(chuàng)建一個對應(yīng)的 ServletContext 對象,一個 WEB 應(yīng)用中的所有 Servlet 都共享同一個?ServletContext? 對象躏仇,所以?ServletContext? 對象被稱之為 application 對象恋脚。

ServletContext 由?ServletConfig 來獲取,相當于 WEB 應(yīng)用的一個大管家钙态,可以從中獲取 WEB 應(yīng)用中的各個方面的信息慧起。

配置當前 WEB 應(yīng)用的初始化參數(shù):

獲取當前 WEB 應(yīng)用的初始化參數(shù):

用法和 Servlet 獲取初始化參數(shù)一樣。

兩者區(qū)別在于册倒,Servlet 初始化參數(shù)是局部參數(shù)蚓挤,針對某個 Servlet 使用,而 ServletContext 初始化參數(shù)是全局的驻子,每個 Servlet 都可以使用灿意。

獲取當前 WEB 應(yīng)用的某個文件的的絕對路徑(不是部署前的位置):

返回的路徑其實是應(yīng)用的部署后輸出的位置:

獲取當前 WEB 應(yīng)用某個文件對應(yīng)的輸入流:

ServletRequest、ServletResponse:

ServletRequest 封裝了請求信息崇呵,可以從中獲取到任何的請求信息缤剧。

ServletResponse 封裝了響應(yīng)信息,如果給用戶什么響應(yīng)域慷,具體可以使用該接口的方法實現(xiàn)荒辕。

這兩個接口的實現(xiàn)類都是服務(wù)器給予實現(xiàn)的汗销,并在服務(wù)器調(diào)用 service 時傳入。

案例:

在 webapp 下新建 login.html抵窒,并放置一個 <form> 表單弛针,以 POST 方式提交:

新建 LoginServlet 類,在 service 里面接收參數(shù)并打永罨省:

在 web.xml 里添加配置:

其中節(jié)點 <url-pattern> 的信息對應(yīng)的是 form 表單里的 action 值削茁。

重啟 Tomcat 服務(wù)器,訪問以下地址:

分別填寫信息:

點擊 login:

打印了接收參數(shù)的值掉房,通過參數(shù)可以在 Java 類里面使用 JDBC 去訪問數(shù)據(jù)庫茧跋。

如果是以 checkbox 的方式提交參數(shù):

應(yīng)使用如下來接收多個參數(shù):

如果需要獲取更多信息,可以將 servletRequest 轉(zhuǎn)換為子接口 httpServletRequest:

servletResponse:

getWriter():返回 PrintWriter 對象卓囚,調(diào)用 print 或者 write 方法可以將信息打印到網(wǎng)頁上

setContentType():設(shè)置響應(yīng)的內(nèi)容類型

每次新建 Servlet 都得實現(xiàn) Servlet 的全部方法瘾杭,而繼承?GenericServlet 可以省略到只剩 service 方法,簡便很多捍岳。

GenericServlet 是 Servlet 接口和 ServletConfig 接口的實現(xiàn)類富寿,也是一個抽象類睬隶。

HttpServlet(實際開發(fā)用):

1锣夹、繼承自?GenericServlet,針對于 HTTP 協(xié)議所定制

2苏潜、在 service 方法中直接把 ServletRequest 和 ServletResponse 轉(zhuǎn)為?HttpServletRequest 和?HttpServletResponse银萍,可以用來獲取請求方式

3、實際開發(fā)中恤左,使用時直接繼承?HttpServlet 并重載里面的 doGet 或者 doPost 方法:

補充

Servlet 3.0 以上可以通過注解的方式來配置 servlet

表單使用



以上為本人的一些學習筆記贴唇,如有出錯歡迎指正,陸續(xù)更新7纱4疗!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巧鸭,一起剝皮案震驚了整個濱河市瓶您,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纲仍,老刑警劉巖呀袱,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異郑叠,居然都是意外死亡夜赵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門乡革,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寇僧,“玉大人摊腋,你說我怎么就攤上這事∴铱” “怎么了歌豺?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長心包。 經(jīng)常有香客問我类咧,道長,這世上最難降的妖魔是什么蟹腾? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任痕惋,我火速辦了婚禮,結(jié)果婚禮上娃殖,老公的妹妹穿的比我還像新娘值戳。我一直安慰自己,他們只是感情好炉爆,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布堕虹。 她就那樣靜靜地躺著,像睡著了一般芬首。 火紅的嫁衣襯著肌膚如雪赴捞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天郁稍,我揣著相機與錄音赦政,去河邊找鬼。 笑死耀怜,一個胖子當著我的面吹牛恢着,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播财破,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼掰派,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了左痢?” 一聲冷哼從身側(cè)響起靡羡,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抖锥,沒想到半個月后亿眠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡磅废,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年纳像,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拯勉。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡竟趾,死狀恐怖憔购,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岔帽,我是刑警寧澤玫鸟,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站犀勒,受9級特大地震影響屎飘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贾费,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一钦购、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褂萧,春花似錦押桃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谎痢,卻和暖如春磕昼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舶得。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工掰烟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沐批。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像蝎亚,于是被迫代替她去往敵國和親九孩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

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