<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sung in Blog

               一些技術文章 & 一些生活雜碎
    本文檔描述了如何在Windows下安裝、配置和運行Apache Jakarta Tomcat服務器。在Linux下要做的工作和下面類似。Apache Jakarta Tomcat的項目主頁是:http://jakarta.apache.org/tomcat

    Tomcat Installation

    從http://jakarta.apache.org/tomcat下載Apache Jakarta Tomcat 5.0.18的zip壓縮包
    解壓縮到某個目錄中,比如D:\app\jakarta-tomcat-5.0.18
    設置環境變量%CATALINA_HOME%為:D:\app\jakarta-tomcat-5.0.18
    進入命令行模式并用以下命令啟動Tomcat:
    %CATALINA_HOME%\bin\startup.bat
    如果在控制臺看見信息:Server startup in xxxxx ms,則說明Tomcat已經被啟動,它將在端口8080(默認端口)偵聽客戶請求。
    測試:打開瀏覽器并訪問http://localhost:8080/,如果可以看見Tomcat的首頁,那么一切正常。
    進入命令行模式并用以下命令關閉Tomcat:
    %CATALINA_HOME%\bin\shutdown.bat

    Tomcat Directory Layout
    Tomcat的目錄結構如下: Directory Explanation
    bin 存放啟動和關閉Tomcat的可執行腳本
    conf Tomcat的配置文件,如server.xml(Tomcat服務器配置文件)和web.xml(被所有webapps共享的配置文件)
    work 存放jsp編譯后產生的class文件
    webapps 存放web applications,用戶自己需要部署的應用程序也要放到此目錄
    logs 存放日志文件
    common 被Tomcat Server本身和所有的web applications共享的庫文件(*.jar),如servlet的API就存放在common/lib/servlet-api.jar中
    shared 被所有的web applications(但不被Tomcat Server本身)共享的庫文件(*.jar)


    Tomcat Components

    Server : Tomcat Server是整個Catalina JSP/Servlet容器,它是一個單件(Sinleton)。
    Service : Service是這樣一個集合:它由一個或者多個Connector組成,并擁有一個負責處理所有Connector所獲得的客戶請求的Engine。
    Connector : 一個Connector將在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得回應并返回客戶。Tomcat有兩個典型的Connector,一個直接偵聽來自web瀏覽器的HTTP請求,一個偵聽來自其它WebServer的請求:
    Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求。
    Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求。
    Engine : Engine是某個service中的請求處理機,它負責接收和處理來自Connector的請求。Engine下可以配置多個虛擬主機(Virtual Host),每個虛擬主機都有一個域名。當Engine獲得一個請求時,它將根據請求中的信息把該請求匹配到某個Host上,然后在該Host配置的環境下處理該請求。Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認虛擬主機來處理。
    Host : 一個Host代表一個虛擬主機(Virtual Host),每個虛擬主機和某個域名(Domain Name)相匹配。每個虛擬主機下都可以部署(deploy)一個或者多個web applications,每個web application對應于一個Context,并擁有一個Context path。當Host獲得一個針對某個特定的Host的請求時,將在該Host的環境下把請求匹配到某個Context上,然后把請求交給該Context來處理。Context的匹配方法是“最長匹配”,所以一個 path="" 的Context將成為該Host的默認Context,所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配。
    Context : 一個Context對應于一個web application,一個web application由一個或者多個Servlet組成。每個Context在創建的時候都將根據配置文件conf/web.xml和webapps/${webapp.home}/WEB-INF/web.xml載入Servlet類和創建映射表(mapping table)。當Context獲得請求時,將在自己的映射表中尋找相匹配的Servlet類。如果找到,則執行該類,獲得結果并返回。

    Tomcat Server的結構圖如下。注意下圖只是根據conf/server.xml配置文件畫出的結構圖,并不保證該圖與Tomcat的實現相吻合。


    Server Configuration
    用戶可以通過修改conf/server.xml文件定置Tomcat Server的行為。該文件的描述如下: element attribute explanation
    Server port 指定一個端口,這個端口負責監聽關閉Tomcat的請求
    shutdown 向以上端口發送的關閉服務器的命令字符串
    Service name service的名稱
    Connector port 服務器連接器的端口號,該連接器將在指定端口偵聽來自客戶端的請求
    minProcessors 服務器啟動時創建的處理請求的線程數,每個請求由一個線程負責
    maxProcessors 最多可以創建的處理請求的線程數
    enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名;若為false則不進行DNS查詢,而是返回其ip地址
    redirectPort 服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
    acceptCount 當所有可以使用的處理請求的線程都被用光時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,而返回Connection refused錯誤
    connectionTimeout 等待超時的時間數(以毫秒為單位)
    Engine defaultHost 缺省的處理請求的虛擬主機名,它至少與其中的一個Host元素的name屬性值是一樣的
    Host name 虛擬主機名
    appBase web applications的基本目錄
    unpackWARs 如果為true,則tomcat會自動將WAR文件解壓;否則不解壓,直接從WAR文件中運行應用程序
    Context docBase web application的文件存放路徑或者是WAR文件存放路徑
    path 表示此web application的URL的前綴,用來匹配一個Context。請求的URL形式為http://localhost:8080/path/*
    reloadable 如果為true,則Tomcat將支持熱部署,會自動檢測web application的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的JSP和Servlet,我們可以在不重起Tomcat的情況下改變web application
    注:還有一些元素沒有介紹,如Logger,Realm,Valve等,是因為暫時我還沒有用到這些元素。你可以通過Tomcat的文檔獲取這些元素的信息。

    Web Application Configuration
    每個web application對應于某個虛擬主機(Host)下的某個Context。一個web application是若干個HTML,JSP和Servlet文件的集合。當一個web application被初始化的時候,它將用自己的ClassLoader載入“部署配置文件” web.xml 中定義的每個Servlet類和映射表。它首先載入在conf/web.xml中定義的Servlet類和映射表,然后載入位于 webapps/${docBase}/WEB-INF/web.xml 下的自己的部署配置文件中定義的servlet類和映射表。

    web.xml文件有兩部分:Servlet類定義和映射表定義。每個被載入的Servlet類都有一個名字(不是類名),該名字被填入Context的映射表(mapping table)中,并和某種形式的URL pattern相聯系。當某個URL被請求時,將先尋找對應的Host,然后匹配最長的Context,然后查詢該Context下的mapping table,找到被請求的Servlet類,并執行之。

    分析一下web.xml文件的結構: element sub-element explanation
    servlet servlet-name Servlet名字(不是類名,只是一個標識符)
    servlet-class Servlet的類名(全稱,包括包名,該名用來定位一個Servlet類)
    init-param Servlet的初始化參數,每個參數用一個名值對表示:param-name = param-value
    servlet-mapping servlet-name Servlet名字,和servlet中的servlet-name相對應
    url-pattern URL匹配模式,當請求該模式的URL時,指定Servlet將被調用


    分析一下conf/web.xml文件,該文件被所有的web applications共享,其中定義的Servlet類和映射表將被所有的web application載入。 servlet-name url-pattern function
    default / 由于對URL進行最長匹配,所以url-pattern為/的該Servlet將在用戶的HTTP請求無法匹配任何一個Servlet的時候被調用。該Servlet將返回用戶一條錯誤信息。
    invoker /servlet/* 形式為/servlet/FullClassName的URL會和invoker匹配,invoker將根據FullClassName調用${webapp.home}/WEB-INF/classes/FullClassName類,即使該類沒有在${webapp.home}/WEB-INF/web.xml中被聲明。注意FullClassName必須包含用點分隔的包的全稱。
    jsp *.jsp, *.jspx 當請求的是一個JSP頁面的時候(*.jsp),該Servlet被調用。它實質上是一個JSP編譯器,將請求的JSP頁面映射成相應的Servlet在執行。當該JSP頁面還沒有編譯的時候,jsp還將完成編譯工作。


    How Tomcat is Dealing with an HTTP Request
    假設來自客戶的HTTP請求為:http://localhost:8080/yourContext/yourJSPPage.jsp

    請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
    Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應
    Engine獲得請求localhost/yourContext/yourJSPPage.jsp,匹配它所擁有的所有虛擬主機Host
    Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
    localhost Host獲得請求/yourContext/yourJSPPage.jsp,匹配它所擁有的所有Context(最長匹配)
    Host匹配到路徑為/yourContext的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
    path="/yourContext"的Context獲得請求/yourJSPPage.jsp,在它的mapping table中尋找對應的Servlet
    Context匹配到URL pattern為*.jsp的Servlet,對應于JspServlet類
    構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法(調用什么方法取決于來自客戶的HTTP請求是GET請求還是POST請求)
    Context把執行完了之后的HttpServletResponse對象返回給Host
    Host把HttpServletResponse對象返回給Engine
    Engine把HttpServletResponse對象返回給Connector
    Connector把HttpServletResponse對象返回給客戶的web瀏覽器

    Tomcat Web Application Manager
    通過以下方法可以為自己設置一個manager的權限,用來管理web applications,而不用手工修改配置文件。

    修改conf/tomcat-user.xml文件,在相應位置加入以下行:

    打開Tomcat首頁:http://localhost:8080/,進入Administration / Tomcat Manager
    Tomcat使用的應該是基于角色(role)的安全管理,在這方面我涉獵不深,有待進一步研究。
    Tomcat Installation

    從http://jakarta.apache.org/tomcat下載Apache Jakarta Tomcat 5.0.18的zip壓縮包
    解壓縮到某個目錄中,比如D:\app\jakarta-tomcat-5.0.18
    設置環境變量%CATALINA_HOME%為:D:\app\jakarta-tomcat-5.0.18
    進入命令行模式并用以下命令啟動Tomcat:
    %CATALINA_HOME%\bin\startup.bat
    如果在控制臺看見信息:Server startup in xxxxx ms,則說明Tomcat已經被啟動,它將在端口8080(默認端口)偵聽客戶請求。
    測試:打開瀏覽器并訪問http://localhost:8080/,如果可以看見Tomcat的首頁,那么一切正常。
    進入命令行模式并用以下命令關閉Tomcat:
    %CATALINA_HOME%\bin\shutdown.bat

    Tomcat Directory Layout
    Tomcat的目錄結構如下: Directory Explanation
    bin 存放啟動和關閉Tomcat的可執行腳本
    conf Tomcat的配置文件,如server.xml(Tomcat服務器配置文件)和web.xml(被所有webapps共享的配置文件)
    work 存放jsp編譯后產生的class文件
    webapps 存放web applications,用戶自己需要部署的應用程序也要放到此目錄
    logs 存放日志文件
    common 被Tomcat Server本身和所有的web applications共享的庫文件(*.jar),如servlet的API就存放在common/lib/servlet-api.jar中
    shared 被所有的web applications(但不被Tomcat Server本身)共享的庫文件(*.jar)


    Tomcat Components

    Server : Tomcat Server是整個Catalina JSP/Servlet容器,它是一個單件(Sinleton)。
    Service : Service是這樣一個集合:它由一個或者多個Connector組成,并擁有一個負責處理所有Connector所獲得的客戶請求的Engine。
    Connector : 一個Connector將在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得回應并返回客戶。Tomcat有兩個典型的Connector,一個直接偵聽來自web瀏覽器的HTTP請求,一個偵聽來自其它WebServer的請求:
    Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求。
    Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求。
    Engine : Engine是某個service中的請求處理機,它負責接收和處理來自Connector的請求。Engine下可以配置多個虛擬主機(Virtual Host),每個虛擬主機都有一個域名。當Engine獲得一個請求時,它將根據請求中的信息把該請求匹配到某個Host上,然后在該Host配置的環境下處理該請求。Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認虛擬主機來處理。
    Host : 一個Host代表一個虛擬主機(Virtual Host),每個虛擬主機和某個域名(Domain Name)相匹配。每個虛擬主機下都可以部署(deploy)一個或者多個web applications,每個web application對應于一個Context,并擁有一個Context path。當Host獲得一個針對某個特定的Host的請求時,將在該Host的環境下把請求匹配到某個Context上,然后把請求交給該Context來處理。Context的匹配方法是“最長匹配”,所以一個 path="" 的Context將成為該Host的默認Context,所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配。
    Context : 一個Context對應于一個web application,一個web application由一個或者多個Servlet組成。每個Context在創建的時候都將根據配置文件conf/web.xml和webapps/${webapp.home}/WEB-INF/web.xml載入Servlet類和創建映射表(mapping table)。當Context獲得請求時,將在自己的映射表中尋找相匹配的Servlet類。如果找到,則執行該類,獲得結果并返回。

    Tomcat Server的結構圖如下。注意下圖只是根據conf/server.xml配置文件畫出的結構圖,并不保證該圖與Tomcat的實現相吻合。


    Server Configuration
    用戶可以通過修改conf/server.xml文件定置Tomcat Server的行為。該文件的描述如下: element attribute explanation
    Server port 指定一個端口,這個端口負責監聽關閉Tomcat的請求
    shutdown 向以上端口發送的關閉服務器的命令字符串
    Service name service的名稱
    Connector port 服務器連接器的端口號,該連接器將在指定端口偵聽來自客戶端的請求
    minProcessors 服務器啟動時創建的處理請求的線程數,每個請求由一個線程負責
    maxProcessors 最多可以創建的處理請求的線程數
    enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名;若為false則不進行DNS查詢,而是返回其ip地址
    redirectPort 服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
    acceptCount 當所有可以使用的處理請求的線程都被用光時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,而返回Connection refused錯誤
    connectionTimeout 等待超時的時間數(以毫秒為單位)
    Engine defaultHost 缺省的處理請求的虛擬主機名,它至少與其中的一個Host元素的name屬性值是一樣的
    Host name 虛擬主機名
    appBase web applications的基本目錄
    unpackWARs 如果為true,則tomcat會自動將WAR文件解壓;否則不解壓,直接從WAR文件中運行應用程序
    Context docBase web application的文件存放路徑或者是WAR文件存放路徑
    path 表示此web application的URL的前綴,用來匹配一個Context。請求的URL形式為http://localhost:8080/path/*
    reloadable 如果為true,則Tomcat將支持熱部署,會自動檢測web application的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的JSP和Servlet,我們可以在不重起Tomcat的情況下改變web application
    注:還有一些元素沒有介紹,如Logger,Realm,Valve等,是因為暫時我還沒有用到這些元素。你可以通過Tomcat的文檔獲取這些元素的信息。

    Web Application Configuration
    每個web application對應于某個虛擬主機(Host)下的某個Context。一個web application是若干個HTML,JSP和Servlet文件的集合。當一個web application被初始化的時候,它將用自己的ClassLoader載入“部署配置文件” web.xml 中定義的每個Servlet類和映射表。它首先載入在conf/web.xml中定義的Servlet類和映射表,然后載入位于 webapps/${docBase}/WEB-INF/web.xml 下的自己的部署配置文件中定義的servlet類和映射表。

    web.xml文件有兩部分:Servlet類定義和映射表定義。每個被載入的Servlet類都有一個名字(不是類名),該名字被填入Context的映射表(mapping table)中,并和某種形式的URL pattern相聯系。當某個URL被請求時,將先尋找對應的Host,然后匹配最長的Context,然后查詢該Context下的mapping table,找到被請求的Servlet類,并執行之。

    分析一下web.xml文件的結構: element sub-element explanation
    servlet servlet-name Servlet名字(不是類名,只是一個標識符)
    servlet-class Servlet的類名(全稱,包括包名,該名用來定位一個Servlet類)
    init-param Servlet的初始化參數,每個參數用一個名值對表示:param-name = param-value
    servlet-mapping servlet-name Servlet名字,和servlet中的servlet-name相對應
    url-pattern URL匹配模式,當請求該模式的URL時,指定Servlet將被調用


    分析一下conf/web.xml文件,該文件被所有的web applications共享,其中定義的Servlet類和映射表將被所有的web application載入。 servlet-name url-pattern function
    default / 由于對URL進行最長匹配,所以url-pattern為/的該Servlet將在用戶的HTTP請求無法匹配任何一個Servlet的時候被調用。該Servlet將返回用戶一條錯誤信息。
    invoker /servlet/* 形式為/servlet/FullClassName的URL會和invoker匹配,invoker將根據FullClassName調用${webapp.home}/WEB-INF/classes/FullClassName類,即使該類沒有在${webapp.home}/WEB-INF/web.xml中被聲明。注意FullClassName必須包含用點分隔的包的全稱。
    jsp *.jsp, *.jspx 當請求的是一個JSP頁面的時候(*.jsp),該Servlet被調用。它實質上是一個JSP編譯器,將請求的JSP頁面映射成相應的Servlet在執行。當該JSP頁面還沒有編譯的時候,jsp還將完成編譯工作。


    How Tomcat is Dealing with an HTTP Request
    假設來自客戶的HTTP請求為:http://localhost:8080/yourContext/yourJSPPage.jsp

    請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
    Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應
    Engine獲得請求localhost/yourContext/yourJSPPage.jsp,匹配它所擁有的所有虛擬主機Host
    Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
    localhost Host獲得請求/yourContext/yourJSPPage.jsp,匹配它所擁有的所有Context(最長匹配)
    Host匹配到路徑為/yourContext的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
    path="/yourContext"的Context獲得請求/yourJSPPage.jsp,在它的mapping table中尋找對應的Servlet
    Context匹配到URL pattern為*.jsp的Servlet,對應于JspServlet類
    構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法(調用什么方法取決于來自客戶的HTTP請求是GET請求還是POST請求)
    Context把執行完了之后的HttpServletResponse對象返回給Host
    Host把HttpServletResponse對象返回給Engine
    Engine把HttpServletResponse對象返回給Connector
    Connector把HttpServletResponse對象返回給客戶的web瀏覽器

    Tomcat Web Application Manager
    通過以下方法可以為自己設置一個manager的權限,用來管理web applications,而不用手工修改配置文件。

    修改conf/tomcat-user.xml文件,在相應位置加入以下行:

    打開Tomcat首頁:http://localhost:8080/,進入Administration / Tomcat Manager
    Tomcat使用的應該是基于角色(role)的安全管理,在這方面我涉獵不深,有待進一步研究。]]>
    posted on 2005-09-20 23:35 Sung 閱讀(1062) 評論(0)  編輯  收藏 所屬分類: Tomcat
    主站蜘蛛池模板: 亚洲a级在线观看| 久久亚洲私人国产精品| 亚洲中文字幕无码mv| 永久在线免费观看| 亚洲最大在线视频| 99久久国产热无码精品免费| 亚洲美女视频免费| 57PAO成人国产永久免费视频| 亚洲最大免费视频网| 美女视频黄的全免费视频网站| 亚洲精品一区二区三区四区乱码| a拍拍男女免费看全片| 亚洲色欲色欲www| 成人免费无遮挡无码黄漫视频| 亚洲欧美一区二区三区日产| 男女啪啪永久免费观看网站| 猫咪免费人成在线网站| 一本色道久久综合亚洲精品| 久久99热精品免费观看动漫| 91亚洲国产成人精品下载| 一二三四在线播放免费观看中文版视频 | 国产偷国产偷亚洲清高动态图| 精品国产污污免费网站入口在线| 亚洲成AV人片在线观看WWW| 色欲A∨无码蜜臀AV免费播| www.亚洲成在线| 又黄又爽的视频免费看| 国产真人无码作爱免费视频| 亚洲天堂福利视频| 国产成人在线观看免费网站 | 久久乐国产精品亚洲综合| 日韩免费电影网址| 国产亚洲玖玖玖在线观看| 亚洲AV之男人的天堂| 久久国产精品国产自线拍免费| 亚洲国产精品一区二区久| 免费在线视频一区| 一区二区三区四区免费视频| 亚洲午夜无码久久久久软件| 国产AV无码专区亚洲Av| 成人在线免费观看|