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