關於JavaWeb的一些必須爛熟於心的基礎知識

背景

全民編程的時代孕育了一大批野生程序員,他們來自土木,來自機械,來自電氣,來自全國各地,來自五湖四海,總之不管是出於這樣還是那樣的原因,最終都走上了開發的道路,成爲了一名野生程序員。沒有經過計算機專業課程的洗禮,一個人在這條路上默默摸索,迷茫又堅定,執拗又執着。好了不扯了,寫此篇的目的是爲了獻給那些非計算機專業,剛接觸JavaEE的孩子,希望可以幫你們抹掉腦子裏的一些小問號。

問題清單

1.什麼是服務器?

答:一臺裝有服務器軟件的計算機,核心是服務器軟件。

2.什麼是服務器軟件?

答:用來運行我們寫的web項目的軟件,它可以接受,處理用戶的請求並返回給用戶相應的資源。比如tomcat就是一個服務器軟件。

3.爲什麼在瀏覽器輸入一個網址就能得到我們想要的信息,瀏覽器和服務器如何通信?

看了上面這個圖是不是有一堆問號?什麼是HTTP,www.xxx.cn和192.168.100.32:8080有什麼區別?TCP是什麼?對於一個未受過計算機課程洗禮的我和你一樣有諸多爲什麼?不要慌,繼續看

 

網絡基礎

計算機網絡

把分佈在不同的地理區域的計算機與專門的外部設備用通信線路連成一個規模大,功能強的網絡系統,從而使衆多的計算機可以方便的互相傳遞信息,共享資源。

問題:看了上面一段話,是不是依舊覺得很抽象?這樣的網絡系統那到底是怎麼搭建的呢?

答:作爲一個非計算機專業的學生,這裏我告訴你,如果只是爲了學習JavaEE,那麼就沒有必要再深究網絡構建的問題。你只需要明確一點,兩臺計算機在有網的情況下可以實現信息傳遞和資源共享。那麼是如何實現的呢?

擴展:資源分爲靜態資源和動態資源,靜態資源像圖片文件等,動態資源指的是可變化的網頁,比如我們看到的淘寶首頁都不一樣,因爲淘寶首頁會根據我們各自的喜好給我們推薦不同的商品。

網絡通信的三要素

IP:計算機在網絡中的唯一標識,客戶端通過IP能找到服務器

端口號:應用程序在計算機中的唯一標識,通過端口號可以找到服務器上的具體某個應用

網絡通信協議:客戶端和服務端互相傳遞信息需要遵循的規則

總結:IP和端口號確定位置,通信協議負責信息傳輸

問題:通信協議有哪些?

TCP/IP模型是國際通信標準,每一層都有對應的協議,負責處理不同的事情

HTTP協議

Http是我們平常見的比較多的一種協議了,也許你從來沒想過它是什麼,那麼現在你就應該知道所謂http協議就是客戶端(瀏覽器)和服務器通信(發送數據)時需要遵守的規則。http協議中的數據又叫報文。

瀏覽器向服務器發送請求,請求的方式有兩種,一種是get請求,一種是post請求,他們最大的區別在於他們發送數據的方式,前者通過拼接在url後面,後者通過請求體封裝。

不同的請求對應的HTTP協議格式也不同,具體如下:

  1. GET 請求

1、請求行

         (1) 請求的方式 GET

         (2) 請求的資源路徑[+?+請求參數]

         (3) 請求的協議的版本號 HTTP/1.1

2、請求頭

         key : value 組成 不同的鍵值對,表示不同的含義。

  1. POST請求

1、請求行

           (1) 請求的方式 POST

           (2) 請求的資源路徑[+?+請求參數]

           (3) 請求的協議的版本號 HTTP/1.1

2、請求頭

           1) key : value 不同的請求頭,有不同的含義

           空行

3、請求體 ===>>> 就是發送給服務器的數據

通過上面的介紹,大家對客戶端和服務器的交互大概有了一個認識,我們現在知道了在有網的情況下,我們可以通過IP和端口號就能找到我們的服務器,那麼問題來了,服務器是如何給我們返回相應的資源呢?是誰在幫服務器處理我們的請求呢?答案是Servlet

JavaWeb三大組件

作爲一個JavaEE方向的程序員,必須要知道的三大組件,Servlet 程序、Filter 過濾器、Listener 監聽器。

問題:什麼是組件?

答:組件就是滿足規範的的對象;三大組件就是滿足JavaEE規範的三個接口

Servlet

