【问题标题】:Add virtual folder to web dynamic project将虚拟文件夹添加到 Web 动态项目
【发布时间】:2012-09-04 23:38:08
【问题描述】:

现在我正在尝试在 Eclipse Juno 和 Tomcat 7 上完成一个项目,该项目需要一个“虚拟文件夹”来保存多媒体文件(如图像、其他子页面等)。我已经有一些方法可以在基于 URI 的语法中给出文件路径(假设我想访问 /Content/Image 中的图像)并且我想将该 URI 映射到 C:\Users\MyUser\Content\image(我我知道我正在将项目绑定到 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 中工作?

PS:我问这个是因为在我的项目中的一个方法中,我使用 getLoader 方法返回 InputStream(java.io InputStream NOT Corba),它返回空值(这意味着它没有找到它)。

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

【问题讨论】:

  • 如果您需要以编程方式获取内容,对我来说将其存储在 WEB-INF 文件夹中似乎更合乎逻辑。
  • 确实如此,但我仍然在某处读到,将内容存储在 WEB-INF 上并不是一个好方法,因为这需要 tomcat 来爆炸 webapp,而且这不是很可靠。在我意识到的测试中,试图访问 WEB-INF 上的东西,由于某种原因我无法检索 JPG 文件(但我可以检索 .properties 文件......)
  • 这可能是相关的:stackoverflow.com/questions/5915425/…
  • 非常感谢您分享了这个问题!似乎那个 classLoader 无法检索 WEB-INF 之外的文件,这可能是造成这种混乱的原因......我今天将处理这个问题,如果我能找到解决方案,我将发布一个详细的问题/解决方案帖子来描述它

标签: java eclipse tomcat contextpath


【解决方案1】:

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

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

PS: Ty wds 用于指出 ServletContext

【讨论】:

    【解决方案2】:

    我完成了 harkiran 的解决方案,但它不是很好的解决方案。

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

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

    workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/

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

    之后你需要再做一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 2013-01-12
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 2014-10-17
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多