tomcat安装路径C:\Program Files\Apache Software Foundation\Tomcat 6.0
\conf文件夹下包含这些文件:catalina.policy、catalina.properties、context.xml、logging.properties、server.xml、web.xmltomcat-users.xml
===================================================================================
server.xml文件内容:  <Service name="Catalina">
 
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />    <Engine name="Catalina" defaultHost="localhost">      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
</Server>
context.xml文件内容
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
文件中被注释部分都省略了
===================================================================================
我现在看的书上是tomcat5.x介绍的 无法按照书上去配置 网上也没找到我想要的配置方法 英文不好 文档看不太懂 所以就有了这个帖子我是新手 所以请尽量包涵我啰嗦的问题我理解的默认配置的部分 理解不对的地方请纠正
默认的站点名称localhost
默认的存放站点的文件夹\Tomcat 6.0\webapps
问题1、没看见哪里设置ROOT文件夹,为什么http://localhost:8080/index.html访问的是webapps\ROOT文件夹下的index.html?我喜欢把程序文件和自己保存的文件分开放 所以自己的文件都会放在非C盘 但是又喜欢保持原程序文件的完整性
问题2、如何映射一个虚拟根目录取代ROOT?例如我想让D:\myroot成为localhost的根目录,即http://localhost:8080/index.html访问的是D:\myroot下面的index.html;我不要把D:\myroot映射成ROOT/xxx,即http://localhost:8080/xxx/index.html访问的是D:\myroot下面的index.html。问题3、如何新建个虚拟主机然后设置虚拟根目录?比如我要新建个名为myhost的虚拟主机,文件夹是D:\mysite,我知道要做的可能是在server.xml里新加个<Host>标签(别告诉我把localhost改为myhost,我不想把localhost改掉),name=myhost appBase="D:\mysite",那context.xml里的<context>标签怎么写,如果有多个<Host>,如何知道它对应的那个host。我想知道的是<Host>和<context>分开写不是嵌套在一起。如何设置才能http://myhost:8080/index.html访问的是D:\mysite下的index.html?谢谢!

解决方案 »

  1.   

    1, 去http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.16/src/apache-tomcat-6.0.16-src.zip
    dl个source看看就全明白了。    /**
         * Given a context path, get the config file name.
         */
        protected String getDocBase(String path) {
            String basename = null;
            if (path.equals("")) {
                basename = "ROOT";
            } else {
                basename = path.substring(1);
            }
            return (basename);
        }也就是说,如果path为空,强制为ROOT!2, 你可以改程序,同时把server.xml里面,appBase="webapps"给改了。
    但是不建议你这么做,你似乎不知道http服务器和web应用服务器的区别。
    通常真正运用时,tomcat前面有个apache。那么,http://localhost/index.html访问的是apache的东西。
    http://localhost/xxx/index.html才是tomcat的东西。
    当然,设置好之后,8080是关掉的,xxx的请求自动转到tomcat.对apache公开的是<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    所以你根本用担心外面会访问到http://localhost:8080/index.html3, 没试过,不知道。不过<Engine name="Catalina" defaultHost="localhost">
    你有多个host的话,defaultHost可能要改。
      

  2.   

    我快要崩溃了 纠正个错误 教材是tomcat 4.x
    一个小tomcat都配置不好 打击太大了 郁闷 装dz论坛的时候 iis自己摸索摸索就配置好了 这个tomcat已经浪费了我快10个小时了回1楼:
     1、   protected String getDocBase(String path) { 
            String basename = null; 
            if (path.equals("")) { 
                basename = "ROOT"; 
            } else { 
                basename = path.substring(1); 
            } 
            return (basename); 
        } 
    这个path怎么跟docBase扯上关系了 不是有docBase这个属性自己指定吗 我的理解好像docBase是存放文件的地方 path是写在浏览器地址栏里的url2、我也不想把appBase="webapps"给改了 那样相当于把webapps挪个地方 然后那下面的文件夹如何映射到本地文件夹还是不会3、似乎conf文件夹下还应该有文件夹 为什么我的conf下面就那几个文件 要自己建文件夹吗 那最里层的文件夹里的文件有什么
      

  3.   

    我提示一点吧.1 server.xml 里面的 Host 是设置虚拟主机的,也就是appBase
    2 context.xml 你可以不用管它
    3 conf\Catalina\localhost 这个目录下面是设置localhost的虚拟目录,也就是docBase;比如你可以创建一个ROOT.xml 就是主目录了Tomcat 6 和5.5 配置有区别,虽然不是很大,但和5.0及以前的版本,区别很多!
      

  4.   


    3 conf\Catalina\localhost 这个目录下面是设置localhost的虚拟目录,也就是docBase;比如你可以创建一个ROOT.xml 就是主目录了 
    这样弄过 没用 只有xxx.xml才有用 然后http://localhost:8080/xxx才可以
    我想要http://localhost:8080就对应的是D:\test这种
      

  5.   

    在C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\Catalina\localhost这里面加个ROOT.xml
    ROOT.xml内容
     <?xml version='1.0' encoding='utf-8'?>
     <Context path="" docBase="d:/test" reloadable="true" crossContext="true">
     </Context> 
    这是网上找到的方法 根本就不管用 path="/"也不行test.xml
     <?xml version='1.0' encoding='utf-8'?>
     <Context path="/test" docBase="d:/test" reloadable="true" crossContext="true">
     </Context>
    这样http://localhost:8080/test 这样倒是可以 但是我不想让它后面/test 感觉很不舒服
      

  6.   

    晕 我添了个host 然后把windows文件夹里hosts文件里的127.0.0.1 localhost复制了一行 把localhost改成自己的站点名 然后再Catalina文件夹下新建个myhost 这里加个ROOT.xml倒是起作用 就是path="" docBase="xxxx"有用  但是又出问题了 域名乱套了 path="/xxx" docBase="xxxx"没用了 原来http://localhost:8080/test/xxx.html可以访问的也没法访问了 把新加的host删除 全部还原 也没法访问 真是怪事
    我再重装一遍试试看
      

  7.   

    我把context.xml删掉了 可以
      

  8.   

    为什么直接在context.xml里改不行呢
      

  9.   

    context.xml是个控制全局的文件 如果我要在它里面设置些属性 那根目录不又变回ROOT了 把它删了或里面的内容清空 不相当于版本降低了吗
      

  10.   

    看来没有完美的解决方案了 
    我还是把<Contex>放进server.xml里好了 contex.xml不动 也不新建Catalina文件夹 这样比较符合我的性格 浪费了一天时间了 不能再浪费时间了