2020-03-22

Servlet: Server applet

概念:運(yùn)行在服務(wù)器上的一個(gè)小程序(動(dòng)態(tài)資源)

? Servlet是一個(gè)接口,定義了java類(lèi)被瀏覽器訪(fǎng)問(wèn)到的一套規(guī)則(接口)(有了這套規(guī)則如叼,tomcat便可以識(shí)別和創(chuàng)建Servlet)

? 我們只需定義一個(gè)類(lèi)并實(shí)現(xiàn)Servlet接口著角,復(fù)寫(xiě)方法即可癞尚。

快速入門(mén):

? ? ? ? 1.創(chuàng)建javaEE項(xiàng)目

? ? ? ? 2.定義一個(gè)類(lèi)并實(shí)現(xiàn)Servlet接口

? ? ? ? 3.實(shí)現(xiàn)Servlet接口中的抽象方法

? ? ? ? 4.配置Servlet

Servlet執(zhí)行原理: 見(jiàn)圖

Servlet的生命周期:

? 1.被創(chuàng)建:執(zhí)行init()方法只執(zhí)行一次毡惜。

? Servlet對(duì)象什么時(shí)候被創(chuàng)建渊胸?

? 默認(rèn)狀態(tài)下該Servlet第一次被訪(fǎng)問(wèn)時(shí)創(chuàng)建該對(duì)象橱健。

? 如何更改Servlet被創(chuàng)建的時(shí)機(jī)而钞?

? 在<Servlet>標(biāo)簽中設(shè)置<load-on-startup>

? 負(fù)數(shù):第一次被訪(fǎng)問(wèn)時(shí)創(chuàng)建。

? 0或正數(shù):在服務(wù)器啟動(dòng)時(shí)創(chuàng)建拘荡。

? 2.提供服務(wù): 執(zhí)行service()方法臼节,執(zhí)行多次。

? ? 每次訪(fǎng)問(wèn)Servlet時(shí)珊皿,service()方法都會(huì)被調(diào)用一次网缝。

? 3.被銷(xiāo)毀:執(zhí)行destroy()方法,只執(zhí)行一次蟋定。

? 注意:

? ? ?? 1.服務(wù)器關(guān)閉時(shí)Servlet被銷(xiāo)毀粉臊。

? ? ?? 2.只有服務(wù)器正常關(guān)閉時(shí)才會(huì)執(zhí)行destroy()方法。

? ? ?? 3.一般用于關(guān)閉資源驶兜。

Servlet3.0

好處:支持注解配置扼仲。可以不需要web.xml

1.在Servlet實(shí)現(xiàn)類(lèi)上定義注解

@WebServlet("資源路徑")

2.無(wú)需配置web.xml即可訪(fǎng)問(wèn)抄淑。

了解:

? ? String name() default ""; //相當(dāng)于<Servlet-name>

? ? String[] value() default {};//代表urlPatterns()屬性配置

? ? String[] urlPatterns() default {};//相當(dāng)于<url-pattern>

? ? int loadOnStartup() default -1;//相當(dāng)于<load-on-startup>

動(dòng)態(tài)web項(xiàng)目的目錄結(jié)構(gòu):

-- 根目錄

--WEB-INFO目錄

--web.xml:web項(xiàng)目的核心配置文件

--classes目錄:放置字節(jié)碼文件的目錄

--lib目錄:放置依賴(lài)的jar包

Servlet的體系結(jié)構(gòu):

Servlet(接口)

|實(shí)現(xiàn)

GenericServlet(抽象類(lèi))

|繼承

HttpServlet(抽象類(lèi))

GenericServlet: 將Servlet中其它的方法做了空實(shí)現(xiàn)屠凶,繼承自GenericServlet,

只需要重寫(xiě)service()方法即可肆资。

HttpServlet:對(duì)Http協(xié)議進(jìn)行了封裝矗愧,簡(jiǎn)化了操作。

步驟:

? ?? 1.定義一個(gè)類(lèi)并繼承自HttpServlet

? ?? 2.重寫(xiě)doGet()或doPost()方法迅耘。

Servlet的相關(guān)配置:

urlpattern:servlet的訪(fǎng)問(wèn)路徑贱枣。

1.一個(gè)Servlet可以配置多個(gè)訪(fǎng)問(wèn)路徑监署。

?? @webServlet({"/a","/b"});

2.路徑規(guī)則

? ? 1)

/xxx? 路徑匹配 ? ? ? ?

? ?? 2)

? ?? /xxx/xxx 多重路徑

