85427617 2010-07-21
以前开发JavaEE网站都布置在Tomcat下,布置目录一般为$CATALINA_HOME/webapps/WebName,所以要访问网站,则在http://localhost后必须要加上上下文路径(ContextPath)/WebName,而运行环境一般为http://www.abc.com,上下文路径为空。这样就造成了开发环境与运行环境的差异,虽然在JSP中可以通过<%=request.getContextPath()%>解决,但如果换成其它模板,比如Velocity,就又不行了。
本文通过参考各大网友的做法以及自己的亲身实践,成功地在Tomcat下设置多个虚拟主机和多个虚拟目录,写出来以供各网友参考和自己做个笔记。
Tomcat5和Tomcat6的配置文件为:$CATALINA_HOME/conf/server.xml,其它的版本的Tomcat的配置文件没有用过。
注意以下的一,二,……步骤不是顺序的,是可以选择的。
说明:虚拟主机在server.xml为Host,虚拟目录为Context。
一、修改端口
Tomcat默认的WEB端口为8080,我一般喜欢把它改成80,当然这是完全没有必要的
<Connectorport="80"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"/>
注意是修改HTTP协议的,也就是protocol="HTTP/1.1"的,不是其他的。
二、增加虚拟目录
1、最简单的方式:直接把JavaEE网站放在$CATALINA_HOME/webapps目录下了,然后通过http://localhost/WebName,WebName为网站的目录名;
2、自定义:把网站放在其它的目录下,比如放在/var/www/webapp目录下,那么就要修改server.xml了。
在</Host>前增加以下内容即可:
<Contextpath="/SpringMVC"docBase="/var/www/webapp/SpringMVC"workDir="/var/www/webtmp/SpringMVC"debug="5"reloadable="false"crossContext="true"/>
则可以通过http://localhost/SpringMVC访问了,也就是在主机名为localhost中增加了一个名为SpringMVC的虚拟目录了,当然,这里的名字完全依个人而定的。
三、增加虚拟主机
其实这才是本文要说的重点,也就是本文开头说的那种案例。我们每开发一个网站,都是通过http://localhost/WebName的形式访问,是不是很麻烦?
1、修改hosts文件,增加主机名
(1)Linux系统的hosts文件为/etc/hosts
(2)Windows系统的hosts文件为C:\WINDOWS\system32\drivers\etc\hosts
比如你想增加www.local.com主机,则在此文件中增加一行:127.0.0.1www.local.com,也就是说当你访问www.local.com时,其实是访问127.0.0.1;
我比较喜欢简短的域名,所以我增加的是:127.0.0.1SpringMVC
2、修改配置文件
在</Host>后再增加一个Host结点:
<Hostname="SpringMVC"appBase="/var/www/webapp/SpringMVC"unpackWARs="true"autoDeploy="false"xmlValidation="false"xmlNamespaceAware="false"/>
即增加了一个名为SpringMVC的虚拟主机,当然也可以是name="www.local.com",这个根据具体情况定。
这样,访问的IP就是:http://SpringMVC了。
3、目录设置
主机SpringMVC的WEB文件全放在/var/www/webapp/SpringMVC目录下,在该目录下增加ROOT目录,放入你的JavaEE网站工程,这样,你就可以通过http://SpringMVC访问你的网站了,后面少了/SpringMVC这个字串,在IP上与运行环境保持了一致。
四、其它问题
通过http://SpringMVC访问的是SpringMVC网站;
通过http://localhost访问的是Tomcat自带的网站;
我们在hosts文件中已经知道,SpringMVC和localhost都对应的IP是:127.0.0.1
那么,通过http://127.0.0.1访问的是那个网站呢?
在Host的父节点是:<Enginename="Catalina"defaultHost="SpringMVC">
从上可以看出,defaultHost="SpringMVC"决定了127.0.0.1访问哪个网站,我的设置是访问SpringMVC本文到此就要结束了,贴上我的server.xml文件内容:
<?xmlversion="1.0"encoding="utf-8"?>
<Serverport="8005"shutdown="SHUTDOWN">
<Listenerclassname="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on"/>
<Listenerclassname="org.apache.catalina.core.JasperListener"/>
<Listenerclassname="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener classname="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><GlobalNamingResources>
<Resourcename="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"description="Userdatabasethatcanbeupdatedandsaved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources><Service name="Catalina">
<Connectorport="80"protocol="HTTP/1.1"connectionTimeout="20000"
redirectPort="8443"/>
<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>
<Enginename="Catalina"defaultHost="SpringMVC">
<Realmclassname="org.apache.catalina.realm.UserDatabaseRealm"
resourcename="UserDatabase"/>
<Hostname="localhost"appBase="webapps"unpackWARs="true"
autoDeploy="true"xmlValidation="false"xmlNamespaceAware="false">
<!--HelloMule-->
<!--
<Contextpath="/mule"docBase="/var/www/webapp/Mule"
workDir="/var/www/webtemp/Mule"debug="5"reloadable="false"
crossContext="true"/>
-->
</Host>
<Hostname="SpringMVC"appBase="/var/www/webapp/SpringMVC"
unpackWARs="true"autoDeploy="false"xmlValidation="false"
xmlNamespaceAware="false"/>
</Engine>
</Service>
</Server>如有批评、指教、疑惑,请:[email protected]祝大家使用JAVA愉快!
------------------------------
同URL:http://hi.baidu.com/obullxl/blog/item/9b4a7006707dc27003088153.html
------------------------------
在tomcat6版本中:1、本人不推荐。在tomcat\conf下server.xml中找到<hostname="localhost"appbase="webapps"unpackwars="true
Tomcat的Web应用默认是放置在其webapps目录下的,通过配置可以重新为其设置虚拟目录。在<HOST>...</HOST>节点中加入如下配置。docBase属性配置虚拟目录对应磁盘上的真实目录