Java.Servlet.Spring.Python框架圖

image.png
image.png
image.png

image.png

image.png

image.png
image.png

image.png
image.png

image.png

image.png

image.png

image.png
image.png
image.png
image.png

一圖勝千言,下面圖解均來自Program Creek 網(wǎng)站的Java教程委可,目前它們擁有最多的票選。如果圖解沒有闡明問題腊嗡,那么你可以借助它的標(biāo)題來一窺究竟着倾。

1拾酝、字符串不變性

下面這張圖展示了這段代碼做了什么

String s = "abcd"``;

s = s.concat(``"ef"``);

image

2、equals()方法卡者、hashCode()方法的區(qū)別

HashCode被設(shè)計用來提高性能蒿囤。equals()方法與hashCode()方法的區(qū)別在于:

  1. 如果兩個對象相等(equal),那么他們一定有相同的哈希值崇决。
  2. 如果兩個對象的哈希值相同蟋软,但他們未必相等(equal)。

3嗽桩、Java異常類的層次結(jié)構(gòu)

圖中紅色部分為受檢查異常岳守。它們必須被捕獲,或者在函數(shù)中聲明為拋出該異常碌冶。

4湿痢、集合類的層次結(jié)構(gòu)

注意Collections和Collection的區(qū)別。(Collections包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法)

5扑庞、Java同步

Java同步機(jī)制可通過類比建筑物來闡明譬重。

6、別名

別名意味著有多個變量指向同一可被更新的內(nèi)存塊罐氨,這些別名分別是不同的對象類型臀规。

7、堆和棧

圖解表明了方法和對象在運(yùn)行時內(nèi)存中的位置栅隐。

8塔嬉、Java虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)域

圖解展示了整個虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)域的情況。

image.png

image.png

image.png

Tomcat和JVM:

一個Tomcat只會啟動一個JVM租悄,所有webapps公用一個JVM進(jìn)程谨究,所以System.exit()會導(dǎo)致影響同個Tomcat中的其他應(yīng)用。Tomcat通過調(diào)用配置的JDK或JRE來啟動JVM泣棋。

體系結(jié)構(gòu):

image

Server:A Server element represents the entire Catalina servlet container. (Singleton)

Service:它由一個或者多個Connector組成胶哲,以及一個Engine,負(fù)責(zé)處理所有Connector所獲得的客戶請求潭辈。

Connector

  • TOMCAT有兩個典型的Connector鸯屿,一個直接偵聽來自browser的http請求,一個偵聽來自其它WebServer的請求
  • Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求
  • Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求

Engine

  • Engine下可以配置多個虛擬主機(jī)Virtual Host把敢,每個虛擬主機(jī)都有一個域名
  • 當(dāng)Engine獲得一個請求時寄摆,它把該請求匹配到某個Host上,然后把該請求交給該Host來處理
  • Engine有一個默認(rèn)虛擬主機(jī)技竟,當(dāng)請求無法匹配到任何一個Host上的時候冰肴,將交給該默認(rèn)Host來處理

Host

  • 代表一個Virtual Host屈藐,虛擬主機(jī)榔组,每個虛擬主機(jī)和某個網(wǎng)絡(luò)域名Domain Name相匹配
  • 每個虛擬主機(jī)下都可以部署(deploy)一個或者多個Web App熙尉,每個Web App對應(yīng)于一個Context,有一個Context path
  • 當(dāng)Host獲得一個請求時搓扯,將把該請求匹配到某個Context上检痰,然后把該請求交給該Context來處理
  • 匹配的方法是“最長匹配”,所以一個path==”"的Context將成為該Host的默認(rèn)Context
  • 所有無法和其它Context的路徑名匹配的請求都將最終和該默認(rèn)Context匹配

Context

  • 一個Context對應(yīng)于一個Web Application锨推,一個Web Application由一個或者多個Servlet組成
  • Context在創(chuàng)建的時候?qū)⒏鶕?jù)配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
  • 當(dāng)Context獲得請求時铅歼,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
  • 如果找到,則執(zhí)行該類换可,獲得請求的回應(yīng)椎椰,并返回

另外一個架構(gòu)圖:

image

Tomcat Server處理一個http請求的過程

假設(shè)來自客戶的請求為:

http://localhost:8080/wsota/wsota_index.jsp

  1. 請求被發(fā)送到本機(jī)端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
  2. Connector把該請求交給它所在的Service的Engine來處理沾鳄,并等待來自Engine的回應(yīng)
  3. Engine獲得請求localhost/wsota/wsota_index.jsp慨飘,匹配它所擁有的所有虛擬主機(jī)Host
  4. Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因?yàn)樵揌ost被定義為該Engine的默認(rèn)主機(jī))
  5. localhost Host獲得請求/wsota/wsota_index.jsp译荞,匹配它所擁有的所有Context
  6. Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為”"的Context去處理)
  7. path=”/wsota”的Context獲得請求/wsota_index.jsp瓤的,在它的mapping table中尋找對應(yīng)的servlet
  8. Context匹配到URL PATTERN為*.jsp的servlet,對應(yīng)于JspServlet類
  9. 構(gòu)造HttpServletRequest對象和HttpServletResponse對象吞歼,作為參數(shù)調(diào)用JspServlet的doGet或doPost方法
    10)Context把執(zhí)行完了之后的HttpServletResponse對象返回給Host
    11)Host把HttpServletResponse對象返回給Engine
    12)Engine把HttpServletResponse對象返回給Connector
    13)Connector把HttpServletResponse對象返回給客戶browser

