Tomcat之虛擬主機配置以及web應用配置
Tomcat目錄結構如下:
bin ---- 啟動和關閉需要的bat文件所在的目錄
conf --- 配置目錄
lib --- tomcat運行時需要的jar包所在的目錄
logs --- 運行時產生的日志信息所在的目錄
temp --- tomcat運行時產生的臨時文件存放的目錄,不需要我們管理
webapps --- 開發中最常用的目錄,web應用放置到此目錄下瀏覽器可以直接訪問
work --- 工作目錄,tomcat運行時產生的工作文件存放在這個目錄中
一、基本概念
虛擬主機的簡單理解:
在一台Tomcat服務器中可以同時管理多個站點,即可以將多個站點配置在同一台Tomcat服務器上,而對於用戶(瀏覽器)而言,是不知道具體哪些網站是布置在同一台Tomcat(服務器)之上的,對於用戶(瀏覽器)而言,每個站點都像是運行在各自獨立的服務器上。此時每個網站就是運行在同一台這是服務器中各自對應的虛擬主機上。此時,簡單的理解,每個網站就可以認為是一個虛擬主機。
Web應用:
一個Web應用程序是由完成特定任務的各種Web組件(web components)構成的並通過Web將服務展示給外界。在實際應用中,Web應用程序是由多個Servlet、JSP頁面、HTML文件以及圖像文件等web資源組成。而這些web資源不能直接交給虛擬主機,故將這些資源按照一定的格式組織成web應用交由虛擬機主機管理。所有這些組件相互協調為用戶提供一組完整的服務。
簡單的將:web應用就是按照特定格式組織的一些web資源(Servlet、JSP頁面、HTML文件以及圖像文件等)的集合,為用戶提供特定服務。
一個Tomcat中可以配置多個虛擬主機,一個虛擬主機中可以配置多個web應用。
二、Tomcat虛機主機配置
在conf/server.xml中<Engin>標簽下配置<Host>標簽就可以為tomcat增加一台虛擬主機了
name -- 指定虛擬主機的名稱,瀏覽器通過這個名稱訪問虛擬主機
appBase -- 虛擬主機管理的目錄,放置在這個目錄下的web應用當前虛擬主機可以自動加載(在autoDeploy為true的情況下)相當於Localhost虛擬主機的webapps目錄(在autoDeploy為true的情況下)
debug -- 是日志的調試等級
unpackWARs -- 設置為true,在Web應用為*.war時,解壓此WAR文件. 如果為true,則tomcat會自動將WAR文件解壓;否則不解壓,直接從WAR文件中運行應用程序.
autoDeploy -- 默認為true,表示如果有新的WEB應用放入appBase 並且Tomcat在運行的情況下,自動載入應用
實例代碼:
- </pre><pre>
- <?xml version="1.0" encoding="UTF-8"?>
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
- <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
- <Listener className="org.apache.catalina.core.JasperListener"/>
- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
- <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
- <GlobalNamingResources>
- <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
- </GlobalNamingResources>
- <Service name="Catalina">
- <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
- <Engine defaultHost="localhost" name="Catalina">
- <Realm className="org.apache.catalina.realm.LockOutRealm">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
- </Realm>
- <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\Cabinet_WS" path="/Cabinet_WS" reloadable="true" source="org.eclipse.jst.jee.server:Cabinet_WS"/>
- </Host>
- <!-- 添加新的虛擬主機 -->
- <Host appBase="mywebapps" autoDeploy="true" name="www.google.com" unpackWARs="true">
- </Host>
- </Engine>
- </Service>
- </Server>
三、Tomcat配置web應用
3.1、Tomcat中Web應用的目錄結構:
web應用目錄結構: 如果目錄結構不合法可能會出現各種問題.
news
|
|--靜態資源和JSP文件都可以直接放置在web應用的目錄下,瀏覽器可以直接訪問到
|--WEB-INF
|--classes -- 動態web資源運行時的class文件要放在這個目錄下
|--lib -- 動態web資源運行時所依賴的jar包要放在這個目錄下
|--web.xml -- 整個web應用的配置文件,配置主頁/Servlet的映射/過濾器監聽器的配置都需要依賴這個文件進行
說明
WEB-INF -- 可以沒有,但是最好有,如果有則一定要保證他的目錄結構是完整的.放置在WEB-INF目錄下的所有資源瀏覽器沒有辦法直接進行訪問
3.2、Tomcat中配置web應用的幾種方式:
方式一:這種配置方式需要重啟服務器不推薦
在tomcat安裝目錄/conf/Server.xml的<Host>標簽中,配置<Context>標簽,就可以為該虛擬主機配置一個web應用了
缺省web應用設置:
如果將path設置為空則這個web應用為缺省web應用
示例代碼如下:加粗部分
- <?xml version="1.0" encoding="UTF-8"?>
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
- <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
- <Listener className="org.apache.catalina.core.JasperListener"/>
- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
- <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
- <GlobalNamingResources>
- <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
- </GlobalNamingResources>
- <Service name="Catalina">
- <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
- <Engine defaultHost="localhost" name="Catalina">
- <Realm className="org.apache.catalina.realm.LockOutRealm">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
- </Realm>
- <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
- <!-- 添加新的web應用,應用名為HelloWord,虛擬路徑/HelloWord -->
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\HelloWord" path="/HelloWord" reloadable="true" />
- </Host>
- </Engine>
- </Service>
- </Server>
- </pre><pre>
其中<Context>標簽屬性說明:
屬性名 |
說明 |
path |
訪問的URI,如:http://localhost/是我的應用的根目錄,在瀏覽器中訪問此應用將用,在地址欄輸入:http://localhost/HelloWord |
docBase |
WEB應用的目錄web application的文件存放的硬件路徑或者是WAR文件存放硬件路徑。
|
reloadable |
是否在程序有改動時重新載入,設置成true會影響性能,但可自動載入修改后的文件. 如果為true,則Tomcat將支持熱部署,會自動檢測web application的/WEB-INF/lib和/WEB-INF/classes目錄的變化,自動裝載新的JSP和Servlet,我們可以在不重起Tomcat的情況下改變web application |
方式二、這種配置方式不需要重啟服務器,推薦使用
在tomcat安裝目錄/conf/[EnginName]/[HostName]/在這個目錄下寫一個xml文件,其中xml文件的名字就是虛擬路徑,在這個xml中可以配置<Context>標簽,其中配置真實路徑.
注意:
1)其中[EnginName]指的是在tomcat安裝目錄/conf/Server.xml這個配置文件中<Engin>標簽元素對應的名字。
2)[HostName]指tomcat安裝目錄/conf/Server.xml這個配置文件中<Host>標簽元素的名字。
3)如果所配置的虛擬路徑中有/,由於文件名中不允許包含/需要用#替代.
使用方式二完成方法一中相同的配置時,應進行如下操作:
1)在tomcat安裝目錄/conf/CataLina/localhost/目錄下創建一個名為HelloWord.xml的文件,(若文件名中有斜杠時使用#好代替:test#HelloWord.xml)
2)在HelloWord.xml文件中寫入如下代碼:
- <?xml version="1.0" encoding="UTF-8"?>
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\HelloWord" path="/HelloWord" reloadable="true" />
其中<Context>標簽屬性說明參照上面內容。
缺省web應用設置:
只要將文件名設置為ROOT.xml則這個xml描述的web應用就成為了缺省web應用,
方式三、最簡單、最常用的方式
直接將web應用放置到,虛擬主機管理的目錄下,此時虛擬主機就會自動加載該目錄下的web應用
/conf/Server.xml的<Host>標簽中的屬性appBase所指向的目錄即為當前虛擬主機虛擬主機自動管理的目錄,在屬性autoDeploy為true的情況下,放置在這個目錄下的web應用當前虛擬主機可以自動加載。
缺省web應用設置:
只要將web應用文件夾名設置為ROOT則這個web應用就成為了缺省web應用,默認已經有一個web應用,即默認訪問的Tomcat的主頁。
附關於/conf/Server.xml配置的詳細說明
/conf/Server.xml文件的詳細配置說明如下:
- <Server port="8005" shutdown="SHUTDOWN">
- <!--屬性說明
- port:指定一個端口,這個端口負責監聽關閉Tomcat的請求
- shutdown:向以上端口發送的關閉服務器的命令字符串
- -->
- <Listener className="org.apache.catalina.core.AprLifecycleListener" />
- <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
- <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
- <GlobalNamingResources>
- <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
- <Resource name="UserDatabase" auth="Container"
- type="org.apache.catalina.UserDatabase"
- description="User database that can be updated and saved"
- factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
- pathname="conf/tomcat-users.xml" />
- </GlobalNamingResources>
- <!-- 每個Service元素只能有一個Engine元素.元素處理在同一個<Service>中所有<Connector>元素接收到的客戶請求 -->
- <Service name="Catalina">
- <!--屬性說明
- name:Service的名稱
- -->
- <!--
- Connector元素:由Connector接口定義.<Connector>元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果.
- -->
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
- maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS" />
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- <!--屬性說明
- port:服務器連接器的端口號,該連接器將在指定端口偵聽來自客戶端的請求,設定Tcp/IP端口,默認值為8080,如果把8080改成80,則只要輸入http://localhost即可 因為TCP/IP的默認端口是80
- enableLookups:如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名;若為false則不進行DNS查詢,而是返回其ip地址
- redirectPort:服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
- acceptCount:當所有可以使用的處理請求的線程都被用光時,可以放到處理隊列中的請求數,超過這個數 的請求將不予處理,而返回Connection refused錯誤
- connectionTimeout:等待超時的時間數(以毫秒為單位)
- maxThreads:設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值為200
- protocol:必須設定為AJP/1.3協議.
- address:如果服務器有兩個以上IP地址,該屬性可以設定端口監聽的IP地址,默認情況下,端口會監聽服務器上所有IP地址.
- minProcessors:服務器啟動時創建的處理請求的線程數,每個請求由一個線程負責
- maxProcessors:最多可以創建的處理請求的線程數
- minSpareThreads:最小備用線程
- maxSpareThreads:最大備用線程
- debug:日志等級
- disableUploadTimeout:禁用上傳超時,主要用於大數據上傳時
- -->
- <Engine name="Catalina" defaultHost="localhost">
- <!--屬性說明
- name:對應$CATALINA_HOME/config/Catalina中的Catalina
- defaultHost:對應Host元素中的name屬性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost缺省的處理請求的虛擬主機名,它至少與其中的一個Host元素的name屬性值是一樣的
- debug:日志等級 -->
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
- resourceName="UserDatabase"/>
- <!--由Host接口定義.一個Engine元素可以包含多個<Host>元素. 每個<Host>的元素定義了一個虛擬主機.它包含了一個或多個Web應用. -->
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <!--屬性說明
- name:在此例中一直被強調為$CATALINA_HOME/config/Catalina/localhost中的localhost 虛擬主機名
- debug:是日志的調試等級
- appBase:默認的應用路徑,也就是把應用放在一個目錄下,並在autoDeploy為true的情況下,放置在這個目錄下的web應用當前虛擬主機可以自動加載
- unpackWARs:設置為true,在Web應用為*.war是,解壓此WAR文件.如果為true,則tomcat會自動將WAR文件解壓;否則不解壓,直接從WAR文件中運行應用程序.
- autoDeploy:默認為true,表示如果有新的WEB應用放入appBase 並且Tomcat在運行的情況下,自動載入應用 -->
- <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >
- </Context>
- <!--屬性說明
- path:訪問的URI,如:http://localhost/是我的應用的根目錄,訪問此應用將用:http://localhost/demm進行操作,
- docBase:WEB應用的目錄.web application的文件存放的硬件路徑或者是WAR文件存放硬件路徑
- debug:日志等級
- reloadable:是否在程序有改動時重新載入,設置成true會影響性能,但可自動載入修改后的文件.
- 如果為true,則Tomcat將支持熱部署,會自動檢測web application的/WEB-INF/lib
- 和/WEB-INF/classes目錄的變化,自動裝載新的JSP和Servlet,我們可以在不重起
- Tomcat的情況下改變web application -->
- </Host>
- </Engine>
- </Service>
- </Server>
- <!--
- 標簽的詳細定義:
- <Host>元素
- 屬性:
- 1>className:指定實現Host接口的類.默認值為StandardHost
- 2>appBase:指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於的相對目錄.如果沒有此項,默認為/webapps,此目錄為虛擬主機管理的目錄,放置在這個目錄下的web應用當前虛擬主機可以自動加載
- 3>autoDeploy:如果此項設為true,表示Tomcat服務處於運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發布這個WEB應用
- 4>unpackWARs:如果此項設置為true,表示把WEB應用的WAR文件先展開為開放目錄結構后再運行.如果設為false將直接運行為WAR文件
- 5>alias:指定主機別名,可以指定多個別名
- 6>deployOnStartup:如果此項設為true,表示Tomcat服務器啟動時會自動發布appBase目錄下所有的Web應用.如果Web應用中的server.xml沒有相應的元素,將采用Tomcat默認的Context
- 7>name:定義虛擬主機的名字
- <Context> 元素:它由Context接口定義.是使用最頻繁的元素.每個可以包含多個元素.每個web應用有唯一的一個相對應的Context代表web應用自身.servlet容器為第一個web應用創建一個 ServletContext對象
- 屬性:
- 1>className:指定實現Context的類,默認為StandardContext類
- 2>path:指定訪問Web應用的URL入口,注意/myweb,而不是myweb了事
- 3>reloadable:如果這個屬性設為true, Tomcat:服務器在運行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS文件的改運.如果監視到有class文件被更新,服務器自重新加載Web應用
- 3>cookies:指定是否通過Cookies來支持Session,默認值為true
- 4>useNaming:指定是否支持JNDI,默認值為了true
- <Connector>元素
- 由Connector:接口定義.元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果.
- 第一個Connector:元素定義了一個HTTP Connector,它通過8080端口接收HTTP請求;
- 第二個Connector:元素定義了一個JD Connector,它通過8009端口接收由其它服務器轉發過來的請求.
- 屬性
- 1> className:指定實現Connector接口的類
- 2> enableLookups:如果設為true,表示支持域名解析,可以把IP地址解析為主機名.WEB應用中調用request.getRemoteHost方法返回客戶機主機名.默認值為true
- 3> redirectPort:指定轉發端口.如果當前端口只支持non-SSL請求,在需要安全通信的場命,將把客戶請求轉發至SSL的redirectPort端口
- HttpConnector元素的屬性
- 1>className:實現Connector的類
- 2>port:設定Tcp/IP端口,默認值為8080,如果把8080改成80,則只要輸入http://localhost即可 因為TCP/IP的默認端口是80
- 3>address:如果服務器有二個以上ip地址,此屬性可以設定端口監聽的ip地址.默認情況下,端口會監聽服務器上所有的ip地址
- 4>bufferSize:設定由端口創建的輸入流的緩存大小.默認值為2048byte
- 5>protocol:設定Http協議,默認值為HTTP/1.1
- 6>maxThreads:設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值為200
- 7>acceptCount:設定在監聽端口隊列的最大客戶請求數量,默認值為10.如果隊列已滿,客戶必須等待.
- 8>connectionTimeout:定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間
- -->