Servlet是運行在服務器上的一個Java小程序,每一個請求都對應一個Servlet,當瀏覽器有請求發送過來時,服務器就會調用與請求相對應的Servlet去處理該請求,即Servlet的作用就是接收瀏覽器發送過來的請求並響應數據給客戶端。

Servlet是有生命週期的,大致如下:

1、執行 Servlet 構造器方法

2、執行 init 初始化方法

       第一、二步,是在第一次訪問的時候創建 Servlet 程序會調用。

3、執行 service 方法

       第三步,每次訪問都會調用。

4、執行 destroy 銷燬方法

      第四步,在 web 工程停止的時候調用。

Servlet創建時都會伴隨着創建一個ServletConfig對象,該對象擁有自己所對應着的那個Servlet的各種配置信息

Listener(監聽器)

監聽器的作用是,監聽某種事物的變化。然後通過回調函數,反饋給客戶(程序)去做一些相應的處理。監聽器的種類有很多種,但是在實際的業務場景中用到的機會很少,甚至幾乎不用了,但是作爲一個JavaEE方向的程序員必須要知道有這麼一件事。

Filter(過濾器)

Filter過濾器它的作用是:攔截請求,過濾響應。在日常的開發中主要用於攔截請求,攔截請求常見的應用場景有:

1、權限檢查

2、日記操作

3、事務管理......等等

Filter 的生命週期包含以下幾個方法

1、構造器方法

2、init 初始化方法

       第 1,2 步,在web工程啓動的時候執行

3、doFilter 過濾方法

       每次攔截到請求,就會執行

4、destroy 銷燬:

       停止 web 工程的時候,就會執行(停止 web 工程,也會銷燬 Filter 過濾器)

當系統中同時有多個過濾器的時候,我們將它們稱之爲過濾器鏈,執行順序按他們在web.xml中配置的順序,但裏面還會涉及到其他的一些細節,這裏不多贅述。

當系統中每創建一個Filter時,都會伴隨着創建一個FilterConfig對象,它擁有與之對應的那個Filter的所有配置信息

總結

這三大組件基本構成了一個JavaEE的核心,Servlet用來處理具體的業務邏輯,落實到底層其實就是通過Socket建立通信,通過IO實現數據的傳遞;Listener和Filter對於初學者來說對其可以應用的業務場景也許依舊模糊,但是這種模糊感一定會隨着自己經驗的增長以及知識體系的完善慢慢消除。

 

JavaWeb的其他核心概念

上面三章主要是圍繞瀏覽器和服務器之間的通信方式來展開的,還有一些其他的概念也沒有提,接下來主要是對JavaEE中涉及的幾個核心概念展開論述。

轉發和重定向

轉發:瀏覽器向服務器發送一次請求,服務器內部的Servlet交給另一個Servlet去處理了並向瀏覽器作出響應

轉發的特點:

  1. 只包含一次請求
  2. 地址欄不變
  3. 數據共享因爲只創建了一個Request
  4. 只能將請求轉發給服務器內部的組件

重定向:瀏覽器向服務器發送一次請求,服務器內部的Servlet向該瀏覽器響應了該請求並給他重新發送了一個地址,瀏覽器自動解析該地址並再一次向該地址發出請求

重定向的特點:

  1. 包含兩次請求
  2. 地址欄改變
  3. 數據無法共享
  4. 可以將請求轉發給外部組件

Cookie

Cookie 是服務器通知客戶端保存鍵值對的一種技術。客戶端有了 Cookie 後,每次請求都發送給服務器。每個 Cookie 的大小不能超過 4kb

Cookie支持生命控制,即可以設置其的銷燬時間

瀏覽器查看cookie的方式

Session

1、Session 是一個接口(HttpSession)。

2、Session 就是會話。它是用來維護一個客戶端和服務器之間關聯的一種技術。

3、每個客戶端都有自己的一個 Session 會話。並且存儲在服務器上。

4、Session 會話中,我們經常用來保存用戶登錄之後的信息。

5、Session也支持生命控制,超時了會自動銷燬,超時指的是兩次請求之間的最大時間間隔

瀏覽器和Session之間關聯的技術內幕,如下圖所示

由上圖可知,Session 技術,底層其實是基於 Cookie 技術來實現的。

ServletContext

1、ServletContext 是一個接口,它表示 Servlet 上下文對象

2、一個 web 工程,只有一個 ServletContext 對象實例。

3、ServletContext 對象是一個域對象。

4、ServletContext 是在 web 工程部署啓動的時候創建。在 web 工程停止的時候銷燬。

需要注意的是ServletContext和Session都是JavaEE的域對象,JavaEE的域對象總共有四個,剩下的兩個是HttpServletRequest和PageContext .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章