安裝和配置:

  1. 下載:tomcat.apache.org(分Unix 和 windows版)
  2. 解壓到Windows或Unix目錄下
  3. 配置端口:server.xml
  4. 配置Tomcat登錄用戶名密碼:tomcat-user.xml,
    <tomcat-users> <user name="admin" password="admin" roles="admin-gui,manager-gui" /> </tomcat-users>
  5. 配置好JDK圈膏,配置JAVA_HOME環(huán)境變量
  6. 修改端口:<Connector port="80" protocol="HTTP/1.1" ……/>
  • 啟動
    • Windows: startup.bat (可以在文件末尾加入pause指令,方便查看啟動結(jié)果)
    • Unix: ./startup.sh(觀察log:tail -f catalina.log)
  • 關(guān)閉
    • Windows: shutdown.bat
    • Unix: ./shutdown.sh

Tomcat目錄結(jié)構(gòu)
bin --- 存放tomcat啟動關(guān)閉程序
conf --- 存放tomcat配置文件
lib --- tomcat運(yùn)行需要jar包
logs --- tomcat日志文件
webapps --- 網(wǎng)站發(fā)布目錄(所有網(wǎng)站可以發(fā)布到該目錄)
work --- 存放工程運(yùn)行時篙骡,產(chǎn)生數(shù)據(jù)文件(JSP翻譯Servlet稽坤、Session持久化數(shù)據(jù))

站點(diǎn)根目錄:
------- 靜態(tài)web資源、jsp
------- WEB-INF目錄
------- classes目錄 (保存,class文件)
-------- lib 目錄 (當(dāng)前網(wǎng)站需要jar包)
-------- web.xml (網(wǎng)站配置文件)

  • WEB-INF目錄不是必須的糯俗,沒有java動態(tài)程序代碼慎皱, 可以沒有WEB-INF 目錄
  • WEB-INF目錄下資源不能被瀏覽器直接訪問

如何設(shè)置tomcat壓縮:
通過設(shè)置tomcat/conf/server.xml設(shè)置響應(yīng)數(shù)據(jù)壓縮
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"

           **compression="on"**

** compressionMinSize="256"**

           compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,application/json"/>

注:compressionMinSize推薦值在150和1000之間

清除瀏覽器緩存,重啟tomcat

支持下載文件名為中文的文件:

<Connector port="8080"
URIEncoding="utf-8"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

Jetty的基本架構(gòu)

image

jetty的主要組件的類圖

image

整個 Jetty 的核心是圍繞著 Server 類來構(gòu)建叶骨,Server 類繼承了 Handler茫多,關(guān)聯(lián)了 Connector 和 Container。Container 是管理 Mbean 的容器忽刽。

Jetty 的 Server 的擴(kuò)展主要是實(shí)現(xiàn)一個個 Handler 并將 Handler 加到 Server 中天揖,Server 中提供了調(diào)用這些 Handler 的訪問規(guī)則。

整個 Jetty 的所有組件的生命周期管理是基于觀察者模板設(shè)計跪帝,它和 Tomcat 的管理是類似的今膊。下面是 LifeCycle 的類關(guān)系圖

image

Handler 的體系結(jié)構(gòu)

image

Jetty 主要提供了兩種 Handler 類型,一種是 HandlerWrapper伞剑,它可以將一個 Handler 委托給另外一個類去執(zhí)行斑唬,如我們要將一個 Handler 加到 Jetty 中,那么就必須將這個 Handler 委托給 Server 去調(diào)用。配合 ScopeHandler 類我們可以攔截 Handler 的執(zhí)行恕刘,在調(diào)用 Handler 之前或之后缤谎,可以做一些另外的事情,類似于 Tomcat 中的 Valve褐着;

另外一個 Handler 類型是 HandlerCollection坷澡,這個 Handler 類可以將多個 Handler 組裝在一起,構(gòu)成一個 Handler 鏈含蓉,方便我們做擴(kuò)展频敛。

image.png

image.png
image.png

image.png

image.png
image.png

image.png

image.png

image.png
image.png

image.png

image.png

image.png

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裕坊,一起剝皮案震驚了整個濱河市秀撇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咖刃,老刑警劉巖差油,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汁展,死亡現(xiàn)場離奇詭異,居然都是意外死亡厌殉,警方通過查閱死者的電腦和手機(jī)食绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來公罕,“玉大人器紧,你說我怎么就攤上這事÷ゾ欤” “怎么了铲汪?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罐柳。 經(jīng)常有香客問我掌腰,道長,這世上最難降的妖魔是什么张吉? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任齿梁,我火速辦了婚禮,結(jié)果婚禮上肮蛹,老公的妹妹穿的比我還像新娘勺择。我一直安慰自己,他們只是感情好伦忠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布省核。 她就那樣靜靜地躺著,像睡著了一般昆码。 火紅的嫁衣襯著肌膚如雪气忠。 梳的紋絲不亂的頭發(fā)上邻储,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機(jī)與錄音旧噪,去河邊找鬼吨娜。 笑死,一個胖子當(dāng)著我的面吹牛舌菜,可吹牛的內(nèi)容都是我干的萌壳。 我是一名探鬼主播亦镶,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼日月,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缤骨?” 一聲冷哼從身側(cè)響起爱咬,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绊起,沒想到半個月后精拟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虱歪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年蜂绎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笋鄙。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡师枣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萧落,到底是詐尸還是另有隱情践美,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布找岖,位于F島的核電站陨倡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏许布。R本人自食惡果不足惜兴革,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜜唾。 院中可真熱鬧帖旨,春花似錦、人聲如沸灵妨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泌霍。三九已至货抄,卻和暖如春述召,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟹地。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工积暖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怪与。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓夺刑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親分别。 傳聞我的和親對象是個殘疾皇子遍愿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容