這樣學習Servlet,會事半功倍!!

前言

工做已經有一段時間了,若是讓我從新學Servlet,我會怎麼學呢?下面拋出兩個常見的問題,我分開來解答git

  • 2020年了,還須要學Servlet嗎?
  • Servlet的學習路線(學習重點)

1、2020年了,還須要學Servlet嗎?

老實說,Servlet放在如今確定算是一個古老的技術了。如今你去任何的一家公司,應該都不是直接用Servlet來寫項目的。如今的項目通常來講仍是以SpringMVC-Spring-Mybatis / SpringBoot居多。面試也幾乎不會問Servlet的知識(不管是校招仍是社招)github

既然Servlet已是一個這麼古老的技術了,那我還須要學嗎?這是一個很是常見的問題。我初學的時候也很是喜歡搜相關的問題:「SWING/AWT這種技術還須要學嗎」。web

不管是我在知乎回答Java學習路線,仍是讀者問到的這個問題,我都會給予確定的回答:「須要學Servlet,不要跳過Servlet去學框架面試

我由於好好學了Servlet,在學Struts2(沒錯,我還學過Struts2)和SpringMVC的都很是容易上手,幾天就基本會用了。跨域

若是瞭解Struts2或SpringMVC的同窗就會知道,其實他倆的底層都離不開Servlet。Struts2的核心用的是Filter(過濾器),而SpringMVC的核心用的就是Servlet。瀏覽器

學過Servlet好處是什麼:服務器

  • 打下堅實的基礎,學習框架就駕輕就熟了。

2、Servlet的學習路徑

下面我來說講Servlet的重點有哪些,其實就是學習Servlet的路線。仍是要重複一句話:「在學習一項技術以前,首先要知道爲何要學習它session

2.1 Tomcat

學Servlet以前,首先咱們要學學Tomcat。Tomcat是一個Web服務器(同時也是Servlet容器),經過它咱們能夠很方便地接收和返回到請求(若是不用Tomcat,那咱們須要本身寫Socket來接收和返回請求)。框架

Tomcat其實咱們並不須要學太多的知識,只要學會安裝和啓動以及瞭解一下各個目錄的含義就差很少了。工具

Tomcat各個目錄的含義:

2.2 Servlet版「Hello world「

首先,咱們須要認清一個JavaWeb的標準目錄結構:

隨後,咱們編寫一個最簡單的Servlet程序和配置web.xml來完成一次交互。

在寫Servlet的時候,咱們順便瞭解一下Servlet的繼承體系和生命週期

2.3 HTTP簡單學一下

HTTP協議是客戶端和服務器交互的一種通迅的格式

例如:在瀏覽器點擊一個連接,瀏覽器就爲我打開這個連接的網頁。

原理:當在瀏覽器中點擊這個連接的時候,瀏覽器會向服務器發送一段文本告訴服務器請求打開的是哪個網頁。服務器收到請求後,就返回一段文本給瀏覽器,瀏覽器會將該文本解析,而後顯示出來。這段「文本」就是遵循HTTP協議規範的。

在初學的時候,咱們只要記住一些經常使用的頭信息(請求頭和響應頭)就足夠了。

2.4 ServletConfig和ServerContext對象

ServletConfig:經過此對象能夠讀取web.xml中配置的初始化參數,不寫硬編碼,將配置寫在配置文件中。

ServletContext:這個對象是在Tomcat啓動的時候就會建立,表明着當前整個應用。咱們通常用來獲取整個應用的配置信息(ServletConfig是單個的,而ServletContext是整個應用的),還能夠用這個對象來讀取資源文件。

這幾個最基本的Servlet對象學完了之後,咱們就能夠關注一下Servlet的一些小細節了,好比說:

  • Servlet是單例的
  • 配置通配符的時候能夠用各類的通配符*.和一個Servlet能夠被多個配置映射
  • 訪問任何資源其實都是在訪問Servlet(即使是訪問圖片資源,Tomcat都有默認Servlet處理)
  • ....

2.5request和response對象

Servlet的重點須要學習request和response對象。當咱們學完HTTP的請求頭和響應頭之後,再看到這兩個對象。咱們就應該知道:request其實就是封裝了HTTP的請求頭,而response就是封裝了HTTP響應頭。

這兩個對象是Servlet中最重要的,由於咱們跟外接的交互都是經過request和response對象來進行的。

經過response對象,咱們能夠嘗試寫一些Demo,好比:

  • 給瀏覽器輸出一些簡單的內容
  • 實現文件下載的功能
  • 實現頁面自動刷新的功能
  • 實現對數據的壓縮
  • 生成驗證碼圖片
  • 重定向跳轉
  • .....

