欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Tomcat啟動分析

系統 1917 0

1 - Tomcat Server的組成部分
1.1 - Server
A Server element represents the entire Catalina servlet container. (Singleton)
1.2 - Service
A Service element represents the combination of one or more Connector components that share a single Engine
Service是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求
1.3 - Connector
一個Connector將在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得回應并返回客戶
TOMCAT有兩個典型的Connector,一個直接偵聽來自browser的http請求,一個偵聽來自其它WebServer的請求
Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求
Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求
1.4 - Engine
The Engine element represents the entire request processing machinery associated with a particular Service
It receives and processes all requests from one or more Connectors
and returns the completed response to the Connector for ultimate transmission back to the client
Engine下可以配置多個虛擬主機Virtual Host,每個虛擬主機都有一個域名
當Engine獲得一個請求時,它把該請求匹配到某個Host上,然后把該請求交給該Host來處理
Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認Host來處理
1.5 - Host
代表一個Virtual Host,虛擬主機,每個虛擬主機和某個網絡域名Domain Name相匹配
每個虛擬主機下都可以部署(deploy)一個或者多個Web App,每個Web App對應于一個Context,有一個Context path
當Host獲得一個請求時,將把該請求匹配到某個Context上,然后把該請求交給該Context來處理
匹配的方法是“最長匹配”,所以一個path==""的Context將成為該Host的默認Context
所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配
1.6 - Context
一個Context對應于一個Web Application,一個Web Application由一個或者多個Servlet組成
Context在創建的時候將根據配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
如果找到,則執行該類,獲得請求的回應,并返回
2 - Tomcat Server的結構圖

3 - 配置文件$CATALINA_HOME/conf/server.xml的說明
該文件描述了如何啟動Tomcat Server


<!-- 啟動Server
???? 在端口8005處等待關閉命令
???? 如果接受到"SHUTDOWN"字符串則關閉服務器
???? -->

<Server port="8005" shutdown="SHUTDOWN" debug="0">


? <!-- Listener ???
?????? 目前沒有看到這里
?????? -->

? <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
? <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>


? <!-- Global JNDI resources ???
?????? 目前沒有看到這里,先略去
?????? -->

? <GlobalNamingResources>
??? ... ... ... ...
? </GlobalNamingResources>


? <!-- Tomcat的Standalone Service
?????? Service是一組Connector的集合
?????? 它們共用一個Engine來處理所有Connector收到的請求
?????? -->

? <Service name="Tomcat-Standalone">


??? <!-- Coyote HTTP/1.1 Connector
???????? className : 該Connector的實現類是org.apache.coyote.tomcat4.CoyoteConnector
???????? port : 在端口號8080處偵聽來自客戶browser的HTTP1.1請求
???????? minProcessors : 該Connector先創建5個線程等待客戶請求,每個請求由一個線程負責
???????? maxProcessors : 當現有的線程不夠服務客戶請求時,若線程總數不足75個,則創建新線程來處理請求
???????? acceptCount : 當現有線程已經達到最大數75時,為客戶請求排隊
?????????????????????? 當隊列中請求數超過100時,后來的請求返回Connection refused錯誤
???????? redirectport : 當客戶請求是https時,把該請求轉發到端口8443去
???????? 其它屬性略
???????? -->

??? <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
?????????????? port="8080"
?????????????? minProcessors="5" maxProcessors="75" acceptCount="100"
?????????????? enableLookups="true"
?????????????? redirectPort="8443"
?????????????? debug="0"
?????????????? connectionTimeout="20000"
?????????????? useURIValidationHack="false"
?????????????? disableUploadTimeout="true" />


??? <!-- Engine用來處理Connector收到的Http請求
???????? 它將匹配請求和自己的虛擬主機,并把請求轉交給對應的Host來處理
???????? 默認虛擬主機是localhost
???????? -->

??? <Engine name="Standalone" defaultHost="localhost" debug="0">
???

