Tomcat 映射虚拟目录

运行环境:Tomcat6.0,eclipseMars

实现方法

(建议)方法1.%TOMCAT_HOME%/conf/server.xml文件中

<host> </host>之间加入如下代码:

      <Context path="/inspect/uploadMedia" docBase="E:\project\inspect\uploadMedia" reloadable="true" crossContext="true"/>

      

最终 <host>的内容为:

      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">

     <Context docBase="inspect" path="/inspect" reloadable="true" source="org.eclipse.jst.jee.server:inspect"/>

     <Context path="/inspect/uploadMedia" docBase="E:\project\inspect\uploadMedia" reloadable="true" crossContext="true"/>

      </Host>     

方法2.不重启Tomcat就使虚拟目录生效

%TOMCAT_HOME%\conf\Catalina\localhost 新建JspTest.xml文件,

如%TOMCAT_HOME%\conf\Catalina\localhost\JspTest.xml

内容为:

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="E:\project\inspect\uploadMedia"  reloadable="true"  crossContext="true"/>


这种方法可以理解就是新建一个项目,识别xml的文件名为项目路径。

方法2中path是不需要的,设不设都认为是xml的文件名是其项目路径。

所以有2个缺点:①不能与项目名保持一致,如果你的项目是“域名/项目名“访问的情况,这种方式在页面指向虚拟目录资源时,不能使用项目根路径。②如果直接“域名”访问项目。这种方法的路径就是要加上xml作为虚拟路径。

其他尝试:

项目同名xml文件中只能有一个<Context> 不能像sever.xml中<HOST>配多个<Context>。

不能删除或修改原来指向项目的<Context>的docBase,这里修改了原项目就不能访问了。


属性说明:  

%TOMCAT_HOME%:指tomcat的要根目录

docBase  是实际路径,一般为绝对磁盘路径,也可以写相对路径,相对路径是相对于tomcat安装目录的webapps目录,通常设置虚拟目录的目的是将tomcat的安装和项目的保存分开,所以这里建议使用磁盘绝对路径,并且这个磁盘路径不是在tomcat目录下。 

workDir  是tomcat运行是对JSP文件做编译后的文件,这个文件最好也是分开。可以不设置

path  为虚拟路径,访问时的路径,注意:一定要加“/”。值得注意的是:path可以为"/"那么访问“IP:端口”就可以访问到布置的工程,如果为"/test",那么必须得访问“IP:端口/test”才能访问到。如果上面的项目path有内容,新加的虚拟路径就要在前面加上“/inspect”如"/inspect/uploadMedia",否则表示要通过http://localhost:8080/mediainfos访问到虚拟路径(即没有项目名。)

debug  建议设置为0,开发时也设置0,反正是用来放上传文件的,没什么感觉。

reloadable开发时设置true,实际部署时设置false。如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用

crossContext="true":虚拟路径要访问到别的电脑时如 docBase="//IP/data1" ,要配置成true,访问本地其他盘不影响。简而言之,允许跨域访问。

     

几个问题:

1. eclipseMARS每次重新部署或重启tomcat的时候会覆盖server.xml、 web.xml 和 \conf\Catalina\localhost\inspect.xml的问题,

是因为eclipseMARS中有这几个文件的配置文件,直接修改项目名为server/tomcatx.x下面相应的文件,部署的时候就直接覆盖tomcat目录下的原文件。


2. <host> </host>之间在修改之前就存在下面这一个context,是eclipse发布的时候添加的。这个删除项目就起不来。

      <Context docBase="inspect" path="/inspect" reloadable="true" source="org.eclipse.jst.jee.server:inspect"/>

      

3. 虚拟目录默认不支持非英文路径(那些直接说不支持中文的人根本就没研究),原始的webapp目录下可以支持。如果想让虚拟路径也支持可以在server.xml中<Connector>(protocol="HTTP/1.1"的那个)添加URIEncoding="utf-8"(编码视具体项目而定)属性。

<Service>

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

</Service>


网上一些错误的信息:

1.%TOMCAT_HOME%/conf/web.xml文件中把虚拟路径显示目录给禁止啦,此时可以在web.xml文件中找到把listings 改为true。

其实不用改就能使用虚拟目录,建议为false。这个参数是控制能不能访问虚拟路径下的目录,为true时,即地址栏输入http://localhost:8080/inspect/uploadMedia/可以显示uploadMedia下的文件夹和文件,

<servlet>

<servlet-name>default</servlet-name>

<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>listings</param-name>

<param-value>false</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

上面的修改是全局修改。若在某一个应用中开启listing时,在WEB-INF/web.xml中:

<servlet>  

     <servlet-name>media</servlet-name>  

     <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>  

     <init-param>  

         <param-name>listings</param-name>  

         <param-value>true</param-value>  

     </init-param>  

 </servlet>  

 <servlet-mapping>  

     <servlet-name>media</servlet-name>  

     <url-pattern>/</url-pattern>  

 </servlet-mapping>   

 


你可能感兴趣的:(tomcat6.0,eclipseMars)