<Engine name="Catalina" defaultHost="localhost">
<!--
一定要将配置放到Engine这个标签下,他的defaultHost指的是默认的虚拟主机指向是哪里.这里我们假定
我们的tomcat所在位置为D:/tomcat6
-->
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- The request dumper valve dumps useful debugging information about
the request and response data received and sent by Tomcat.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
-->
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<!-- Define the default virtual host
Note: XML Schema validation will not work with Xerces 2.2.
-->
<!--这个是上边默认指向的虚拟主机配置,默认指向是tomcat6/webapps下的ROOT目录-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
-->
</Host>
<!--下边的两个虚拟主机是我增加的虚拟主机配置,如果我们的项目已经放到tomcat6的webapps,那么docBase就是以webapps为上级目录,如果是没放到tomcat6的
webapps下边,那直接写文件目录的绝对路径了。
-->
<Host name="seller.mic.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<!--
此标签项的path属性如果是"/"就是直接访问项目提供的url服务,如果指定了"/MicSeller",请求的路径中必须有/MicSeller这个目录标签,如果是"/",路径中无论
是否有/MicSeller都能访问。
当path设置为"/"时:http://seller.mic.com等于http://seller.mic.com/MicSeller
-->
<Context docBase="MicSeller" path="/" reloadable="true" />
<!--
下边指定了这个虚拟主机的日志输出。按照如下设置,应该是在tomcat6的logs目录下生成一个sellermic.txt
-->
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="sellermic." suffix=".txt" pattern="common" resolveHosts="false"/>
</Host>
<Host name="trader.mic.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="MicTrader" path="/" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="tradermic." suffix=".txt" pattern="common" resolveHosts="false"/>
</Host>
</Engine>
注意事项(假定tomcat在D:/tomcat6):
虚拟主机配置中,我们修改的是tomcat的D:/tomcat6/conf/server.xml文件
1、必须将我们的webapps下的Root目录换一个名字(例如直接改成Root_bak),否则我们无法直接通过seller.mic.com这个虚拟主机直接放到他下边url。
2、一定要将虚拟主机的配置写在Engine标签下
3、可以选择性的添加虚拟主机中日志的是否开启
实践中出现的问题:
1、当我不做虚拟主机配置的时候,webapps下的两个项目通过localhost/项目名访问正常。当我将虚拟主机加上之后,发现内存溢出
--原因可能是虚拟主机加载的问题,web项目下的jar太多导致?
--解决方式就是在catalina配置中调高tomcat的内存到1G(再大了tomcat也消费不了)以及将堆内存提高
2、当我配置好虚拟主机后,弄几个只有基本访问页面的web项目,发现内存不溢出
3、对静态页面的解析tomcat配置还是不成功
总结:
1、这可能就是为什么很多idc不喜欢将虚拟主机租给用ssh(spring+hibernate+struts)开发项目的团队的原因了。因为ssh的预先加载机制导致内存消耗太大,会造成内存溢出。
2、tomcat的虚拟主机详细配置可以考虑进一步了解host标签的使用
3、那个defaultHost中的localhost的指向如果生效会影响我们虚拟主机的配置,建议还是别生效了
4、如果想解决内存溢出outofmemory的几个方法
(1)、加到tomcat的占用内存,但是如果ssh类型的项目太多,还是会内存溢出
(2)、不用ssh框架
(3)、配合apache使用在apache上配置虚拟主机(tomcat不做任何改动),使用jkmount的方式转发请求到tomcat,让tomcat跟没有配置虚拟主机一样的工作(相当于使用localhost方式访问的这些程序)
(4)、研究下tomcat自己虚拟主机加载方式...--》搞定了分享给我:)