java web基礎(chǔ)篇——Web服務(wù)及Tomcat總結(jié)

一、Web服務(wù)

1.web服務(wù)器分類

Unix和Linux平臺(tái)下使用最廣泛的免費(fèi)HTTP服務(wù)器是Apache服務(wù)器,而Windows平臺(tái)的服務(wù)器通常使用IIS作為Web服務(wù)器。選擇Web服務(wù)器應(yīng)考慮的因素有:性能、安全性、日志和統(tǒng)計(jì)、虛擬主機(jī)、代理服務(wù)器、緩沖服務(wù)和集成應(yīng)用程序等。下面是對(duì)常見(jiàn)服務(wù)器的簡(jiǎn)介:

  • IIS:Microsoft的Web服務(wù)器產(chǎn)品,全稱是Internet Information Services。IIS是允許在公共Intranet或Internet上發(fā)布信息的Web服務(wù)器。IIS是目前最流行的Web服務(wù)器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在IIS的平臺(tái)上。IIS提供了一個(gè)圖形界面的管理工具,稱為Internet服務(wù)管理器,可用于監(jiān)視配置和控制Internet服務(wù)。IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁(yè)瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴(kuò)展Web服務(wù)器功能的編程接口;同時(shí),它還提供一個(gè)Internet數(shù)據(jù)庫(kù)連接器,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢和更新。

  • Kangle:Kangle Web服務(wù)器是一款跨平臺(tái)、功能強(qiáng)大、安全穩(wěn)定、易操作的高性能Web服務(wù)器和反向代理服務(wù)器軟件。此外,Kangle也是一款專為做虛擬主機(jī)研發(fā)的Web服務(wù)器。實(shí)現(xiàn)虛擬主機(jī)獨(dú)立進(jìn)程、獨(dú)立身份運(yùn)行。用戶之間安全隔離,一個(gè)用戶出問(wèn)題不影響其他用戶。支持PHP、ASP、ASP.NET、Java、Ruby等多種動(dòng)態(tài)開(kāi)發(fā)語(yǔ)言。

  • WebSphere:WebSphere Application Server是功能完善、開(kāi)放的Web應(yīng)用程序服務(wù)器,是IBM電子商務(wù)計(jì)劃的核心部分,它是基于Java的應(yīng)用環(huán)境,用于建立、部署和管理Internet和Intranet Web應(yīng)用程序,適應(yīng)各種Web應(yīng)用程序服務(wù)器的需要。

  • WebLogic:WebLogic Server是一款多功能、基于標(biāo)準(zhǔn)的Web應(yīng)用服務(wù)器,為企業(yè)構(gòu)建企業(yè)應(yīng)用提供了堅(jiān)實(shí)的基礎(chǔ)。針對(duì)各種應(yīng)用開(kāi)發(fā)、關(guān)鍵性任務(wù)的部署,各種系統(tǒng)和數(shù)據(jù)庫(kù)的集成、跨Internet協(xié)作等Weblogic都提供了相應(yīng)的支持。由于它具有全面的功能、對(duì)開(kāi)放標(biāo)準(zhǔn)的遵從性、多層架構(gòu)、支持基于組件的開(kāi)發(fā)等優(yōu)勢(shì),很多公司的企業(yè)級(jí)應(yīng)用都選擇它來(lái)作為開(kāi)發(fā)和部署的環(huán)境。WebLogic Server在使應(yīng)用服務(wù)器成為企業(yè)應(yīng)用架構(gòu)的基礎(chǔ)方面一直處于領(lǐng)先地位,為構(gòu)建集成化的企業(yè)級(jí)應(yīng)用提供了穩(wěn)固的基礎(chǔ)。

  • Apache:目前Apache仍然是世界上用得最多的Web服務(wù)器,其市場(chǎng)占有率很長(zhǎng)時(shí)間都保持在60%以上(目前的市場(chǎng)份額約40%左右)。世界上很多著名的網(wǎng)站都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開(kāi)放、有一支強(qiáng)大的開(kāi)發(fā)團(tuán)隊(duì)、支持跨平臺(tái)的應(yīng)用(可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺(tái)上)以及它的可移植性等方面。

  • Tomcat:Tomcat是一個(gè)開(kāi)放源代碼、運(yùn)行Servlet和JSP的容器。Tomcat實(shí)現(xiàn)了Servlet和JSP規(guī)范。此外,Tomcat還實(shí)現(xiàn)了Apache-Jakarta規(guī)范而且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好,因此目前也有不少的Web服務(wù)器都選擇了Tomcat。

  • Nginx:讀作"engine x",是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器。 Nginx是由Igor Sysoev為俄羅斯訪問(wèn)量第二的Rambler站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。在2014年下半年,Nginx的市場(chǎng)份額達(dá)到了14%。

