Tomcat之虛擬主機配置以及web應用配置
原網址- http://blog.csdn.net/u012802702/article/details/51163612
Tomcat目錄結構以下:html
bin ---- 啓動和關閉須要的bat文件所在的目錄前端
conf --- 配置目錄java
lib --- tomcat運行時須要的jar包所在的目錄web
logs --- 運行時產生的日誌信息所在的目錄apache
temp --- tomcat運行時產生的臨時文件存放的目錄,不須要咱們管理瀏覽器
webapps --- 開發中最經常使用的目錄,web應用放置到此目錄下瀏覽器能夠直接訪問緩存
work --- 工做目錄,tomcat運行時產生的工做文件存放在這個目錄中tomcat
1、基本概念
虛擬主機的簡單理解:
在一臺Tomcat服務器中能夠同時管理多個站點,便可以將多個站點配置在同一臺Tomcat服務器上,而對於用戶(瀏覽器)而言,是不知道具體哪些網站是佈置在同一臺Tomcat(服務器)之上的,對於用戶(瀏覽器)而言,每一個站點都像是運行在各自獨立的服務器上。此時每一個網站就是運行在同一臺這是服務器中各自對應的虛擬主機上。此時,簡單的理解,每一個網站就能夠認爲是一個虛擬主機。安全
Web應用:
一個Web應用程序是由完成特定任務的各類Web組件(web components)構成的並經過Web將服務展現給外界。在實際應用中,Web應用程序是由多個Servlet、JSP頁面、HTML文件以及圖像文件等web資源組成。而這些web資源不能直接交給虛擬主機,故將這些資源按照必定的格式組織成web應用交由虛擬機主機管理。全部這些組件相互協調爲用戶提供一組完整的服務。 服務器
簡單的將:web應用就是按照特定格式組織的一些web資源(Servlet、JSP頁面、HTML文件以及圖像文件等)的集合,爲用戶提供特定服務。
一個Tomcat中能夠配置多個虛擬主機,一個虛擬主機中能夠配置多個web應用。
2、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在運行的狀況下,自動載入應用
實例代碼:
- <?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>
3、Tomcat配置web應用
3.一、Tomcat中Web應用的目錄結構:
web應用目錄結構: 若是目錄結構不合法可能會出現各類問題.
news
|
|--靜態資源和JSP文件均可以直接放置在web應用的目錄下,瀏覽器能夠直接訪問到
|--WEB-INF
|--classes -- 動態web資源運行時的class文件要放在這個目錄下
|--lib -- 動態web資源運行時所依賴的jar包要放在這個目錄下
|--web.xml -- 整個web應用的配置文件,配置主頁/Servlet的映射/過濾器監聽器的配置都須要依賴這個文件進行
說明
WEB-INF -- 能夠沒有,可是最好有,若是有則必定要保證他的目錄結構是完整的.放置在WEB-INF目錄下的全部資源瀏覽器沒有辦法直接進行訪問
3.二、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"/>
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\HelloWord" path="/HelloWord" reloadable="true" />
- </Host>
- </Engine>
- </Service>
- </Server>
其中<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 |
方式2、這種配置方式不須要重啓服務器,推薦使用
在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應用,
方式3、最簡單、最經常使用的方式
直接將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 name="Catalina">
- <!--屬性說明
- name:Service的名稱
- -->
-
-
- <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 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,表示不限制創建客戶鏈接的時間
- -->