JavaWeb總結 - 走向框架

總結

爲了更好的瞭解框架,我去複習了JavaWeb的基礎知識

當我學完了JavaWeb的基礎知識,在去看Spring簡單多了,腦海裏也能夠想象出解決的思路(當然,具體如何執行的還要深入瞭解)


XML

剛剛接觸JavaWeb,相信都搞不懂爲什麼一個一個零件(Servlet、Jsp、Listener等等)可以拼裝在一起形成一個網頁?

爲什麼各種組件需要註冊到web.xml中?

在這裏插入圖片描述

web.xml中上面一堆的地址是什麼?
爲什麼一個標籤<servlet></servlet>就註冊了一個servlet容器?

通過兩章的複習,學習

真的瞭解XML嗎? - XML 基礎
真的瞭解XML嗎? - XML解析方式

大致明白了實現的思路:

  • XML是一種標記語言,是一種數據格式
  • 這些格式、上面的地址是Schema約束技術,用來約束標籤內容,指定約束文件地址
  • 通過dom或者sax解析方式可以得到xml配置文件中設置的信息
  • 得到了這些配置信息,再經過服務器內部的一些定義類就可以完成註冊(具體實現需要解讀Tomcat源碼,暫時做不到)

Servlet

Servlet是什麼?爲什麼通過Servlet就可以處理瀏覽器信息?

在這裏插入圖片描述
Tomcat服務器=Web服務器+Servlet/JSP容器(Web容器)

Servlet是用Java編寫的服務器端程序,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容,Servlet是具體處理業務的地方

在Tomcat中,各種請求的處理都是各種Servlet,包括默認頁面處理DefaultServlet,JSP頁面處理JspServlet等等

可以看:真的瞭解Servlet嗎?- Tomcat與Servlet
真的瞭解Servlet嗎? - Servlet的一些細節

Servlet本身有三個層次,Servlet接口、GenericServlet抽象類、HttpServlet類

還有服務器的各種狀態對象、域對象等:ServletConfig是什麼?ServletContext是什麼?都需要知道


Request和Response

瀏覽器和服務器怎麼交流的?

這裏涉及到HTTP協議,或者說網絡通信協議模式

網絡通信協議(1)網絡通信瞭解五層網絡模型,大致瞭解網絡通信是怎麼完成的?

網絡通信協議(4)HTTP協議瞭解HTTP協議:瀏覽器與服務器如何交流?

服務器對於一次瀏覽器請求,會創建兩種對象:Request、Response
這兩種對象也有3個層次:Request、Response到ServeltRqeuset、ServeltResponse到HttpServletRequest、HttpServletResponse

分別對應Servlet的3個層次:Servlet接口、GenericServlet抽象類、HttpServlet類

HttpServletRequest裏包含了瀏覽器請求和HTTP協議的信息,HttpServletResponse創建時是一個空對象,當服務器響應給瀏覽器信息時,響應信息保存在Response中


Cookie和Session

Cookie的具體知識可以看:真的瞭解Cookie嗎 - Cookie詳解

Session的具體知識可以看:真的瞭解Session嗎 - Session詳解

Cookie和Session是什麼?爲什麼要Cookie和Session?Cookie和Session怎麼用?

由於歷史原因,HTTP協議是無狀態的
無狀態就是:HTTP協議不會保存一次客戶端、服務器會話的臨時數據(用戶名、密碼等),服務器不會記憶客戶端的信息,每一次請求都是獨立的

爲了解決無狀態的造成的問題,客戶端有了Cookie,服務器有了Session

Cookie是將會話的臨時信息以Cookie文件的形式存儲在客戶端上,每次請求帶上Cookie即可

即是用Cookie存儲了這些臨時信息,url請求時不需要在url後帶上一串參數
在這裏插入圖片描述

但是Cookie有一定的侷限性:保存在客戶端不安全,且攜帶不了很多信息

而Session是保存在服務器上的,在服務器保存這些會話的臨時信息,僅需創建一個唯一的JSESSIONID 傳輸給客戶端,客戶端在請求時帶上JSESSIONID就可以獲得會話的臨時數據,Session是基於Cookie的

但是Session也可以不使用Cookie技術,使用url傳值也行


