以前开发JavaEE网站都布置在Tomcat下,布置目录一般为$CATALINA_HOME/webapps/WebName,所以要访问网站,则在http://localhost后必须要加上上下文路径(ContextPath)/WebName,而运行环境一般为http://www.abc.com,上下文路径为空。这样就造成了开发环境与运行环境的差异,虽然在JSP中可以通过<%=request.getContextPath()%>解决,但如果换成其它模板,比如Velocity,就又不行了。
本文通过参考各大网友的做法以及自己的亲身实践,成功地在Tomcat下设置多个虚拟主机和多个虚拟目录,写出来以供各网友参考和自己做个笔记。Tomcat 5和Tomcat 6的配置文件为:$CATALINA_HOME/conf/server.xml,其它的版本的Tomcat的配置文件没有用过。注意以下的一,二,……步骤不是顺序的,是可以选择的。说明:虚拟主机在server.xml为Host,虚拟目录为Context。一、修改端口Tomcat默认的WEB端口为8080,我一般喜欢把它改成80,当然这是完全没有必要的<Connector port="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>前增加以下内容即可:<Context path="/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.1 www.local.com,也就是说当你访问www.local.com时,其实是访问127.0.0.1;我比较喜欢简短的域名,所以我增加的是:127.0.0.1 SpringMVC2、修改配置文件在</Host>后再增加一个Host结点:<Host name="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上与运行环境保持了一致。四、其它问题(1)
通过http://SpringMVC访问的是SpringMVC网站;
通过http://localhost访问的是Tomcat自带的网站;我们在hosts文件中已经知道,SpringMVC和localhost都对应的IP是:127.0.0.1那么,通过http://127.0.0.1访问的是那个网站呢?在Host的父节点是:<Engine name="Catalina" defaultHost="SpringMVC">从上可以看出,defaultHost="SpringMVC"决定了127.0.0.1访问哪个网站,我的设置是访问SpringMVC本文到此就要结束了,贴上我的server.xml文件内容:
<?xml version="1.0" encoding="utf-8" ?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><GlobalNamingResources>
<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="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="SpringMVC"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <!--HelloMule--> <!-- <Context path="/mule" docBase="/var/www/webapp/Mule" workDir="/var/www/webtemp/Mule" debug="5" reloadable="false" crossContext="true" /> --> </Host> <Host name="SpringMVC" appBase="/var/www/webapp/SpringMVC" unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false" /> </Engine></Service></Server>(2)
首先,修改$tomcat/conf/server.xml文件。
在server.xml文件中,有一段如下: Xml代码<engine name="Catalina" defaultHost="localhost改为你的域名">
<host name="localhost改为你的域名" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> …… <host> </engine>
在<host></host>标签之间添加上: Xml代码 <Context path="" docBase="myjsp" debug="0" reloadable="true" /> path是说明虚拟目录的名字,如果你要只输入ip地址就显示主页,则该键值留为空; docBase是默认目录的路径,它默认的是$tomcat/webapps/ROOT目录,现在我在webapps目录下建了一个myjsp目录,让该目录作为我的默认目录。 debug和reloadable一般都分别设置成0和true。如有批评、指教、疑惑,请:
祝大家使用JAVA愉快!有什么错误请在后面指出,让我及时更正。