2、web.xml文件中可以配置哪些內(nèi)容?

答:web.xml用于配置Web應(yīng)用的相關(guān)信息,如:監(jiān)聽(tīng)器(listener)、過(guò)濾器(filter)、 Servlet、相關(guān)參數(shù)、會(huì)話超時(shí)時(shí)間、安全驗(yàn)證方式、錯(cuò)誤頁(yè)面等,下面是一些開(kāi)發(fā)中常見(jiàn)的配置:
① 配置Spring上下文加載監(jiān)聽(tīng)器加載Spring配置文件并創(chuàng)建IoC容器:

  <context-param>
     <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <listener>
     <listener-class>
       org.springframework.web.context.ContextLoaderListener
     </listener-class>
  </listener>

② 配置Spring的OpenSessionInView過(guò)濾器來(lái)解決延遲加載和Hibernate會(huì)話關(guān)閉的矛盾:

  <filter>
      <filter-name>openSessionInView</filter-name>
      <filter-class>
         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
      </filter-class>
  </filter>

  <filter-mapping>
      <filter-name>openSessionInView</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

③ 配置會(huì)話超時(shí)時(shí)間為10分鐘:

  <session-config>
      <session-timeout>10</session-timeout>
  </session-config>

④ 配置404和Exception的錯(cuò)誤頁(yè)面:

  <error-page>
      <error-code>404</error-code>
      <location>/error.jsp</location>
  </error-page>

  <error-page>
      <exception-type>java.lang.Exception</exception-type>
      <location>/error.jsp</location>
  </error-page>