????? <!-- 日志類,目前沒有看到,略去先 -->

????? <Logger className="org.apache.catalina.logger.FileLogger" .../>

????? <!-- Realm,目前沒有看到,略去先 -->

????? <Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>


????? <!-- 虛擬主機localhost
?????????? appBase : 該虛擬主機的根目錄是webapps/
?????????? 它將匹配請求和自己的Context的路徑,并把請求轉交給對應的Context來處理
?????????? -->

????? <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
?????

??????? <!-- 日志類,目前沒有看到,略去先 -->

??????? <Logger className="org.apache.catalina.logger.FileLogger" .../>
?????

??????? <!-- Context,對應于一個Web App
???????????? path : 該Context的路徑名是"",故該Context是該Host的默認Context
???????????? docBase : 該Context的根目錄是webapps/mycontext/
???????????? -->

??????? <Context path="" docBase="mycontext" debug="0"/>
???????

??????? <!-- 另外一個Context,路徑名是/wsota -->

??????? <Context path="/wsota" docBase="wsotaProject" debug="0"/>
????????????
???????
????? </Host>
?????
??? </Engine>

? </Service>

</Server>


<!----------------------------------------------------------------------------------------------->

4 - Context的部署配置文件web.xml的說明
一個Context對應于一個Web App,每個Web App是由一個或者多個servlet組成的
當一個Web App被初始化的時候,它將用自己的ClassLoader對象載入“部署配置文件web.xml”中定義的每個servlet類
它首先載入在$CATALINA_HOME/conf/web.xml中部署的servlet類
然后載入在自己的Web App根目錄下的WEB-INF/web.xml中部署的servlet類
web.xml文件有兩部分:servlet類定義和servlet映射定義
每個被載入的servlet類都有一個名字,且被填入該Context的映射表(mapping table)中,和某種URL PATTERN對應
當該Context獲得請求時,將查詢mapping table,找到被請求的servlet,并執行以獲得請求回應
分析一下所有的Context共享的web.xml文件,在其中定義的servlet被所有的Web App載入

<!----------------------------------------------------------------------------------------------->


<web-app>


? <!-- 概述:
?????? 該文件是所有的WEB APP共用的部署配置文件,
?????? 每當一個WEB APP被DEPLOY,該文件都將先被處理,然后才是WEB APP自己的/WEB-INF/web.xml
?????? -->



? <!--? +-------------------------+? -->
? <!--? |??? servlet類定義部分??? |? -->
? <!--? +-------------------------+? -->

?

? <!-- DefaultServlet
?????? 當用戶的HTTP請求無法匹配任何一個servlet的時候,該servlet被執行
?????? URL PATTERN MAPPING : /
?????? -->

??? <servlet>
??????? <servlet-name>default</servlet-name>
??????? <servlet-class>
????????? org.apache.catalina.servlets.DefaultServlet
??????? </servlet-class>
??????? <init-param>
??????????? <param-name>debug</param-name>
??????????? <param-value>0</param-value>
??????? </init-param>
??????? <init-param>
??????????? <param-name>listings</param-name>
??????????? <param-value>true</param-value>
??????? </init-param>
??????? <load-on-startup>1</load-on-startup>
??? </servlet>


