Tomcat之虛擬主機配置以及web應用配置
Tomcat目錄結構如下:
bin ---- 啟動和關閉需要的bat文件所在的目錄
conf --- 配置目錄
lib --- tomcat運行時需要的jar包所在的目錄
logs --- 運行時產生的日志信息所在的目錄
temp --- tomcat運行時產生的臨時文件存放的目錄,不需要我們管理
webapps --- 開發(fā)中最常用的目錄,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在運行的情況下,自動載入應用
實例代碼:
[html] view plaincopy
<embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
- </pre><pre>
[html] view plaincopy
<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
<?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
|
|--靜態(tài)資源和JSP文件都可以直接放置在web應用的目錄下,瀏覽器可以直接訪問到
|--WEB-INF
|--classes -- 動態(tài)web資源運行時的class文件要放在這個目錄下
|--lib -- 動態(tài)web資源運行時所依賴的jar包要放在這個目錄下
|--web.xml -- 整個web應用的配置文件,配置主頁/Servlet的映射/過濾器監(jiān)聽器的配置都需要依賴這個文件進行
說明
WEB-INF -- 可以沒有,但是最好有,如果有則一定要保證他的目錄結構是完整的.放置在WEB-INF目錄下的所有資源瀏覽器沒有辦法直接進行訪問
3.2、Tomcat中配置web應用的幾種方式:
方式一:這種配置方式需要重啟服務器不推薦
在tomcat安裝目錄/conf/Server.xml的<Host>標簽中,配置<Context>標簽,就可以為該虛擬主機配置一個web應用了
缺省web應用設置:
如果將path設置為空則這個web應用為缺省web應用
示例代碼如下:加粗部分
[html] view plaincopy
<embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
<?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>
[html] view plaincopy
<embed id="ZeroClipboardMovie_4" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
- </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/目錄下創(chuàng)建一個名為HelloWord.xml的文件,(若文件名中有斜杠時使用#好代替:test#HelloWord.xml)
2)在HelloWord.xml文件中寫入如下代碼:
[html] view plaincopy
<embed id="ZeroClipboardMovie_5" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
- <?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文件的詳細配置說明如下:
[html] view plaincopy
<embed id="ZeroClipboardMovie_6" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_6" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=6&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
<Server port="8005" shutdown="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">
<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" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/demm" docBase="E:\projects\demm\WebRoot" debug="0" reloadable="true" >
</Context>
</Host>
</Engine>
</Service>
</Server>