爲了更好的瞭解框架,我去複習了JavaWeb的基礎知識
當我學完了JavaWeb的基礎知識,在去看Spring簡單多了,腦海裏也能夠想象出解決的思路(當然,具體如何執行的還要深入瞭解)
剛剛接觸JavaWeb,相信都搞不懂爲什麼一個一個零件(Servlet、Jsp、Listener等等)可以拼裝在一起形成一個網頁?
爲什麼各種組件需要註冊到web.xml中?
web.xml中上面一堆的地址是什麼?
爲什麼一個標籤<servlet></servlet>
就註冊了一個servlet容器?
通過兩章的複習,學習
真的瞭解XML嗎? - XML 基礎
真的瞭解XML嗎? - XML解析方式
大致明白了實現的思路:
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是什麼?都需要知道
瀏覽器和服務器怎麼交流的?
這裏涉及到HTTP協議,或者說網絡通信協議模式
網絡通信協議(1)網絡通信瞭解五層網絡模型,大致瞭解網絡通信是怎麼完成的?
網絡通信協議(4)HTTP協議瞭解HTTP協議:瀏覽器與服務器如何交流?
服務器對於一次瀏覽器請求,會創建兩種對象:Request、Response
這兩種對象也有3個層次:Request、Response到ServeltRqeuset、ServeltResponse到HttpServletRequest、HttpServletResponse
分別對應Servlet的3個層次:Servlet接口、GenericServlet抽象類、HttpServlet類
HttpServletRequest裏包含了瀏覽器請求和HTTP協議的信息,HttpServletResponse創建時是一個空對象,當服務器響應給瀏覽器信息時,響應信息保存在Response中
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傳值也行
JavaWeb有3個組件:Servlet、Listener、Filter
Servlet是處理,Listener是監聽
Listener的具體知識:真的瞭解Listener嗎?- Listener詳解
一張圖表示監聽器:
監聽器可以監聽服務器中的3個域對象:Request、Session、Context
監聽器涉及到觀察者模式,觀察者模式的使用挺廣的,包括MVC等,需要學習一下
Filter是過濾器
過濾器是什麼?有什麼用?怎麼用?
這個時候大致明白了3個組件的運作了:
通過我們自定義的Filter過濾器,過濾掉我們不需要的請求,也可以過濾響應信息
Filter的繼承體系和Servlet類似:Filter - > GenericFilter - > HttpFilter
每一個Filter都會隨着服務器的創建而創建,關閉而銷燬,是唯一的(所以對於多種過濾需要多個過濾器)
Filter中有4個對象需要關注:Request、Response、FilterConfig、FilterChain
FilterConfig是過濾器配置信息(可以得到ServletConfig)
FilterChain是過濾鏈,過濾器是順序執行的,需要FilterChain對象連通
到這裏,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、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的深入學習