3)

? ? *.do

另:?

/* 所有url都可訪(fǎng)問(wèn)該servlet

注意:具有最低優(yōu)先級(jí)

Request對(duì)象

1.Request和Response對(duì)象的基本原理颤专。

1)Request對(duì)象和Response對(duì)象都是服務(wù)器創(chuàng)建的栖榨。我們只是來(lái)使用他們炬转。

2)Request對(duì)象用來(lái)獲取請(qǐng)求消息矛市。Response對(duì)象用來(lái)設(shè)置響應(yīng)消息啃憎。

2.Request對(duì)象的繼承體系徘公。

ServletRequest(接口)

| 繼承

HttpServletRequest(接口)

| 實(shí)現(xiàn)

? ? ? ? org.apache.catalina.connector.RequestFacade(實(shí)現(xiàn)類(lèi):由Tomcat實(shí)現(xiàn))

3.Request的具體功能

1)獲取請(qǐng)求消息數(shù)據(jù)

1.請(qǐng)求行

GET /day12_http/myhttpservlet1?username=zhangsan HTTP/1.1

相關(guān)方法:

? ? ? ? a.獲取請(qǐng)求方式

? ? ? ? String getMethod();

? ? ? ? b.獲取虛擬目錄

? ? ? ? String getContextPath();

? ? ? ? c.獲取Servlet路徑

? ? ? ? String? getServletPath();

? ? ? ? d.獲取GET請(qǐng)求參數(shù)

? ? ? ? String? getQueryString();

? ? ? ? e.獲取URI: 虛擬路徑+資源路徑?

? ? ? ? 如: day12_http/myhttpservlet1

? ? ? ? String?? getRequestURI():?? day12_http/myhttpservlet1? ? (范圍更大)? ? ? ? 共和國(guó)

? ? ? ? StringBuffer?? getRequestURL():?? http://localhost:8080/day12_http/myhttpservlet1(范圍相對(duì)較小)?? 朝鮮人民民主主義共和國(guó)

? ? ? ? f.獲取協(xié)議版本:? HTTP/1.1

? ? ? ? String? getProtocol();

? ? ? ? g.獲取客戶(hù)機(jī)的ip地址。

? ? ? ? String? ? getRemoteAddr();

2.請(qǐng)求頭

a.獲取所有請(qǐng)求頭名稱(chēng)

Enumeration<String>?? getHeaderNames()

b.通過(guò)請(qǐng)求頭的名稱(chēng)獲取請(qǐng)求頭的值;獭6拍!

String? getHeader(String name)

3.請(qǐng)求體:只有Post方法才有請(qǐng)求體暑塑,在請(qǐng)求體中封裝了請(qǐng)求參數(shù)吼句。

步驟:

? ?? 1.獲取流對(duì)象

? ?? BufferedReader? ? getReader(): 獲取字符輸入流

? ?? ServletInputStream? ? getInputStream():獲取字節(jié)輸入流。

? ?? 2.從流對(duì)象中拿到數(shù)據(jù)

2)其它功能

1.獲取請(qǐng)求參數(shù)數(shù)據(jù):不論get方法還是post方法事格,都可以使用下列方法來(lái)獲取請(qǐng)求參數(shù)惕艳。

a.根據(jù)參數(shù)名稱(chēng)獲取參數(shù)值? username=zhangsan&password=123;

String?? getParameter(String name);

b.根據(jù)參數(shù)名稱(chēng)獲取參數(shù)的數(shù)組。? hobby=xx&hobby=game....

String[]? getParameterValues(String name);

c.獲取所有請(qǐng)求參數(shù)的名稱(chēng)

Enumeration<String>?? getParameterNames();

d.獲取所有參數(shù)的Map集合

Map<String,String[]>? getParameterMap();

注意:Request的中文亂碼問(wèn)題驹愚。

get: tomcat8 已將get中文亂碼問(wèn)題解決远搪。

post: 會(huì)中文亂碼

解決:

? ? ? 在獲取請(qǐng)求參數(shù)前設(shè)置request的請(qǐng)求編碼。

? ? request.setCharacterEncoding("編碼格式");

? ? 注意:編碼格式和前端頁(yè)面一致即可逢捺。?

2.請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器內(nèi)部的資源跳轉(zhuǎn)方式谁鳍。

步驟:

? ? ? 1.通過(guò)request獲取轉(zhuǎn)發(fā)器對(duì)象:? RequestDispater

? ? ? ? RequestDispater? ? ? getRequestDispater();

? ? ? 2.使用轉(zhuǎn)發(fā)器對(duì)象進(jìn)行轉(zhuǎn)發(fā)

forward(request,response);

特點(diǎn):

? ? ?? 1.瀏覽器地址欄不會(huì)發(fā)生改變。

? ? ?? 2.只能轉(zhuǎn)發(fā)到當(dāng)前服務(wù)器內(nèi)部資源劫瞳。

?? 3.轉(zhuǎn)發(fā)只是一次請(qǐng)求倘潜。

3.共享數(shù)據(jù)

域?qū)ο螅阂粋€(gè)有作用范圍的對(duì)象,可以在范圍內(nèi)共享數(shù)據(jù)柠新。

request域:

? ? ? ? ? 代表一次請(qǐng)求的范圍窍荧,一般用于請(qǐng)求轉(zhuǎn)發(fā)的多個(gè)資源共享數(shù)據(jù)。

方法:

? ? ? a.存儲(chǔ)數(shù)據(jù)

? ? ? void?? setAttribute(String name,Object obj)

? ? ? b.通過(guò)鍵來(lái)獲取數(shù)據(jù)

? ? ? Object? getAttribute(String name);

? ? ? c.通過(guò)鍵來(lái)移除鍵值對(duì)

? ? ? ?? void?? removeAttribute(String name);

4.獲取ServletContext

ServletContext域?qū)ο螅捍碚麄€(gè)項(xiàng)目中有效(后邊詳細(xì)講解)

獲取方法:ServletContext? getServletContext();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恨憎,一起剝皮案震驚了整個(gè)濱河市蕊退,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌憔恳,老刑警劉巖瓤荔,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钥组,居然都是意外死亡输硝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)程梦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)点把,“玉大人,你說(shuō)我怎么就攤上這事屿附±商樱” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挺份,是天一觀的道長(zhǎng)褒翰。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么优训? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任朵你,我火速辦了婚禮,結(jié)果婚禮上揣非,老公的妹妹穿的比我還像新娘抡医。我一直安慰自己,他們只是感情好早敬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布魂拦。 她就那樣靜靜地躺著,像睡著了一般搁嗓。 火紅的嫁衣襯著肌膚如雪芯勘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天腺逛,我揣著相機(jī)與錄音荷愕,去河邊找鬼。 笑死棍矛,一個(gè)胖子當(dāng)著我的面吹牛安疗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播够委,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荐类,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了茁帽?” 一聲冷哼從身側(cè)響起玉罐,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潘拨,沒(méi)想到半個(gè)月后吊输,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铁追,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年季蚂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅束。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扭屁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涩禀,到底是詐尸還是另有隱情料滥,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布埋泵,位于F島的核電站幔欧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丽声。R本人自食惡果不足惜礁蔗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雁社。 院中可真熱鬧浴井,春花似錦、人聲如沸霉撵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徒坡。三九已至撕氧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喇完,已是汗流浹背伦泥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦溪,地道東北人不脯。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像刻诊,于是被迫代替她去往敵國(guó)和親防楷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • Servlet深入 (一)Servlet的生命周期 一则涯、Servlet的生命周期概述 1复局、什么是生命周期 生命周期...
    爛漫的點(diǎn)地梅閱讀 235評(píng)論 0 0
  • Cookie & Session (一)會(huì)話(huà)技術(shù)的概述 一、什么是會(huì)話(huà) 會(huì)話(huà)可以簡(jiǎn)單理解為粟判,用戶(hù)打開(kāi)一個(gè)瀏覽器肖揣,點(diǎn)...
    哈哈哈額哈哈哈閱讀 369評(píng)論 0 0
  • (一)會(huì)話(huà)技術(shù)的概述 一、什么是會(huì)話(huà) 會(huì)話(huà)可以簡(jiǎn)單理解為浮入,用戶(hù)打開(kāi)一個(gè)瀏覽器龙优,點(diǎn)擊多個(gè)超鏈接訪(fǎng)問(wèn)服務(wù)器的web...
    李玉賢_8e75閱讀 159評(píng)論 0 0
  • 第九天 Servlet深入 (一)Servlet的生命周期 一、Servlet的生命周期概述 1事秀、什么是生命周期 ...
    白訶子閱讀 288評(píng)論 0 0
  • 第十天 (一)Response對(duì)象的概述 一彤断、什么是Response 我們開(kāi)發(fā)的軟件是B/S結(jié)構(gòu)的軟件,是可以...
    白訶子閱讀 95評(píng)論 0 0