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個等級
2映射路徑
一種有四種匹配方式。可以創建這四種路徑,分別對應四個類,最後在瀏覽器上進行測試。
我這邊就不一一展示了,直接做個小結:
①完全匹配
優先級最高,瀏覽器的路徑要與Servlet對應的映射路徑完全一致,才能訪問到該Servlet
②目錄匹配
格式:/目錄名/*,也就是說當前目錄下的任意子路徑,都可以訪問到該Servlet。
③後綴名匹配
格式:*.後綴名,也就是任何路徑為該後綴名時,都能訪問到對應的Servlet。
其中當②③衝突時,以②為優先。
④預設路徑
格式:/,也就是任意路徑都可以。
注意:其優先級為①>②>③>④
四、Servlet註解開發我們先前的代碼編寫,每次都得在web.xml配置Servlet對應的映射路徑,這樣就會有一個問題:
如果路徑又很多,要配置很多很多個標籤,這樣就會顯得代碼很臃腫,維護不方便。
有沒有更簡便的方法呢?
在Servlet3.0中就增加了一個註解開發,我們來體驗下:
以前是在Java中New一個類,現在是New一個Servlet。
當需要使用到Servlet時即可使用該方法。
其本質上還是Java裡的一個類,只不過類上有了一個註解。
註解的值為:「/AnnoServlet」。
這個就相當於web.xml中配置的映射路徑。
這樣瀏覽器中輸入該路徑時,就能訪問到對應註解下的類並執行具體的業務邏輯了。
這樣下來也就簡潔了很多。
當然Servlet註解開發模板可以自行配置,操作流程如下:
這樣配置好後,每次使用Servlet註解開發,都會使用自定義的這套模板。
至於模板裡的代碼編寫可以根據自己的需求適當修改。
最後謝謝你的觀看。
如果可以的話,麻煩幫忙點個讚,謝謝你。
其中頭條搜索有很多關於Servlet的乾貨教程,專業又詳細,點擊下方卡片搜索「Servlet」了解更多:
,