Tomcat中设置虚拟路径在web应用中总会遇到图片资源上传放问的业务,如果将上传的图片放在web项目下(如webapp下),显然是很不合适、很不科学的。当然可以选择放在部署的项目之外,另寻一个磁盘空间存放,但是这样存在一个问题,如果想要访问(通过http://方式访问)上传的图片,就只能通过代码读取文件流,再通过输出流写出到浏览器中,这样显然是不好的,那么,怎么解决这个问题呢?这里以tomcat7服务器为例,讲述怎么实现通过http方式直接访问非web目录下的资源:通过设置虚拟路径方式。项目部署在tomcat服务器中一般有种情况:tomcat单独启动(即拷贝项目到tomcat的webapps下,再通过start.bat命令启动)和通过eclipse、myeclipse开发工具启动。其实这两种启动方式再实现虚拟路径时的配置是一样的,但是有点区别就是通过eclipse开发工具启动tomcat时有时会出现设置的虚拟路径不生效,但是通过tomcat单独启动时虚拟路径又是生效的。介于这个问题,将tomcat的虚拟路设置分两种情况讲述。一、Tomcat单独启动tomcat中设置虚拟路径访问静态资源的方式有两种:方式一:在conf/server.xml文件中配置Host标签下的Context标签的属性,配置片段如下:Hostname=localhostappBase=webappsunpackWARs=trueautoDeploy=true!--配置虚拟路径--Contextpath=/static1docBase=D:\test\srcFilereloadable=false//Host这方式实现D:\test\srcFile目录下的文件作为静态资源,可以直接通过http访问,访问方式为:如:方式二:在conf/Catalina/localhost下新建xml文件,文件名可以随便区,如:static2.xml,此static2.xml中的配置信息如下:?xmlversion=1.0encoding=UTF-8?Contextpath=/imagesdocBase=D:\test\srcFileprivileged=truereloadable=falsedebug=0workDir=/这种方式也可以将D:\test\srcFile目录下的资源作为服务器的静态资源,不过在访问静态资源时和方式一有点区别,访问方式:如:这里的static2是新建的文件名称,而不是Context标签中的path属性的值了,注:tomcat设置虚拟路径的方式配置虚拟路径实现静态资源的访问,在放问时http路径中是不能加当前web应用的上下文的,否则找不到。二、通过eclipse等开发工具启动(这里以eclipseluna为例)在通过eclipse启动tomcat服务器后,如果配置的tomcat虚拟路径不生效,那就还需要更改一些文件,因为eclipse在启动tomcat时,不是直接使用eclipse中配置的tomcat所指路径下的配置信息,而是先将配置的tomcat目录下的配置信息(如:server.xml等)复制eclipse的工作空间中使用(好像只有在第一次使用tomcat时才会复制)。所以当在tomcat目录下修改了虚拟路径后,以为通过eclipse启动后就会生效。解决eclipse启动tomcat后虚拟路径不生效问题:Step1:在eclipse中右键要部署在tomcat中的项目,选择DebugAsDebugConfigurationa或选择RunAsRunConfigurations,弹出对话框,如下图:复制Arguments下VMarguments中的-Dwtp.deploy的值,这里是:E:\work\ecpliseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps其实只要复制到倒数的第二层目录最好,即:E:\work\ecpliseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2Step2:将上面的目录在磁盘上打开,如下图:打开conf目录,如下图:可以看到一个名称为server.xml的文件,就在这个文件中更改虚拟路径配置即可。