2020-03-16

Servlet: Server applet

概念:運行在服務器上的一個小程序(動態(tài)資源)

? Servlet是一個接口西篓,定義了java類被瀏覽器訪問到的一套規(guī)則(接口)(有了這套規(guī)則,tomcat便可以識別和創(chuàng)建Servlet)

? 我們只需定義一個類并實現(xiàn)Servlet接口,復寫方法即可。

快速入門:

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

? ? ? ? 2.定義一個類并實現(xiàn)Servlet接口

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

? ? ? ? 4.配置Servlet

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

Servlet的生命周期:

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

? Servlet對象什么時候被創(chuàng)建?

? 默認狀態(tài)下該Servlet第一次被訪問時創(chuàng)建該對象。

? 如何更改Servlet被創(chuàng)建的時機刻剥?

? 在<Servlet>標簽中設置<load-on-startup>

? 負數(shù):第一次被訪問時創(chuàng)建。

? 0或正數(shù):在服務器啟動時創(chuàng)建滩字。

? 2.提供服務: 執(zhí)行service()方法造虏,執(zhí)行多次。

? ? 每次訪問Servlet時麦箍,service()方法都會被調用一次漓藕。

? 3.被銷毀:執(zhí)行destroy()方法,只執(zhí)行一次挟裂。

? 注意:

? ? ?? 1.服務器關閉時Servlet被銷毀享钞。

? ? ?? 2.只有服務器正常關閉時才會執(zhí)行destroy()方法。

? ? ?? 3.一般用于關閉資源诀蓉。

Servlet3.0

好處:支持注解配置栗竖∈畲啵可以不需要web.xml

1.在Servlet實現(xiàn)類上定義注解

@WebServlet("資源路徑")

2.無需配置web.xml即可訪問。

了解:

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

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

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

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

動態(tài)web項目的目錄結構:

-- 根目錄

--WEB-INFO目錄

--web.xml:web項目的核心配置文件

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

--lib目錄:放置依賴的jar包

Servlet的體系結構:

Servlet(接口)

|實現(xiàn)

GenericServlet(抽象類)

|繼承

HttpServlet(抽象類)

GenericServlet: 將Servlet中其它的方法做了空實現(xiàn)狐肢,繼承自GenericServlet添吗,

只需要重寫service()方法即可。

HttpServlet:對Http協(xié)議進行了封裝处坪,簡化了操作。

步驟:

? ?? 1.定義一個類并繼承自HttpServlet

? ?? 2.重寫doGet()或doPost()方法架专。

Servlet的相關配置:

urlpattern:servlet的訪問路徑同窘。

1.一個Servlet可以配置多個訪問路徑。

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

2.路徑規(guī)則

? ? 1)

/xxx? 路徑匹配 ? ? ? ?

? ?? 2)

? ?? /xxx/xxx 多重路徑

3)

? ? *.do

另:?