Listener

JavaWeb有3個組件:Servlet、Listener、Filter
Servlet是處理,Listener是監聽

Listener的具體知識:真的瞭解Listener嗎?- Listener詳解

一張圖表示監聽器:
在這裏插入圖片描述

監聽器可以監聽服務器中的3個域對象:Request、Session、Context

監聽器涉及到觀察者模式,觀察者模式的使用挺廣的,包括MVC等,需要學習一下


Filter

Filter是過濾器
過濾器是什麼?有什麼用?怎麼用?

可以看看真的瞭解Filter嗎?- Filter詳解

這個時候大致明白了3個組件的運作了:
在這裏插入圖片描述

通過我們自定義的Filter過濾器,過濾掉我們不需要的請求,也可以過濾響應信息

Filter的繼承體系和Servlet類似:Filter - > GenericFilter - > HttpFilter

每一個Filter都會隨着服務器的創建而創建,關閉而銷燬,是唯一的(所以對於多種過濾需要多個過濾器)

Filter中有4個對象需要關注:Request、Response、FilterConfig、FilterChain

FilterConfig是過濾器配置信息(可以得到ServletConfig)
FilterChain是過濾鏈,過濾器是順序執行的,需要FilterChain對象連通


JDBC

到這裏,Tomcat服務怎麼運行大致瞭解了,在運行時,可能要保存數據、調用數據,就必須要用到數據庫

一個Java程序如何使用數據庫呢?
最好的方式是通過JDBC連接相應的數據庫驅動,通過驅動連接數據庫

關於JDBC的實現,可以看
真的瞭解JDBC嗎?- JDBC詳解

在這裏插入圖片描述

JDBC需要關注4個對象:DriverManager、Connection、Statement、ResultSet

DriverManager管理註冊到其上的Driver驅動,程序調用驅動連接數據庫通過DriverManager的DriverManager.getConnection(url,name,password);獲得連接對象(本質上還是Driver的connect方法連接的數據庫)

Connection是對程序連接數據庫的一種抽象,把連接抽象成一個對象,通過這個對象可以獲得連接信息
在這裏插入圖片描述

Statement是sql執行對象,是靜態的,一般使用的是PrepareStatement動態執行對象,不僅功能多,而且安全,避免sql注入的危險

執行sql方法有execute、executeQuery、executeUpdate,三者的選擇?

ResultSet是一個結果集,即執行完sql語句後數據庫返回的執行結果,類似與迭代器,可以迭代獲取結果

其實還有很多細節沒有去深究


Json

Json、XML都是數據格式,爲什麼選用Json來作爲客戶端、服務器的數據傳輸格式?
簡單瞭解了Json的格式與使用:Web - Json數據交換格式

XML是重量級的數據格式:
需要約束文件,需要標籤定義,需要解析方式
Json是輕量級的數據格式:
基於JavaScript的語法,鍵值對存儲數據,不需要解析,直接拿取數據即可

JSON是現在最流行的數據交換格式,XML是流行的配置文件


未涉及的知識點

在這裏插入圖片描述

JavaWeb知識挺多的,還包含了前端知識:HTML、CSS、JavaScript、JQuery等
前後端異步結合:AJAX
動態頁面:JSP
EL表達式等等

前端知識HTML是名詞、css是形容詞、JavaScript是動詞,JQuery是JS的升級
入門容易,深入複雜

AJAX可以深入瞭解一下(但是Thymeleaf太好用了)
JSP和EL等,慢慢的使用少了,瞭解即可


走向框架

既然普通的JavaWeb可以實現Web開發,爲什麼要框架?

以我當前的使用來說,普通的JavaWeb太複雜了。。。

Servlet、Listener、Filter必須註冊在web.xml中(Spring已經可以不用配置xml了)
而且這些組件的使用也很複雜,繼承接口、重寫方法。。。
JDBC連接數據庫,每一個操作必須手寫連接、sql語句(JPA不用寫sql語句,MyBatis要寫sql語句但是處理簡單)
前後端結合AJAX,而Thymeleaf模板可以輕鬆搞定

我沒有經歷過使用JavaWeb開發Web的時代,但是框架確實好用

未來,將開始Spring的深入學習