經過request對象,咱們也能夠嘗試作些Demo,好比:

  • 獲得瀏覽器的傳遞過來的各種信息(請求參數、請求頭等)
  • 實現防盜鏈
  • 經過request對象來轉發
  • 解決請求參數中文亂碼的問題
  • ....

一句話總結:request對象主要用於接收請求各類的信息,response對象主要用戶返回給請求各類的信息。圍繞着請求、響應咱們分別有request和response對象供咱們操做。

2.6 Cookie和session會話機制

前面咱們已經學到了Servlet的幾個對象了,分別是Config(獲取配置信息)、Context(表明整個Web應用)、Request(HTTP請求)、Response(HTTP響應)。

每一個網站都會有登陸註冊的功能,那它是怎麼實現的呢?上這上面的幾個對象,好像都不是實現登陸註冊的。因而咱們該來學學會話機制 Cookie和Session啦。

首先咱們瞭解一下Cookie是存儲在哪的,以及Cookie的基本API使用,包括:

  • Cookie的有效期如何設置
  • Cookie如何保存中文
  • Cookie的不可跨域性是什麼意思
  • 使用Cookie來顯示用戶上次訪問的時間
  • 使用Cookie來顯示上次瀏覽過的商品

Cookie的API使用基本會了之後,咱們就能夠學習Session了,學Session的時候咱們須要解決:

  • 有了Cookie,爲何須要Session(由於他倆都是會話機制)
  • Session的API基本使用
  • Session的生命週期和有效期
  • Session的實現原理,若是禁用Cookie,還能使用Session嗎
  • 嘗試完成Session的幾個小Demo

    • 使用Session完成購物的功能
    • 使用Session完成簡單的登陸註冊
    • 使用Session完成防止表單重複提交
    • 使用Session完成一次性校驗碼

完了之後,咱們能夠對比一下Cookie和Session的區別主要有哪些。

一句話總結:Cookie是檢查用戶身上的」通行證「來確認用戶的身份,Session就是經過檢查服務器上的」客戶明細表「來確認用戶的身份的。Session至關於在服務器中創建了一份「客戶明細表」

img

2.7 Servlet知識總結

其實縱觀Servlet,無非就是學幾個對象,但這幾個對象對咱們後面的學習都很是重要,我以前畫過一張思惟導圖歸納了這幾個對象,但願對你們有幫助:

3、發乾貨!

若是瞭解個人同窗,應該知道我已經寫過很多的文章了,GitHub的原創列表文章須要拖動好久才能拖到底。

Servlet是我最開始寫系列級文章的開始,我在各大博客發表的第一篇文章就叫作《Tomcat 就是這麼簡單》。

如今已經工做有一段時間了,爲何還來寫Servlet呢,緣由有如下幾個:

  • 我是一個對排版有追求的人,若是早期關注個人同窗可能會發現,個人GitHub、文章導航的read.me會常常更換。如今的GitHub導航也不合我心意了(太長了),而且早期的Servlet文章,說實話排版也不太行,我決定從新搞一波。
  • 個人文章會分發好幾個平臺,但文章發完了可能就沒人看了,而且圖牀極可能由於平臺的防盜鏈就掛掉了。又由於有不少的讀者問我:」你能不能把你的文章轉成PDF啊?「
  • 我寫過不少系列級的文章,這些文章就幾乎不會有太大的改動了,就很是適合把它們給」持久化「。

基於上面的緣由,我決定把個人Servlet彙總成一個PDF/HTML/WORD文檔。說實話,打造這麼一個文檔花了我很多的時間。爲了防止白嫖,關注個人公衆號回覆「888」便可獲取。

文檔的內容均爲手打,有任何的不懂均可以直接來問我(公衆號有個人聯繫方式)。

若是點贊超過500,那下週再肝一個系列出來。想要看什麼,能夠留言告訴我

若是你們想要實時關注我更新的文章以及分享的乾貨的話,能夠關注個人公衆號「Java3y」。

  • 🔥Java精美腦圖
  • 🔥Java學習路線
  • 🔥開發經常使用工具
  • 🔥精美文檔電子書

在公衆號下回復「888」便可獲取!!

本已收錄至個人GitHub精選文章,歡迎Starhttps://github.com/ZhongFuCheng3y/3y

求點贊 求關注️ 求分享👥 求留言💬 對我來講真的 很是有用!!!

相關文章
相關標籤/搜索