/* 所有url都可訪問該servlet

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

Request對象

1.Request和Response對象的基本原理部脚。

1)Request對象和Response對象都是服務器創(chuàng)建的想邦。我們只是來使用他們。

2)Request對象用來獲取請求消息委刘。Response對象用來設置響應消息丧没。

2.Request對象的繼承體系。

ServletRequest(接口)

| 繼承

HttpServletRequest(接口)

| 實現(xiàn)

? ? ? ? org.apache.catalina.connector.RequestFacade(實現(xiàn)類:由Tomcat實現(xiàn))

3.Request的具體功能

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

1.請求行

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

相關方法:

? ? ? ? a.獲取請求方式

? ? ? ? String getMethod();

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

? ? ? ? String getContextPath();

? ? ? ? c.獲取Servlet路徑

? ? ? ? String? getServletPath();

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

? ? ? ? String? getQueryString();

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

? ? ? ? 如: day12_http/myhttpservlet1

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

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

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

? ? ? ? String? getProtocol();

? ? ? ? g.獲取客戶機的ip地址锡移。

? ? ? ? String? ? getRemoteAddr();

2.請求頭

a.獲取所有請求頭名稱

Enumeration<String>?? getHeaderNames()

b.通過請求頭的名稱獲取請求頭的值E煌!淆珊!

String? getHeader(String name)

3.請求體:只有Post方法才有請求體夺饲,在請求體中封裝了請求參數(shù)。

步驟:

? ?? 1.獲取流對象

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

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

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

2)其它功能

1.獲取請求參數(shù)數(shù)據(jù):不論get方法還是post方法往声,都可以使用下列方法來獲取請求參數(shù)。

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

String?? getParameter(String name);

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

String[]? getParameterValues(String name);

c.獲取所有請求參數(shù)的名稱

Enumeration<String>?? getParameterNames();

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

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

注意:Request的中文亂碼問題浩销。

get: tomcat8 已將get中文亂碼問題解決。

post: 會中文亂碼

解決:

? ? ? 在獲取請求參數(shù)前設置request的請求編碼听哭。

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

? ? 注意:編碼格式和前端頁面一致即可慢洋。?

2.請求轉發(fā):服務器內部的資源跳轉方式。

步驟:

? ? ? 1.通過request獲取轉發(fā)器對象:? RequestDispater

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

? ? ? 2.使用轉發(fā)器對象進行轉發(fā)

forward(request,response);

特點:

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

? ? ?? 2.只能轉發(fā)到當前服務器內部資源且警。

?? 3.轉發(fā)只是一次請求。

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

域對象:一個有作用范圍的對象礁遣,可以在范圍內共享數(shù)據(jù)斑芜。

request域:

? ? ? ? ? 代表一次請求的范圍,一般用于請求轉發(fā)的多個資源共享數(shù)據(jù)祟霍。

方法:

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

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

? ? ? b.通過鍵來獲取數(shù)據(jù)

? ? ? Object? getAttribute(String name);

? ? ? c.通過鍵來移除鍵值對

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

4.獲取ServletContext

ServletContext域對象:代表整個項目中有效(后邊詳細講解)

獲取方法:ServletContext? getServletContext();


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末杏头,一起剝皮案震驚了整個濱河市盈包,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌醇王,老刑警劉巖呢燥,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寓娩,居然都是意外死亡叛氨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門棘伴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寞埠,“玉大人,你說我怎么就攤上這事焊夸∪柿” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵阱穗,是天一觀的道長饭冬。 經(jīng)常有香客問我,道長揪阶,這世上最難降的妖魔是什么昌抠? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮鲁僚,結果婚禮上扰魂,老公的妹妹穿的比我還像新娘。我一直安慰自己蕴茴,他們只是感情好劝评,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倦淀,像睡著了一般蒋畜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撞叽,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天姻成,我揣著相機與錄音,去河邊找鬼愿棋。 笑死科展,一個胖子當著我的面吹牛,可吹牛的內容都是我干的糠雨。 我是一名探鬼主播才睹,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琅攘?” 一聲冷哼從身側響起垮庐,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坞琴,沒想到半個月后哨查,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡剧辐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年寒亥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荧关。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡溉奕,死狀恐怖,靈堂內的尸體忽然破棺而出羞酗,到底是詐尸還是另有隱情腐宋,我是刑警寧澤紊服,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布檀轨,位于F島的核電站,受9級特大地震影響欺嗤,放射性物質發(fā)生泄漏参萄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一煎饼、第九天 我趴在偏房一處隱蔽的房頂上張望讹挎。 院中可真熱鬧,春花似錦吆玖、人聲如沸筒溃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怜奖。三九已至,卻和暖如春翅阵,著一層夾襖步出監(jiān)牢的瞬間歪玲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工掷匠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滥崩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓讹语,卻偏偏與公主長得像钙皮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • Servlet: Server applet 概念:運行在服務器上的一個小程序(動態(tài)資源) Servlet是...
    H_5a8d閱讀 126評論 0 0
  • Servlet: Server applet 概念:運行在服務器上的一個小程序(動態(tài)資源) Servlet是...
    小湯源O閱讀 271評論 0 0
  • Servlet: Server applet 概念:運行在服務器上的一個小程序(動態(tài)資源) Servlet是...
    董宇浩閱讀 197評論 0 0
  • Servlet: Server applet 概念:運行在服務器上的一個小程序(動態(tài)資源) Servlet是...
    Key_L閱讀 166評論 0 0
  • Servlet: Server applet 概念:運行在服務器上的一個小程序(動態(tài)資源) Servlet是...
    高海婁閱讀 142評論 0 0