Tomcat 默認只支持基於名稱的虛擬主機
Tomcat的虛擬主機在 conf/server.xml 這個配置文件中定義的
一、Tomcat的默認虛擬主機:
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true">
<Context path="/jcenter" docBase="/web/jcenter" reloadable="true" /> 自定義的訪問路徑- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 這段是用於定義日誌格式的
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
各選項的意義:
auotDeploy="true" 自動佈署 ,默認爲false
appBase="webapps" 定義這個主機的應用程序的路徑,這裏是相對於tomcat的安裝路徑( 也就是"/usr/local/tomcat "), 也可以使用絕對路徑
unpackWARs="true" 讓Tomcat可以自動解壓war文件
自定義訪問路徑:
<Context path="/jcenter" docBase="/web/jcenter" reloadable="true" />
path="/jcenter" 訪問路徑
docBase="/web/jcenter" 網頁文件的存放路徑,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如,如果appBase爲deploy,而docBase絕不能爲deploy-bbs類的名字;
reloadable="true" 是否允許自動裝載
下面我們就將 JavaCenter Home 這個開源的社交項目的相關文件放到我們自定的訪問路徑下(使用 Java Center Home 需要用到‘數據庫’,因此需要先安裝好數據庫)
1. 安裝好數據庫(可參考其它博文http://xyuex.blog.51cto.com/5131937/938738)
2. 解壓數據包
- [root@node2 tmp]# mkdir /web/
- [root@node2 tmp]# tar xf JavaCenter_Home_2.0_GBK.tar.bz2 -C /web
- [root@node2 web]# ln -sv JavaCenter_Home_2.0_GBK/ jcenter
- create symbolic link `jcenter' to `JavaCenter_Home_2.0_GBK/'
3. 重啓Tomcat
- [root@node2 tomcat]# bin/catalina.sh stop
- Using CATALINA_BASE: /usr/local/tomcat
- Using CATALINA_HOME: /usr/local/tomcat
- Using CATALINA_TMPDIR: /usr/local/tomcat/temp
- Using JRE_HOME: /usr/java/jdk1.7.0_05
- Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
- [root@node2 tomcat]# bin/configtest.sh 用來測試配置文件是否有語法錯誤
- Using CATALINA_BASE: /usr/local/tomcat
- Using CATALINA_HOME: /usr/local/tomcat
- Using CATALINA_TMPDIR: /usr/local/tomcat/temp
- Using JRE_HOME: /usr/java/jdk1.7.0_05
- Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
- Oct 28, 2012 5:34:50 PM org.apache.catalina.core.AprLifecycleListener init
- INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/i386:/lib:/usr/lib
- Oct 28, 2012 5:34:52 PM org.apache.coyote.AbstractProtocol init 上面的信息只是提示我們沒有安裝APR 庫,並不影響Tomcat的使用
- INFO: Initializing ProtocolHandler ["http-bio-8080"]
- Oct 28, 2012 5:34:52 PM org.apache.coyote.AbstractProtocol init
- INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
- Oct 28, 2012 5:34:52 PM org.apache.catalina.startup.Catalina load
- INFO: Initialization processed in 3686 ms
- [root@node2 tomcat]# bin/catalina.sh start
- Using CATALINA_BASE: /usr/local/tomcat
- Using CATALINA_HOME: /usr/local/tomcat
- Using CATALINA_TMPDIR: /usr/local/tomcat/temp
- Using JRE_HOME: /usr/java/jdk1.7.0_05
- Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
4. 我們測試一下看看
下面我們來演示如何在Tomcat中自定義一個虛擬主機
二、自定義的虛擬主機
自定義的虛擬主機的目錄結構:
/www/*
所有用戶可以通過瀏覽器直接請求的文件
index.jsp
logo.jpg
WEB-INF/{web.xml , classes/*, lib/* } 這個目錄必須要有,存放的是當前應用程序的私有資源,如部署描述符文件web.xml ,所有放在 "WEB-INF" 這個目錄下的 ‘資源(內容)’ 都是 “私有資源”,只能在當前服務器上被當前應用程序所訪問
web.xml 當前應用程序的部署描述符文件,此文件可以複製 conf/web.xml 來獲得
classes/* 可能存放的是編譯好的類的字節碼(可執行的字節碼)
lib/* 打包好的jar文件,包含定義好的類
1. 首先編輯 conf/server.xml 添加如下內容:
- <Host name="tomcat.yue.com" appBase="/www" unpackWARs="true" autoDeploy="true">
- <Context path="" docBase="/www/tomcat" reloadable="true"/>
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 自定義的日誌格式
- prefix="tomcat_access_" suffix=".log"
- pattern="%h %l %u %t "%r" %s %b" />
- </Host>
path="" 訪問路徑,相對於Web服務器根路徑而言的URI;如果爲空“”,則表示爲此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義;
docBase="/www" 相應的Web應用程序的存放位置;也可以使用相對路徑,起始路徑爲此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如,如果appBase爲deploy,而docBase絕不能爲deploy-bbs類的名字;
reloadable="true" 是否允許重新加載此context相關的Web應用程序的類;默認爲false;
2. 創建虛擬主機所需的相關目錄和文件:
- [root@node2 ~]# mkdir -pv /www/tomcat/WEB-INF/{classes,lib}
mkdir: created directory `/www'
mkdir: created directory `/www/tomcat'
mkdir: created directory `/www/tomcat/WEB-INF'
mkdir: created directory `/www/tomcat/WEB-INF/classes'
mkdir: created directory `/www/tomcat/WEB-INF/lib'- [root@node2 ~]# cp /usr/local/tomcat/conf/web.xml /www/tomcat/WEB-INF/
- [root@node2 ~]# vi /www/tomcat/index.jsp 編輯默認主頁
- 內容如下:
- <%@ page language="java" %>
- <html>
- <head><title>TomcatA</title></head>
- <body>
- <h1><font color="red">TomcatA </font></h1>
- <table align="centre" border="1">
- <tr>
- <td>Session ID</td>
- <td><%= session.getId() %></td>
- </tr>
- <tr>
- <td>Created on</td>
- <td><%= session.getCreationTime() %></td>
- </tr>
- </table>
- </body>
- </html>
- [root@node2 ~]# tree /www/
- /www/
- `-- tomcat
- |-- WEB-INF
- | |-- classes
- | |-- lib
- | `-- web.xml
- `-- index.jsp
- 4 directories, 2 files
3. 在Windows主機的hosts文件中加入 關於tomcat.yue.com 的 IP 對應(便於測試)
在 C:\Windows/System32\drivers\etc\hosts 文件中添加 “192.168.1.12 tomcat.yue.com”
4. 重啓Tomcat,進行測試
5. 查看我們自定義的日誌:
- [root@node2 tomcat]# tail logs/tomcat_access_2012-10-28.log
- .....
- 192.168.1.2 - - [28/Oct/2012:19:14:05 +0800] "GET / HTTP/1.1" 200 437
- 192.168.1.2 - - [28/Oct/2012:19:14:06 +0800] "GET / HTTP/1.1" 200 437