? <!-- InvokerServlet
?????? 處理一個WEB APP中的匿名servlet
?????? 當一個servlet被編寫并編譯放入/WEB-INF/classes/中,卻沒有在/WEB-INF/web.xml中定義的時候
?????? 該servlet被調用,把匿名servlet映射成/servlet/ClassName的形式
?????? URL PATTERN MAPPING : /servlet/*
?????? -->

??? <servlet>
??????? <servlet-name>invoker</servlet-name>
??????? <servlet-class>
????????? org.apache.catalina.servlets.InvokerServlet
??????? </servlet-class>
??????? <init-param>
??????????? <param-name>debug</param-name>
??????????? <param-value>0</param-value>
??????? </init-param>
??????? <load-on-startup>2</load-on-startup>
??? </servlet>


? <!-- JspServlet
?????? 當請求的是一個JSP頁面的時候(*.jsp)該servlet被調用
?????? 它是一個JSP編譯器,將請求的JSP頁面編譯成為servlet再執行
?????? URL PATTERN MAPPING : *.jsp
?????? -->

??? <servlet>
??????? <servlet-name>jsp</servlet-name>
??????? <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
??????? <init-param>
??????????? <param-name>logVerbosityLevel</param-name>
??????????? <param-value>WARNING</param-value>
??????? </init-param>
??????? <load-on-startup>3</load-on-startup>
??? </servlet>



? <!--? +---------------------------+? -->
? <!--? |??? servlet映射定義部分??? |? -->
? <!--? +---------------------------+? -->

???
??? <servlet-mapping>
??????? <servlet-name>default</servlet-name>
??????? <url-pattern>/</url-pattern>
??? </servlet-mapping>

??? <servlet-mapping>
??????? <servlet-name>invoker</servlet-name>
??????? <url-pattern>/servlet/*</url-pattern>
??? </servlet-mapping>

??? <servlet-mapping>
??????? <servlet-name>jsp</servlet-name>
??????? <url-pattern>*.jsp</url-pattern>
??? </servlet-mapping>


? <!--? +------------------------+? -->
? <!--? |??? 其它部分,略去先??? |? -->
? <!--? +------------------------+? -->

??? ... ... ... ...

</web-app>


<!----------------------------------------------------------------------------------------------->

5 - Tomcat Server處理一個http請求的過程
假設來自客戶的請求為:
http://localhost:8080/wsota/wsota_index.jsp
1) 請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
2) Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host
4) Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
6) Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
7) path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet
8) Context匹配到URL PATTERN為*.jsp的servlet,對應于JspServlet類
9) 構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
10)Context把執行完了之后的HttpServletResponse對象返回給Host
11)Host把HttpServletResponse對象返回給Engine
12)Engine把HttpServletResponse對象返回給Connector
13)Connector把HttpServletResponse對象返回給客戶browser

一、Tomcat背景
  自從JSP發布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發以后,開始考慮在SUN的JSWDK基礎上開發一個可以直接提供Web服務的JSP服務器,當然同時也支持Servlet, 這樣Tomcat就誕生了。Tomcat是jakarta項目中的一個重要的子項目,其被JavaWorld雜志的編輯選為2001年度最具創新的java產品,同時它又是sun公司官方推薦的servlet和jsp容器,因此其越來越多的受到軟件公司和開發人員的喜愛。servlet和jsp的最新規范都可以在tomcat的新版本中得到實現。其次,Tomcat是完全免費的軟件,任何人都可以從互聯網上自由地下載。Tomcat與Apache的組合相當完美。

二、Tomcat目錄
tomcat
|---bin Tomcat:存放啟動和關閉tomcat腳本;
|---conf Tomcat:存放不同的配置文件(server.xml和web.xml);
|---doc:存放Tomcat文檔;
|---lib/japser/common:存放Tomcat運行需要的庫文件(JARS);
|---logs:存放Tomcat執行時的LOG文件;
|---src:存放Tomcat的源代碼;
|---webapps:Tomcat的主要Web發布目錄(包括應用程序示例);
|---work:存放jsp編譯后產生的class文件;


三、Tomcat類加載
??? Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)
System($CLASSPATH/*.class和指定的jar)
Common($CATALINA_HOME/common 下的classes,lib,endores三個子目錄)
Catalina ($CATALINA_HOME/server/下的classes和lib目錄僅對Tomcat可見)
&Shared($CATALINA_HOME/shared/下的classes和lib目錄以及$CATALINA_HOME/lib目錄)僅對Web應用程序可見,對Tomcat不可見WebApp($WEBAPP/Web-INF/*僅對該WEB應用可見classes/*.class lib/*.jar)


加載類和資源的順序為:
1、/Web-INF/classes
2、/Web-INF/lib/*.jar
3、Bootstrap
4、System
5、$CATALINA_HOME/common/classes
6、$CATALINA_HOME/common/endores/*.jar
7、$CATALINA_HOME/common/lib/*.jar
8、$CATALINA_HOME/shared/classes
9、$CATALINA_HOME/shared/lib/*.jar

四、server.xml配置簡介:
下面講述這個文件中的基本配置信息,更具體的配置信息請參考tomcat的文檔:
??? server:
????????? 1、port 指定一個端口,這個端口負責監聽關閉tomcat的請求
????????? 2、shutdown 指定向端口發送的命令字符串
??? service:
????????? 1、name 指定service的名字
??? Connector (表示客戶端和service之間的連接):
????????? 1、port 指定服務器端要創建的端口號,并在這個斷口監聽來自客戶端的請求
????????? 2、minProcessors 服務器啟動時創建的處理請求的線程數
????????? 3、maxProcessors 最大可以創建的處理請求的線程數
????????? 4、enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查
詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip
地址
????????? 5、redirectPort 指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的
端口號
????????? 6、acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理
隊列中的請求數,超過這個數的請求將不予處理
????????? 7、connectionTimeout 指定超時的時間數(以毫秒為單位)
??? Engine (表示指定service中的請求處理機,接收和處理來自Connector的請求):
????????? 1、defaultHost 指定缺省的處理請求的主機名,它至少與其中的一個host元素的name
屬性值是一樣的
??? Context (表示一個web應用程序):
????????? 1、docBase 應用程序的路徑或者是WAR文件存放的路徑
????????? 2、path 表示此web應用程序的url的前綴,這樣請求的url為
http://localhost:8080/path/****
????????? 3、reloadable 這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的
/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,我們可
以在不重起tomcat的情況下改變應用程序
??? host (表示一個虛擬主機):
????????? 1、name 指定主機名
????????? 2、appBase 應用程序基本目錄,即存放應用程序的目錄
????????? 3、unpackWARs 如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接
從WAR文件中運行應用程序
??? Logger (表示日志,調試和錯誤信息):
????????? 1、className 指定logger使用的類名,此類必須實現org.apache.catalina.Logger 接口
????????? 2、prefix 指定log文件的前綴
????????? 3、suffix 指定log文件的后綴
????????? 4、timestamp 如果為true,則log文件名中要加入時間,如下
例:localhost_log.2001-10-04.txt
?? Realm (表示存放用戶名,密碼及role的數據庫):
????????? 1、className 指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口
?? Valve (功能與Logger差不多,其prefix和suffix屬性解釋和Logger 中的一樣):
????????? 1、className 指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve
類可以記錄應用程序的訪問信息
??? directory(指定log文件存放的位置):
??? 1、pattern 有兩個值,common方式記錄遠程主機名或ip地址,用戶名,日期,第一行
請求的字符串,HTTP響應代碼,發送的字節數。combined方式比common方式記
錄的值更多

五、web.xml配置簡介:
1、默認(歡迎)文件的設置
 在tomcat4\conf\web.xml中,<welcome-file-list>與IIS中的默認文件意思相同。
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

2、報錯文件的設置
<error-page>
<error-code>404</error-code>
<location>/notFileFound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/null.jsp</location>
</error-page>
如果某文件資源沒有找到,服務器要報404錯誤,按上述配置則會調用\webapps\ROOT\notFileFound.jsp。
如果執行的某個JSP文件產生NullPointException ,則會調用\webapps\ROOT\null.jsp

3、會話超時的設置
設置session 的過期時間,單位是分鐘;
<session-config>
<session-timeout>30</session-timeout>
</session-config>

4、過濾器的設置
<filter>
<filter-name>FilterSource</filter-name>
<filter-class>project4. FilterSource </filter-class>
</filter>
<filter-mapping>
<filter-name>FilterSource</filter-name>
<url-pattern>/WwwServlet</url-pattern>
(<url-pattern>/haha/*</url-pattern>)
</filter-mapping>

過濾:
1) 身份驗證的過濾Authentication Filters
2) 日志和審核的過濾Logging and Auditing Filters
3) 圖片轉化的過濾Image conversion Filters
4) 數據壓縮的過濾Data compression Filters
5) 加密過濾Encryption Filters
6) Tokenizing Filters
7) 資源訪問事件觸發的過濾Filters that trigger resource access events XSL/T 過濾XSL/T filters
9) 內容類型的過濾Mime-type chain Filter 注意監聽器的順序,如:先安全過濾,然后資源,
然后內容類型等,這個順序可以自己定。

六、管理
??? 1、用戶配置
????? 在進行具體Tomcat管理之前,先給tomcat添加一個用戶,使這個用戶有權限來進行管理。
????? 打開conf目錄下的tomcat-users.xml文件,在相應的位置添加下面一行:
??? <user name="user" password="user" roles="standard,manager"/>
??? 然后重起tomcat,在瀏覽器中輸入http://localhost:8080/manager/,會彈出對話框,輸入上面的用戶
名和密碼即可。

??? 2、應用程序列表
????? 在瀏覽器中輸入http://localhost:8080/manager/list,瀏覽器將會顯示如下的信息:
??? OK - Listed applications for virtual host localhost
??? /ex:running:1
??? /examples:running:1
??? /webdav:running:0
??? /tomcat-docs:running:0
??? /manager:running:0
??? /:running:0
???? 上面顯示的信息分別為:應用程序的路徑、當前狀態、連接這個程序的session數

?? 3、重新裝載應用程序
????? 在瀏覽器中輸入 http://localhost:8080/manager/reload?path=/examples,瀏覽器顯示如下:
??? OK - Reloaded application at context path /examples???
這表示example應用程序裝載成功,如果我們將server.xml的Context元素的reloadable屬性設為true,則沒必要利用這種方式重新裝載應用程序,因為tomcat會自動裝載。

4、顯示session信息
??? 在瀏覽器中輸入http://localhost:8080/manager/sessions?path=/examples,瀏覽器顯示如下:
??? OK - Session information for application at context path /examples Default maximum session inactive
interval 30 minutes

5、啟動和關閉應用程序
?? 在瀏覽器中輸入http://localhost:8080/manager/start?path=/examples和
http://localhost:8080/manager/stop?path=/examples分別啟動和關閉examples應用程序。

Tomcat啟動分析


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品久久久久久老妇小说 | 99热这里只有精品国产99 | 天天夜夜久久 | 精品国产中文字幕 | 亚洲啊v在线观看 | 久久亚 | 精品亚洲一区二区 | 成在线人免费视频一区二区三区 | 欧美日韩在线免费观看 | 欧美一区二区三区四区视频 | 9191色| 久久精品一| 一级一片在线播放在线观看 | 欧美日韩精品一区 | 黄色资源视频 | 天堂资源在线8 | 成人一区二区三区四区 | aa国产视频一区二区 | 久久久久中文 | www国产成人免费观看视频,深夜成人网 | 91美女福利视频 | 黄色短视频在线免费观看 | 亚洲视频在线看 | 日本高清va不卡视频在线观看 | 亚洲乱码在线卡一卡二卡新区 | 亚洲在线观看免费视频 | 人人爽天天爽 | 午夜视频在线免费观看 | 午夜精品久久久久久99热软件 | 天堂久久久久久中文字幕 | 国产精品第一区第27页 | 欧美特黄a级高清免费大片 精品日本三级在线观看视频 | 最新色图 | 色婷婷.com | 免费毛片网站 | 免费在线成人av | 九九在线精品视频播放 | 久久亚洲国产高清 | 黄色a一级视频 | 日韩精品一区二区三区国语自制 | 久久精品中文 |