新四季網

servlet使用舉例(3000字詳解說明入門Servlet)

2023-04-16 18:51:17 3

今天是劉小愛自學Java的第88天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

前段時間花了二十來天的時間學了MySQL資料庫、JDBC以及前端的一些知識點。

這點時間肯定是遠遠不夠的,但畢竟以Java後臺為主,其它的只是稍作了解。

資料庫:存儲數據的地方,對於一家企業或者一個項目來說,毫無疑問,數據是重中之重。前端:是可以直接和用戶打交道的。

而伺服器等於是將資料庫和前端連接起來了。

伺服器從資料庫中獲取數據後,返回給前端,再經過渲染後展現給用戶看。

稍稍做一個知識點的總結:

昨天全面地對Tomcat以及JavaWeb項目的創建做了一個了解,今天就再看看其中具體的操作。

一、servlet概述

現在有一個需求:用戶要通過瀏覽器輸入用戶名和密碼來登錄網頁。

那麼就要解決如下問題:

獲取用戶在網頁提交的數據。進行對應的業務邏輯處理(查詢資料庫校驗用戶名密碼是否存在)將處理結果返回給瀏覽器。

而要解決上述問題,就要引入servlet的概念了。

servlet,翻譯過來就是小服務程序,它是Java制定的一個規範。Java裡提到規範,第一反應就是接口。

①實現servlet接口

當然Java裡已經有servlet的實現類了,但自己嘗試著寫一遍,也能對其流程有個更好地理解。

②在web.xml編寫配置信息

servlet標籤:

servlet-name:標籤名servlet-class:servlet實現類的全限定名(包名 類名)

servlet-mapping標籤:

servlet-name:標籤名要與上面的一致url-pattern:具體映射路徑

③service處理業務邏輯

service,在該方法裡面處理具體的業務邏輯,但是這邊暫時沒有,就用一個輸出語句代替。用來檢測是否真的運行了。

④在瀏覽器中輸入具體的映射路徑

訪問對應的地址,控制臺上會輸出對應的語句。

以上就是servlet書寫四步驟,初次接觸肯定是會有點懵的,可以選擇將其死記硬背記下來,也可以將其流程做一個了解:

①瀏覽器中的url

我們在網頁中點擊某個按鈕,進入一個新的頁面,其都對應一個不同的url,也就是瀏覽器地址欄的路徑。

伺服器就是根據url來做出不同的業務處理查詢到對應的數據。

②根據映射路徑找到對應的類

瀏覽器中路徑為/user,在web.xml中找到對應的配置標籤,然後根據標籤名找到對應的類名。

③找到對應的類

這個類也就是web.xml中的那個全限定名,該類有一個service方法。

瀏覽器輸入對應的路徑,通過web.xml的配置信息,找到對應類的service方法運行。

以上就是servlet的一個運行流程。

二、Servlet優化

好,現在思考一個問題:

Servlet接口中是有很多方法的,而對於我們來說並不是所有的方法都需要使用,只用我們需要用的。

那能怎麼辦?

這就要涉及到servlet的優化了,當然Java源碼已經優化好了直接繼承就可以。

但學習階段最好對其優化過程有一個了解。

1servlet優化一

定義一個類GenericServlet,實現Servlet接口並完成重寫。

其中需要service方法,就將其寫成一個抽象方法,這樣其實現類必定需要重寫該方法。

子類再繼承GenericServlet類重寫service方法即可,父類的其它方法就可以直接使用。

2servlet優化二

現在問題又來了,在學form表單的時候,我們知道瀏覽器提交請求有兩種方式:get提交,和post提交。

而service方法只有一個,所以無論是get提交還是post提交,執行的都是service方法。

這樣就需要對service方法進行細分

定義一個HttpServlet類繼承GenericServlet類。

①對service方法細分

通過方法重載對service方法細分,其中HttpServletRequest是ServletRequest的子類,故要先強轉。

②判斷瀏覽器的請求方法

request.getMethod可以獲取當前請求的方式:

如果是get請求,調用doGet方法如果是post請求,調用doPost方法

③定義doPost方法和doGet方法

這樣也就對service方法進行了細分。

執行結果:

