更改tomcat的server.xml 访问非工程目录下的文件(其他磁盘下的文件)

如题:我们在做一些网站的时候,比如售房网站,可想而知每个房子都有自己的图片,一个房子就好多图片。如果把这些图片都放在当前工程下,那么我们这个工程就好大。实际开发过程中,类似这种网站肯定是要挂载磁盘的,我们在存储图片的时候是真正存在磁盘上的某个目录下,而并非是真正的工程目录下。比如存储在:D:\apps\realestate\images\tenement  如下图:
更改tomcat的server.xml 访问非工程目录下的文件(其他磁盘下的文件)_第1张图片


但是我们在jsp页面中怎么访问这些图片呢?假如图片放在webRoot下, 我们只需写一个相对路径就可以访问了。例如:

<img class="mainImg" src="images/5/image0.jpg“ width="772" height="579" >

但是我们如何访问放在某个盘符下面的图片呢?  

以前尝试过用流的方式读取,但是这只适合读取一张图片,当要访问大量图片的时候,这种方式就不合理了。


下面正式介绍我们的方法,更改tomcat 的server.xml来访问指定目录下的图片。

1.首先我们数据库的要存储的是相对路径

更改tomcat的server.xml 访问非工程目录下的文件(其他磁盘下的文件)_第2张图片


2.更改tomcat 的配置文件server.xml 文件

加上这句:<Context docBase="D:/apps/realestate/images" path="/realestate/img" />

doBase写的是你要访问的那个盘符下的哪个目录   path代表你在服务器上访问的路径。比如:http://localhost:8080//realestate/img/tenement\5\image0.jpg  就可以再浏览器真正的看到图片。

更改tomcat的server.xml 访问非工程目录下的文件(其他磁盘下的文件)_第3张图片

3。前台jsp可以直接访问了。

一般我们jsp 中会写:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

图片可以是:


<img class="mainImg" src="<%=basePath %>${photoList[0].bigPhotoPath }" width="772" height="579" data-index="0" alt="${tenement.tenementInfo }"
title="${tenement.tenementInfo }">

${photoList[0].bigPhotoPath } 这个地方就是从数据中取出来的相对路径,可能有时候还要单独处理一下。

4.至此我们就可以访问d:盘 或者c:上的某个文件件了;
我们可以访问多个盘,在刚才的基础上要加上<Context docBase="E:/apps/realestate/images" path="/realestate/img" />,但是要保证写的路径真实存在。否则tomcat会报错哦!

注意:实际项目中并非这个样子,大家只是体会一下过程,访问某个磁盘上的图片。
真实的配置,这里我也不太懂。不过各自调试程序时,假设其在本工程的一个子目录下就OK了;真部署时,会通过junction的软链接,将该子目录挂接映射到一个单独的真实磁盘(阵列)上。
1. 我们的最终架构是:
Apache Web Server-------->(1个或多个负载均衡的)Tomcat J2EE Server ----->JSP/SSH(Struts/Spring/Hibernate)等动态数据为主
                |-------->/images/tenement等静态图片
 
(1) Apache和Tomcat上都可以配置虚拟主机, Apache负责监听标准的80端口,并映射对应多个域名;
(2) 动态页面的访问,Apache通过AJP协议转发给Tomcat;
(3) 静态的图片,Apache配置成优先访问本地磁盘文件,因为Apache的静态数据效率全行业排名第一;

你可能感兴趣的:(tomcat,访问某个磁盘上的图片)