如何读取并显示服务器上不在webapp目录上的图片?

应用场景是:采用java的应用服务器,部署的时候通常是部署一个ear or war, 系统中如果需要涉及文件上传的问题,那么这个上传得文件如果保存在webapp目录中,如果你重新部署的时候会被appsever删除掉,所以就考虑在保存在其他目录上,这样不管如何重新部署app,这些文件和图片都不会为appserver删除,那么如何读出这么图片并把他们显示的网页上面?

或者其他兄弟有更好的解决方法,谢谢!

操作系统?

可否把另一个存储图片的路径也设成一个内部的web应用(可目前的应用分开),保证能http访问的就可以,呵呵,个人想法.

os: linux

妙,实在是妙

是个不错的方案,一个要注意的问题是专门放图片的这个应用,要重点管理,如果不小心redeploy,还是会被appserver删除

我知道一种在Tomcat中的一种方法。

server.xml里面有如下行。

<Context path="/myweb" docBase="/home/webapp" crossContext="true" />
<Context path="" docBase="/wwwroot" crossContext="true"/>

其中,/home/webapp是动态内容(Web应用程序)目录。
/wwwroot是静态图片和文件的目录。

在/wwwroot/images目录下,有很多图片文件,比如Logo.gif。

在/home/webapp/下有一个home.html.
<img src="/images/Logo.gif"/>

就可以显示出/wwwroot/images/Logo.gif.

但是做项目的时候,大家都这么用。
我们的开发环境是Tomcat,发布环境是WebLogic。
显然,WebLogic也支持这种配置方式。应该是Web Server的一种普遍支持。

具体原理我还不是很清楚。
也没有找到Tomcat文档中相应的部分。敬请指点。

(我上面发的贴子不能正确显示,请删除。这里再发一遍)

我知道一种在Tomcat中的一种方法。

server.xml里面有如下行。


<Context path="/myweb" docBase="/webapp" crossContext="true"/>
<Context path="" docBase="/wwwroot" crossContext="true" />

其中,/webapp是动态内容(Web应用程序)目录。
/wwwroot是静态图片和文件的目录。
假设有/wwwroot/images/Logo.gif文件。

在/webapp/home.html文件中,包括如下代码。


<img src="/images/Logo.gif"/>

用户访问/webapp/home.html的时候,浏览器可以正确显示出/wwwroot/images/Logo.gif.

做项目的时候,大家都这么用。
我们的开发环境是Tomcat,发布环境是WebLogic。
显然,WebLogic也支持这种配置方式。应该是Web Server的一种普遍支持。

但具体原理我还不是很清楚。
也没有找到Tomcat文档中相应的部分。敬请指点。

buaawhl兄,你这其实也是把图片和应用分开在不同的webpp中,

<img src="/images/Logo.gif"/>其实访问的是<Context path="" docBase="/wwwroot" crossContext="true" />应用下的/images/目录下的这个文件。

假设有两个app,一个是rootapp(就是path=""这个), webapp(path="/webapp")那么访问的时候

http://ip/ 就是访问到rootapp
http://ip/webapp/ 才是访问webapp, 需要另外的/webapp/路径,问题来了,有的appserver可以把某一个app设定为默认的,就是把/webapp去掉,这个时候用这个方法就不行了?

btw, 你是在xmu里面的ehi?

自己写个servlet,可以用,但总是觉得不理想

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream out = null;
response.setContentType("image/jpeg");
out = response.getOutputStream();

ImageIcon icon = new ImageIcon("d:\\image.jpg");

int width = icon.getIconWidth();
int height= icon.getIconHeight();
Image inImage = icon.getImage();
BufferedImage outImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = outImage.createGraphics();
AffineTransform tx = new AffineTransform();
g2d.drawImage(inImage, tx, null);
g2d.dispose();

JPEGImageEncoder jenc = JPEGCodec.createJPEGEncoder(out);
jenc.encode(outImage);
}

>部署的时候通常是部署一个ear or war, 系统中如果需要涉及文件上传的>问题,那么这个上传得文件如果保存在webapp目录中,如果你重新部署的>时候会被appsever删除掉

如果你需要将文件保存在webapp目录中也是可以的,就不要以war包部署,在JBoss中是建立一个目录名为xxx.war,这个目录下就是你的webapp完整目录文件。


iter.
没错。我是在xmu的ehi。:-) and u?

多谢解答。
你是说,这是两个Web Context之间的互访问?
和"crossContex"属性有关吗?


banq 兄,在jboss下这个方法很巧妙,其实就是自己建个目录来"骗"jboss, 其实以war部署的话,jboss好像也是自己建个xxx,war目录
我用的是sun1 appserver, 也有类是的目录,里面还有一些ejb目录,webapp目录,这样重新部署在sun1好像比较麻烦一点, 而且需要重起sun1

buaawhl , crossContex好像是用来互访同一个server上的context, 和这个没有关系

BTW:one of my friends has been served in ehi, i have been to u company. i am also in xm


iter.i tried to send a mail to you. but failed.
if u like, please contact my msn whlhuzhao@hotmail.com.