這樣MyServlet類只需要繼承HttpServlet類,分別重寫doPost方法和doGet方法即可。

現在瀏覽器發來了一個請求,MyServlet會通過其父類的service方法判斷請求的方式,再執行對應的請求方法。

根據控制臺的輸出,可以判斷這裡的請求方法是get請求。

3優化總結

事實上GenericServlet和HttpServlet這兩個類在Java裡面已經被定義好了。

其代碼編寫是和上述優化過程類似的,當然其功能更加的複雜全面,就比如請求方式源碼裡還有doPut方法和doDelete方法。

看它們的繼承體系圖:

優化一:

GenericServlet類實現了Servlet接口,在這個類裡面有的方法已經實現了某些功能,比如日誌log方法。

這樣的話其子類直接調用該方法就好了,不用去寫具體是如何實現的。

GenericServlet類就相當於對Servlet接口進行了功能上的拓展與衍生。

優化二:

HttpServlet類對於瀏覽器的請求進行了細分,不然無論是什麼請求執行的都是service方法。

三、Servlet生命周期以及映射路徑

1生命周期

關於Servlet生命周期,可以創建一個類實現Servlet接口,在配置該類的映射路徑,通過瀏覽器訪問做一個測試:

①Servlet被初始化

當其對應的映射路徑被瀏覽器訪問時,init方法執行,Servlet完成初始化。

②Servlet被執行

瀏覽器每訪問一次,service方法就會執行一次。

它和init方法的區別在於:

init只是在第一次訪問執行一次。service是隨著瀏覽器的每一次訪問而執行一次。

③Servlet被摧毀

當Tomcat關閉時,destroy方法執行,servlet被摧毀。

值得注意的是

在servlet標籤有一個子標籤1有1到5個等級

當該標籤存在時,無論級別是多少,Servlet會隨著容器(我這兒就是Tomcat)啟動就初始化了。當該標籤不存在時,Servlet是隨著瀏覽器訪問對應路徑時才會初始化。正數的值越小,對應的Servlet(每個Servlet都有自己的名字)優先級越高,應用啟動時就越先加載。如果值一樣,容器就會自行選擇加載順序。

2映射路徑

一種有四種匹配方式。可以創建這四種路徑,分別對應四個類,最後在瀏覽器上進行測試。

我這邊就不一一展示了,直接做個小結:

①完全匹配

優先級最高,瀏覽器的路徑要與Servlet對應的映射路徑完全一致,才能訪問到該Servlet

②目錄匹配

格式:/目錄名/*,也就是說當前目錄下的任意子路徑,都可以訪問到該Servlet。

③後綴名匹配

格式:*.後綴名,也就是任何路徑為該後綴名時,都能訪問到對應的Servlet。

其中當②③衝突時,以②為優先。

④預設路徑

格式:/,也就是任意路徑都可以。

注意:其優先級為①>②>③>④

四、Servlet註解開發

我們先前的代碼編寫,每次都得在web.xml配置Servlet對應的映射路徑,這樣就會有一個問題:

如果路徑又很多,要配置很多很多個標籤,這樣就會顯得代碼很臃腫,維護不方便。

有沒有更簡便的方法呢?

在Servlet3.0中就增加了一個註解開發,我們來體驗下:

以前是在Java中New一個類,現在是New一個Servlet。

當需要使用到Servlet時即可使用該方法。

其本質上還是Java裡的一個類,只不過類上有了一個註解。

註解的值為:「/AnnoServlet」。

這個就相當於web.xml中配置的映射路徑。

這樣瀏覽器中輸入該路徑時,就能訪問到對應註解下的類並執行具體的業務邏輯了。

這樣下來也就簡潔了很多。

當然Servlet註解開發模板可以自行配置,操作流程如下:

這樣配置好後,每次使用Servlet註解開發,都會使用自定義的這套模板。

至於模板裡的代碼編寫可以根據自己的需求適當修改。

最後

謝謝你的觀看。

如果可以的話,麻煩幫忙點個讚,謝謝你。

其中頭條搜索有很多關於Servlet的乾貨教程,專業又詳細,點擊下方卡片搜索「Servlet」了解更多:

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了