将虚拟文件夹添加到Web动态项目

时间:2012-09-12 00:55:56

标签: java eclipse tomcat contextpath

现在我正在尝试在Eclipse Juno和Tomcat 7上完成一个项目,该项目需要一个“虚拟文件夹”来保存多媒体文件(如图像,其他子页面等)。我已经有一些方法在基于URI的语法中给出文件路径(假设我想访问/ Content / Image中的图像),我想将该URI映射到C:\ Users \ MyUser \ Content \ image(I我知道我正在将项目绑定到Windows系统,但我将在本期后面解决这个问题。)

目前我的项目名为pj,Eclipse在eclipse的tomcat实例中创建了一个名为pj的上下文(这很有意义)。当我用

测试我的项目时
> http://localhost:8080/pj

它工作正常(并且应该如此)。

但是这里有一个问题:到目前为止我还没有找到一种方法在tomcat中创建一个URI来实际转到Content / Image路径来获取要添加到我的页面的内容(读取某些不健康的内容)在WEB-INF文件夹上的内容,所以我试图以正确的方式实现它)。也读到了为了实现这个目标的某个地方,我必须在上下文中做这样的事情:

<context docbase="d:/images" path="/Content/Images"></context>

同时在那里读到,在tomcat中,为了解析URI,你必须使用上下文来实现这个目标(在URI的含义和它在文件系统中的位置之间建立一个桥梁)。 仍然,从tomcat 4(如果没有记错)它不应该围绕server.xml,所以在另一个尝试使这一点正确,我尝试实际在context.xml中的META-INF中添加一个上下文与显示的代码之前。但是这里有另一个问题!似乎添加路径标记会使tomcat变得疯狂,如下所述:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

所以我真的在这里绑定......我想问的是:

  1. 在Web项目中实际添加外部文件夹以获取多媒体内容的最佳方式是什么?
  2. 如何让它在Eclipse中运行?
  3. PS:我问的是因为在我的项目中的一个方法中,我使用getLoader方法返回InputStream(java.io InputStream NOT Corba)并返回nulls(这意味着它找不到它)。 / p>

    编辑:试图通过手工插入conext实际上摆弄server.xml但是没有用,插入相对URI在服务器上不起作用(本地:8080 / Content / Image里面有有效文件)或者进入我的主项目并且getstream也不起作用

2 个答案:

答案 0 :(得分:2)

经过一番摆弄,调整等等后,我想出了解决这种情况的方法。就像我说的那样,实际上有一个外部文件夹可以保存所有的多媒体和/或页面。这个解决方案的一个参考是:http://harkiran-howtos.blogspot.pt/2009/08/map-external-directory-into-your.html

仍然,出于某种原因,这不太可能使其在Eclipse内部工作(或者我已经失败并且无法使其工作)。但是有一个替代解决方案。在Web应用程序中实际拥有一个用于此目的的文件夹也是可行的,但是在WEB-INF和META-INF文件夹外面。换句话说,一个位于Web应用程序ROOT中的文件夹。要访问该文件夹中的那些文件,您可以使用名为ServletContext的文件。该上下文实际上包含了对Web应用程序的文件夹结构的所有可能引用。要使用上下文提供访问这些文件,您必须使用Servlet上下文中的getResourceAsStream(或者如果必要则使用getRealPath和/或您可以保证Web应用程序在Tomcat内部展开)。换句话说,要访问Web应用程序内部但在WEB-INF和META-INF之外的文件夹,您必须使用ServletContext及其给定的方法来获取文件/流。

PS:Ty wds指出ServletContext

答案 1 :(得分:0)

我让harkiran的解决方案有效,但这不是一个很好的解决方案。

人们不鼓励使用getRealPath。出于多种原因,映射外部文件夹是件好事。

但要在Eclipse中执行此操作,您需要转到部署文件夹。 就我而言,它是Eclipse工作区内的隐藏文件夹。

  

工作区/ .metadata / .plugins / org.eclipse.wst.server.core / TMP0 /

在该文件夹中,你应该从harkiran的解决方案中制作目录结构和文件。我一直工作,直到您在Eclipse中删除并重新创建服务器。

之后你需要重新制作它。