Tomcat之虛擬主機(jī)配置以及web應(yīng)用配置
Tomcat目錄結(jié)構(gòu)如下:
bin ---- 啟動(dòng)和關(guān)閉需要的bat文件所在的目錄
conf --- 配置目錄
lib --- tomcat運(yùn)行時(shí)需要的jar包所在的目錄
logs --- 運(yùn)行時(shí)產(chǎn)生的日志信息所在的目錄
temp --- tomcat運(yùn)行時(shí)產(chǎn)生的臨時(shí)文件存放的目錄,不需要我們管理
webapps --- 開發(fā)中最常用的目錄,web應(yīng)用放置到此目錄下瀏覽器可以直接訪問
work --- 工作目錄,tomcat運(yùn)行時(shí)產(chǎn)生的工作文件存放在這個(gè)目錄中
一、基本概念
虛擬主機(jī)的簡單理解:
在一臺(tái)Tomcat服務(wù)器中可以同時(shí)管理多個(gè)站點(diǎn),即可以將多個(gè)站點(diǎn)配置在同一臺(tái)Tomcat服務(wù)器上,而對(duì)于用戶(瀏覽器)而言,是不知道具體哪些網(wǎng)站是布置在同一臺(tái)Tomcat(服務(wù)器)之上的,對(duì)于用戶(瀏覽器)而言,每個(gè)站點(diǎn)都像是運(yùn)行在各自獨(dú)立的服務(wù)器上。此時(shí)每個(gè)網(wǎng)站就是運(yùn)行在同一臺(tái)這是服務(wù)器中各自對(duì)應(yīng)的虛擬主機(jī)上。此時(shí),簡單的理解,每個(gè)網(wǎng)站就可以認(rèn)為是一個(gè)虛擬主機(jī)。
Web應(yīng)用:
一個(gè)Web應(yīng)用程序是由完成特定任務(wù)的各種Web組件(web components)構(gòu)成的并通過Web將服務(wù)展示給外界。在實(shí)際應(yīng)用中,Web應(yīng)用程序是由多個(gè)Servlet、JSP頁面、HTML文件以及圖像文件等web資源組成。而這些web資源不能直接交給虛擬主機(jī),故將這些資源按照一定的格式組織成web應(yīng)用交由虛擬機(jī)主機(jī)管理。所有這些組件相互協(xié)調(diào)為用戶提供一組完整的服務(wù)。
簡單的將:web應(yīng)用就是按照特定格式組織的一些web資源(Servlet、JSP頁面、HTML文件以及圖像文件等)的集合,為用戶提供特定服務(wù)。
一個(gè)Tomcat中可以配置多個(gè)虛擬主機(jī),一個(gè)虛擬主機(jī)中可以配置多個(gè)web應(yīng)用。
二、Tomcat虛機(jī)主機(jī)配置
在conf/server.xml中<Engin>標(biāo)簽下配置<Host>標(biāo)簽就可以為tomcat增加一臺(tái)虛擬主機(jī)了
name -- 指定虛擬主機(jī)的名稱,瀏覽器通過這個(gè)名稱訪問虛擬主機(jī)
appBase -- 虛擬主機(jī)管理的目錄,放置在這個(gè)目錄下的web應(yīng)用當(dāng)前虛擬主機(jī)可以自動(dòng)加載(在autoDeploy為true的情況下)相當(dāng)于Localhost虛擬主機(jī)的webapps目錄(在autoDeploy為true的情況下)
debug -- 是日志的調(diào)試等級(jí)
unpackWARs -- 設(shè)置為true,在Web應(yīng)用為*.war時(shí),解壓此WAR文件. 如果為true,則tomcat會(huì)自動(dòng)將WAR文件解壓;否則不解壓,直接從WAR文件中運(yùn)行應(yīng)用程序.
autoDeploy -- 默認(rèn)為true,表示如果有新的WEB應(yīng)用放入appBase 并且Tomcat在運(yùn)行的情況下,自動(dòng)載入應(yīng)用
實(shí)例代碼:
[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應(yīng)用
3.1、Tomcat中Web應(yīng)用的目錄結(jié)構(gòu):
web應(yīng)用目錄結(jié)構(gòu): 如果目錄結(jié)構(gòu)不合法可能會(huì)出現(xiàn)各種問題.
news
|
|--靜態(tài)資源和JSP文件都可以直接放置在web應(yīng)用的目錄下,瀏覽器可以直接訪問到
|--WEB-INF
|--classes -- 動(dòng)態(tài)web資源運(yùn)行時(shí)的class文件要放在這個(gè)目錄下
|--lib -- 動(dòng)態(tài)web資源運(yùn)行時(shí)所依賴的jar包要放在這個(gè)目錄下
|--web.xml -- 整個(gè)web應(yīng)用的配置文件,配置主頁/Servlet的映射/過濾器監(jiān)聽器的配置都需要依賴這個(gè)文件進(jìn)行
說明
WEB-INF -- 可以沒有,但是最好有,如果有則一定要保證他的目錄結(jié)構(gòu)是完整的.放置在WEB-INF目錄下的所有資源瀏覽器沒有辦法直接進(jìn)行訪問
3.2、Tomcat中配置web應(yīng)用的幾種方式:
方式一:這種配置方式需要重啟服務(wù)器不推薦
在tomcat安裝目錄/conf/Server.xml的<Host>標(biāo)簽中,配置<Context>標(biāo)簽,就可以為該虛擬主機(jī)配置一個(gè)web應(yīng)用了
缺省web應(yīng)用設(shè)置:
如果將path設(shè)置為空則這個(gè)web應(yīng)用為缺省web應(yīng)用
示例代碼如下:加粗部分
[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>標(biāo)簽屬性說明: **
|
屬性名
|
說明
|
|
path
|
訪問的URI,如:http://localhost/是我的應(yīng)用的根目錄,在瀏覽器中訪問此應(yīng)用將用,在地址欄輸入:http://localhost/HelloWord
|
|
docBase
|
WEB應(yīng)用的目錄web application的文件存放的硬件路徑或者是WAR文件存放硬件路徑。
|
|
reloadable
|
是否在程序有改動(dòng)時(shí)重新載入,設(shè)置成true會(huì)影響性能,但可自動(dòng)載入修改后的文件. 如果為true,則Tomcat將支持熱部署,會(huì)自動(dòng)檢測web application的/WEB-INF/lib和/WEB-INF/classes目錄的變化,自動(dòng)裝載新的JSP和Servlet,我們可以在不重起Tomcat的情況下改變web application
|
方式二、這種配置方式不需要重啟服務(wù)器,推薦使用
在tomcat安裝目錄/conf/[EnginName]/[HostName]/在這個(gè)目錄下寫一個(gè)xml文件,其中xml文件的名字就是虛擬路徑,在這個(gè)xml中可以配置<Context>標(biāo)簽,其中配置真實(shí)路徑.
注意:
1)其中[EnginName]指的是在tomcat安裝目錄/conf/Server.xml這個(gè)配置文件中<Engin>標(biāo)簽元素對(duì)應(yīng)的名字。
2)[HostName]指tomcat安裝目錄/conf/Server.xml這個(gè)配置文件中<Host>標(biāo)簽元素的名字。
3)如果所配置的虛擬路徑中有/,由于文件名中不允許包含/需要用#替代.
使用方式二完成方法一中相同的配置時(shí),應(yīng)進(jìn)行如下操作:
1)在tomcat安裝目錄/conf/CataLina/localhost/目錄下創(chuàng)建一個(gè)名為HelloWord.xml的文件,(若文件名中有斜杠時(shí)使用#好代替: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>標(biāo)簽屬性說明參照上面內(nèi)容。
缺省web應(yīng)用設(shè)置:
只要將文件名設(shè)置為ROOT.xml則這個(gè)xml描述的web應(yīng)用就成為了缺省web應(yīng)用,
方式三、最簡單、最常用的方式
直接將web應(yīng)用放置到,虛擬主機(jī)管理的目錄下,此時(shí)虛擬主機(jī)就會(huì)自動(dòng)加載該目錄下的web應(yīng)用
/conf/Server.xml的<Host>標(biāo)簽中的屬性appBase所指向的目錄即為當(dāng)前虛擬主機(jī)虛擬主機(jī)自動(dòng)管理的目錄,在屬性autoDeploy為true的情況下,放置在這個(gè)目錄下的web應(yīng)用當(dāng)前虛擬主機(jī)可以自動(dòng)加載。
缺省web應(yīng)用設(shè)置:
只要將web應(yīng)用文件夾名設(shè)置為ROOT則這個(gè)web應(yīng)用就成為了缺省web應(yīng)用,默認(rèn)已經(jīng)有一個(gè)web應(yīng)用,即默認(rèn)訪問的Tomcat的主頁。
附關(guān)于/conf/Server.xml配置的詳細(xì)說明
/conf/Server.xml文件的詳細(xì)配置說明如下:
[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>