⑤ 配置安全認(rèn)證方式:

  <security-constraint>
      <web-resource-collection>
          <web-resource-name>ProtectedArea</web-resource-name>
          <url-pattern>/admin/*</url-pattern>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
      </web-resource-collection>
      <auth-constraint>
          <role-name>admin</role-name>
      </auth-constraint>
  </security-constraint>

  <login-config>
      <auth-method>BASIC</auth-method>
  </login-config>

  <security-role>
      <role-name>admin</role-name>
  </security-role>

說(shuō)明:對(duì)Servlet(小服務(wù))、Listener(監(jiān)聽(tīng)器)和Filter(過(guò)濾器)等Web組件的配置,Servlet 3規(guī)范提供了基于注解的配置方式,可以分別使用@WebServlet、@WebListener、@WebFilter注解進(jìn)行配置。

補(bǔ)充:如果Web提供了有價(jià)值的商業(yè)信息或者是敏感數(shù)據(jù),那么站點(diǎn)的安全性就是必須考慮的問(wèn)題。安全認(rèn)證是實(shí)現(xiàn)安全性的重要手段,認(rèn)證就是要解決“Are you who you say you are?”的問(wèn)題。認(rèn)證的方式非常多,簡(jiǎn)單說(shuō)來(lái)可以分為三類:
A. What you know? — 口令
B. What you have? — 數(shù)字證書(U盾、密保卡)
C. Who you are? — 指紋識(shí)別、虹膜識(shí)別
在Tomcat中可以通過(guò)建立安全套接字層(Secure Socket Layer, SSL)以及通過(guò)基本驗(yàn)證或表單驗(yàn)證來(lái)實(shí)現(xiàn)對(duì)安全性的支持。

二、Tomcat總結(jié)

1.Tomcat架構(gòu)

Tomcat架構(gòu)

Tomcat中最頂層的容器是Server,代表著整個(gè)服務(wù)器,從上圖中可以看出,一個(gè)Server可以包含至少一個(gè)Service,用于具體提供服務(wù)。
Service主要包含兩個(gè)部分:ConnectorContainer。從上圖中可以看出 Tomcat 的心臟就是這兩個(gè)組件,他們的作用如下:

  • Connector用于處理連接相關(guān)的事情,并提供Socket與Request和Response相關(guān)的轉(zhuǎn)化;
  • Container用于封裝和管理Servlet,以及具體處理Request請(qǐng)求;

一個(gè)Tomcat中只有一個(gè)Server,一個(gè)Server可以包含多個(gè)Service,一個(gè)Service只有一個(gè)Container,但是可以有多個(gè)Connectors,這是因?yàn)橐粋€(gè)服務(wù)可以有多個(gè)連接,如同時(shí)提供Http和Https鏈接,也可以提供向相同協(xié)議不同端口的連接,示意圖如下


Tomcat組成

小結(jié):
(1)Tomcat中只有一個(gè)Server,一個(gè)Server可以有多個(gè)Service,一個(gè)Service可以有多個(gè)Connector和一個(gè)Container;
(2)Server掌管著整個(gè)Tomcat的生死大權(quán);
(4)Service 是對(duì)外提供服務(wù)的;
(5)Connector用于接受請(qǐng)求并將請(qǐng)求封裝成Request和Response來(lái)具體處理;
(6)Container用于封裝和管理Servlet,以及具體處理request請(qǐng)求;

Connector和Container的微妙關(guān)系
由上述內(nèi)容我們大致可以知道一個(gè)請(qǐng)求發(fā)送到Tomcat之后,首先經(jīng)過(guò)Service然后會(huì)交給我們的Connector,Connector用于接收請(qǐng)求并將接收的請(qǐng)求封裝為Request和Response來(lái)具體處理,Request和Response封裝完之后再交由Container進(jìn)行處理,Container處理完請(qǐng)求之后再返回給Connector,最后在由Connector通過(guò)Socket將處理的結(jié)果返回給客戶端,這樣整個(gè)請(qǐng)求的就處理完了!

Connector最底層使用的是Socket來(lái)進(jìn)行連接的,Request和Response是按照HTTP協(xié)議來(lái)封裝的,所以Connector同時(shí)需要實(shí)現(xiàn)TCP/IP協(xié)議和HTTP協(xié)議!

《四張圖帶你了解Tomcat系統(tǒng)架構(gòu)--讓面試官顫抖的Tomcat回答系列!》

2.解釋什么是Jasper?

Jasper是Tomcat的JSP引擎,它解析JSP文件,將它們編譯成JAVA代碼作為servlet。在運(yùn)行時(shí),Jasper允許自動(dòng)檢測(cè)JSP文件的更改并重新編譯它們

3.請(qǐng)解釋Tomcat的默認(rèn)端口是什么?

Tomcat的默認(rèn)端口是8080。在本地機(jī)器上初始化Tomcat之后,可以驗(yàn)證Tomcat是否正在運(yùn)行URL:http://localhost:8080

4.請(qǐng)解釋Tomcat中使用的連接器是什么?

在Tomcat中,使用了兩種類型的連接器:
HTTP連接器:它有許多可以更改的屬性,以確定它的工作方式和訪問(wèn)功能,如重定向和代理轉(zhuǎn)發(fā)
AJP連接器:它以與HTTP連接器相同的方式工作,但是他們使用的是HTTP的AJP協(xié)議。AJP連接器通常通過(guò)插件技術(shù)mod_jk在Tomcat中實(shí)現(xiàn)

5.解釋如何使用WAR文件部署web應(yīng)用程序?

在Tomcat的web應(yīng)用程序目錄下,jsp、servlet和它們的支持文件被放置在適當(dāng)?shù)淖幽夸浿?。你可以將web應(yīng)用程序目錄下的所有文件壓縮到一個(gè)壓縮文件中,以.war文件擴(kuò)展名結(jié)束。你可以通過(guò)在webapps目錄中放置WAR文件來(lái)執(zhí)行web應(yīng)用程序。當(dāng)一個(gè)web服務(wù)器開(kāi)始執(zhí)行時(shí),它會(huì)將WAR文件的內(nèi)容提取到適當(dāng)?shù)膚ebapps子目錄中。

6.解釋什么是Tomcat Valve?說(shuō)明Tomcat配置了多少個(gè)Valve?

Tomcat Valve——Tomcat 4引入的新技術(shù),它允許您將Java類的實(shí)例鏈接到一個(gè)特定的Catalina容器。Tomcat配置了四種類型的Valve:

  • 訪問(wèn)日志
  • 遠(yuǎn)程地址過(guò)濾
  • 遠(yuǎn)程主機(jī)過(guò)濾器
  • 客戶請(qǐng)求記錄器
7.解釋servlet如何完成生命周期?

在Tomcat上運(yùn)行的典型servlet生命周期如下:

  • Tomcat通過(guò)它的其中一個(gè)連接器接收來(lái)自客戶端的請(qǐng)求
  • 進(jìn)程請(qǐng)求Tomcat將此請(qǐng)求映射為適當(dāng)?shù)腟ervlet
  • 一旦請(qǐng)求被定向到適當(dāng)?shù)膕ervlet,Tomcat就會(huì)驗(yàn)證servlet類是否已經(jīng)加載。如果不是,Tomcat將servlet包裝成Java字節(jié)碼,這是由JVM執(zhí)行的,并形成servlet的實(shí)例
  • Tomcat通過(guò)調(diào)用它的init來(lái)啟動(dòng)servlet,它包含能夠篩選Tomcat配置文件并相應(yīng)地采取行動(dòng)的代碼,并聲明它可能需要的任何資源
  • 一旦servlet啟動(dòng),Tomcat就可以調(diào)用servlet的服務(wù)方法來(lái)進(jìn)行請(qǐng)求
  • 在servlet的生命周期中,Tomcat和servlet可以通過(guò)使用偵聽(tīng)器類來(lái)進(jìn)行協(xié)調(diào)或通信,從而跟蹤各種狀態(tài)變化的servlet
  • 刪除servlet,Tomcat調(diào)用servlet銷毀方法
8.Tomcat優(yōu)化經(jīng)驗(yàn)

一、關(guān)掉對(duì)web.xml的監(jiān)視,把jsp提前編輯成Servlet。有富余物理內(nèi)存的情況,加大tomcat使用的jvm的內(nèi)存

二、服務(wù)器資源。服務(wù)器所能提供CPU、內(nèi)存、硬盤的性能對(duì)處理能力有決定性影響。
(1) 對(duì)于高并發(fā)情況下會(huì)有大量的運(yùn)算,那么CPU的速度會(huì)直接影響到處理速度。
(2) 內(nèi)存在大量數(shù)據(jù)處理的情況下,將會(huì)有較大的內(nèi)存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等參數(shù)對(duì)內(nèi)存不同功能塊進(jìn)行劃分。我們之前就遇到過(guò)內(nèi)存分配不足,導(dǎo)致虛擬機(jī)一直處于full GC,從而導(dǎo)致處理能力嚴(yán)重下降。
(3) 硬盤主要問(wèn)題就是讀寫性能,當(dāng)大量文件進(jìn)行讀寫時(shí),磁盤極容易成為性能瓶頸。最好的辦法還是利用下面提到的緩存。

三、利用緩存和壓縮
對(duì)于靜態(tài)頁(yè)面最好是能夠緩存起來(lái),這樣就不必每次從磁盤上讀。這里我們采用了Nginx作為緩存服務(wù)器,將圖片、css、js文件都進(jìn)行了緩存,有效的減少了后端tomcat的訪問(wèn)。另外,為了能加快網(wǎng)絡(luò)傳輸速度,開(kāi)啟gzip壓縮也是必不可少的。但考慮到tomcat已經(jīng)需要處理很多東西了,所以把這個(gè)壓縮的工作就交給前端的Nginx來(lái)完成。

除了文本可以用gzip壓縮,其實(shí)很多圖片也可以用圖像處理工具預(yù)先進(jìn)行壓縮,找到一個(gè)平衡點(diǎn)可以讓畫質(zhì)損失很小而文件可以減小很多。曾經(jīng)我就見(jiàn)過(guò)一個(gè)圖片從300多kb壓縮到幾十kb,自己幾乎看不出來(lái)區(qū)別。

四、采用集群
單個(gè)服務(wù)器性能總是有限的,最好的辦法自然是實(shí)現(xiàn)橫向擴(kuò)展,那么組建tomcat集群是有效提升性能的手段。我們還是采用了Nginx來(lái)作為請(qǐng)求分流的服務(wù)器,后端多個(gè)tomcat共享session來(lái)協(xié)同工作。可以參考之前寫的《利用nginx+tomcat+memcached組建web服務(wù)器負(fù)載均衡》。

五、 優(yōu)化tomcat參數(shù)
這里以tomcat7的參數(shù)配置為例,需要修改conf/server.xml文件,主要是優(yōu)化連接配置,關(guān)閉客戶端dns查詢。

<Connector port="8080"   
           protocol="org.apache.coyote.http11.Http11NioProtocol"  
           connectionTimeout="20000"  
           redirectPort="8443"   
           maxThreads="500"   
           minSpareThreads="20"  
           acceptCount="100" 
           disableUploadTimeout="true" 
           enableLookups="false"   
           URIEncoding="UTF-8" /> 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0 系列目錄# WEB請(qǐng)求處理 WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理 WEB請(qǐng)求處理二:Nginx請(qǐng)求反向代理 本...
    七寸知架構(gòu)閱讀 14,246評(píng)論 22 189
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,618評(píng)論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,818評(píng)論 11 349
  • 我沒(méi)想明白過(guò)哪一種生活對(duì)幸福的定義更恰當(dāng),只是回顧我們走過(guò)的路,都是好春光,都像夢(mèng)一場(chǎng)。
    V李尋歡閱讀 559評(píng)論 0 0
  • 春秋時(shí)期五霸之首的齊桓公,好戰(zhàn)兼好學(xué),閑時(shí)堂上讀書。一日,御用輪匠名扁,是斫車輪的老手,應(yīng)召到堂下修車輪。輪扁右手...
    太極闡教閱讀 1,067評(píng)論 0 0

友情鏈接更多精彩內(nèi)容