深入理解Tomcat虚拟目录

来源:互联网 发布:搞笑网络剧 编辑:程序博客网 时间:2024/06/07 09:41
  文章一
我们知道,Web网站中的内容(包括网页,图片,音频文件等)一般都存放在App的目录下。但随着网站内容的不断丰富,用户需要把不同层次的内容组织成网站的子目录。我们通常的做法是在网站主目录下新建子目录,并把相关的内容放置到对应的目录。此外,还有另外一种方法,就是创建虚拟目录。虚拟目录可以是磁盘上有权限操作的任意路径(将虚拟路径设置为readOnly是绝对不行的),也可以是网络中其他计算机的目录。

    

    相对而言,创建子目录的方式更安全高效。但为什么还要有虚拟目录呢?这是因为虚拟目录解决了Web文件必须放在Web根目录下的难题。一方面,这样大大增加Web工程的存储空间。另一方面,也为多个不同的工程共享同一份文件提供了保障。比如,当我们多个网站都需要访问同一份文件时,我们只需将该虚拟路径指向改文件的地址即可,这样就避免了同一份文件多次拷贝的问题。

    在Tomcat7版本下,配置虚拟路径修改以下两个文件:

    打开Tomcat目录下的/conf/server.xml文件,在Host之前加入下面红色部分的内容。
<Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%h %l %u %t &quot;%r&quot; %s %b" />
   
 <Context path="/appName/filePath" docBase="/opt/filePath" reloadable="true" debug="0"/>
</Host>
    path : 工程名称+文件路径,当访问path目录下的文件时,实则访问docBase目录下的文件。
    docBase : 文件的真实路径。注意这里如果有文件长传,则将上传的文件路径设置为docBase,而不是path。
文章二

 设置虚拟路径的优势我总结有两点,当然这只是很普通、很常见的两点优势:第一、我们开发一个项目,在未定版之前需要进行无数次的修改,如果部署测试项目的时候直接将项目打成war包放到webapps目录下,那么每一次版本变更都需要将新的版本放到webapps目录下覆盖原先的版本,这样对于我们测试项目来说是不是非常麻烦呢?如果建立一个虚拟路径,直接映射到项目原件,这样一来在测试阶段是不是非常的方便?(当然这点对于使用集成开发环境工具的开发者来说可以忽略);第二、Tomcat是一个服务器,既然是一个服务器是不是就有容量这么一说呢?虽然这个容量是你说了算,但是再怎么大是不是也有盘符容量限制?如果将所有的项目都部署到webapps目录下,当项目比较大而且项目较多的时候是不是需要考虑一下盘符的感受呢?所以使用虚拟路径也可以为搭载Tomcat服务器的盘符分压!


==============这真的只是一条分割线 ==============

好了,废话就不多说了,直接切入正题!

如何设置虚拟路径呢?网上有很多的帖子,但是很多都只提到2-3中方法,其实在Tomcat7的官方文档中给出了5种设置的方法,下面我们就来看一下其中的4中,因为有一种实在是不常用:


方法1(修改配置文件):这是最最最常见的一种方法

在Tomcat7的安装目录下找到conf目录,在该目录下有一个server.xml文件,这个文件的任务是配置整个服务器信息。例如修改端口号,添加虚拟主机…… 打开这个文件,找到HOST标签,


在这个标签中处插入以下代码:

<Context path="/yang" docBase="f:\mysite1\xxx.war" debug="0" reloadable="true" crossContext="true" />

说明:

  • path:指定访问该 Web 应用的 URL 入口。
  • docBase:指定 Web 应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase 属性的相对路径,如果 Web 应用采用开放目录结构,则指定 Web 应用的根目录,如果 Web 应用是个 war 文件,则指定 war 文件的路径。(指定项目所在地址)
  • reloadable:如果这个属性设为 true,tomcat 服务器在运行状态下会监视在WEB-INF/classes 和 WEB-INF/lib 目录下 class 文件的改动,如果监测到有 class 文件被更新的,服务器会自动重新加载 Web 应用。
  • crossContext:如果想在应用内调用 ServletContext.getContext()来返回在该虚拟主机上运行的其他 web application 的 request dispatcher,设为 true。在安全性很重要的环境中设为 false,使得 getContext()总是返回 null。缺省值为 false。
  • Debug:与这个 Engine 关联的 Logger 记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为 0。

这个方法一般在设置后都需要重启服务器才有效(有时候即使设置了reloadable=“true” 也需要重新启动)


-----------------------------------------------------------------------------------------------------------------------------------------------


方法2(添加配置文件):推荐使用,不需要重启服务器

在Tomcat根目录下的/conf/Catalina/localhost/ 路径下新建一个filename.xml,并在该xml中编写语句

<Context docBase="F:\Java\JavaWebWorkspace\news"/>

即可创建虚拟站点,虚拟站点名为filename。注意docbase指向你自己的应用程序目录,各参数参见方法1中的<Context>标签的参数(注意此文件名将作为Context中的path属性值,不管文件里的path属性值如何设置也是无效的 )。

如果需要分层虚拟站点,可以将文件名改成a#b#c,访问分层虚拟站点时用localhost:8080/a/b/c

----------------------------------------------------------------------------------------------------------------------------------------------

方法3:

在Tomcat根目录下的conf目录context.xml文件中插入

<Context path="/zhang" docBase="f:\mysite1" debug="0" reloadable="true" crossContext="true" />

注意,这个虚拟路径修改方法会让所有的站点都能加载,https://localhost:8080/zhang

使用这个之前最好将service.xml中的列表设置打开。

   -----------------------------------------------------------------------------------------------------------------------------------------------

方法4:

在Tomcat根目录下的路径/conf/Catalina/localhost/context.xml.default ,在这里进行配置,这个虚拟路径修改方法会让该主机下的所有的站点都能加载,同上。

文章三

虚拟根目录的设置

1. Tomcat 自动将D:\tomcat-7.0.23\webapps\ROOT 设置为根目录

对应的设置为:D:\tomcat-7.0.23\conf\server.xml  文件里的 <Host> 元素,name属性:主机名称,appBase属性:基准目录 ,基准目录下的Root 目录被自动设置为根目录

[html] view plain copy

  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  

 

2.  在 server.xml 文件中设置 <Context> 元素

<Context path=""  docBase="F:\web"  debug=”0“>

path: 为空代表网站根目录

docBase:可以设置绝对路径,也可设置相对路径,相对路径是相对 appBase 属性所设的目录而言的

说明:每一个<Host> 元素是一个主机,<Context>元素是一个虚拟目录

浏览测试路径  URL:http://127.0.0.1:8080/index.html

<Context path=""  docBase="\web"  debug=”0“>

这时需要在D:\tomcat-7.0.23\webapps\web 目录下存在,index.html 文件

浏览测试路径  URL:http://127.0.0.1:8080/index.html   访问的文件是D:\tomcat-7.0.23\webapps\web\index.html

 3.在 server.xml 文件中设置 <Context> 元素

<Context path="/pds"  docBase="F:\web"  debug=”0“>

path: 以  /  开头 ,表示虚拟子目录

docBase:可以设置绝对路径,也可设置相对路径,相对路径是相对 appBase 属性所设的目录而言的

说明:每一个<Host> 元素是一个主机,<Context>元素是一个虚拟目录

浏览测试路径 URL:http://127.0.0.1:8080/pds/index.html



原创粉丝点击