前言

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

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

一、2020年了,還需要學Servlet嗎?

老實說,Servlet放在現在肯定算是一個 古老 的技術了。現在你去任何的一家公司,應該都不是 直接 用Servlet來寫項目的。現在的項目一般來說還是以 SpringMVC-Spring-Mybatis / SpringBoot 居多。面試也幾乎不會問Servlet的知識(無論是校招還是社招)

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

無論是我在知乎回答Java學習路線,還是讀者問到的這個問題,我都會給予肯定的回答:“ 需要學Servlet,不要跳過Servlet去學框架

我因爲好好學了Servlet,在學Struts2(沒錯,我還學過Struts2)和SpringMVC的都非常容易上手,幾天就基本會用了。

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

學過Servlet好處是什麼:

  • 打下堅實的基礎,學習框架就得心應手了。

二、Servlet的學習路徑

下面我來講講Servlet的重點有哪些,其實就是學習Servlet的路線。還是要重複一句話:“ 在學習一項技術之前,首先要知道爲什麼要學習它

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的一些小細節了,比如說:

*.

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相當於在服務器中建立了一份“客戶明細表”

2.7 Servlet知識總結

其實縱觀Servlet,無非就是學幾個對象,但這幾個對象對我們後面的學習都非常重要,我之前畫過一張思維導圖概括了這幾個對象,希望對大家有幫助:

三、發乾貨!

如果瞭解我的同學,應該知道我已經寫過不少的文章了, GitHub 的原創列表文章需要拖動很久才能拖到底。

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

現在已經工作有一段時間了,爲什麼還來寫 Servlet 呢,原因有以下幾個:

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

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

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

如果 點贊超過500 ,那下週再肝一個系列出來。 想要看什麼,可以留言告訴我

如果大家想要 實時 關注我更新的文章以及分享的乾貨的話,可以關注我的公衆號「 Java3y 」。

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

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

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

求點贊 求關注️ 求分享:busts_in_silhouette: 求留言:speech_balloon: 對我來說真的 非常有用 !!!

相關文章