Java ServletContext.getRealPath(“图片”)返回tmp目录??JBoss

Java ServletContext.getRealPath(“图片”)返回tmp目录??JBoss,java,servlets,jboss,seam,Java,Servlets,Jboss,Seam,我用seamgen制作了一个应用程序(也用gui),并在应用程序的根目录中创建了一个文件夹“pictures”,用于存储个人资料图像 当我计算ServletContext.getRealPath(“图片”)时,它返回一个临时目录 D:\Dizertatie\Java\jboss-5.1.0.GA\server\default\tmp\5c4o02s-hw5k2v-gj5pc3oq-1-gj632njx-al\RaceCatalog.war\pictures\1295555156562.jpg 我

我用seamgen制作了一个应用程序(也用gui),并在应用程序的根目录中创建了一个文件夹“pictures”,用于存储个人资料图像

当我计算ServletContext.getRealPath(“图片”)时,它返回一个临时目录

D:\Dizertatie\Java\jboss-5.1.0.GA\server\default\tmp\5c4o02s-hw5k2v-gj5pc3oq-1-gj632njx-al\RaceCatalog.war\pictures\1295555156562.jpg

我也尝试了生成的img文件夹,它仍然是一样的

如何获得相对路径


我想用是的。这种行为是正确的。有关getRealPath()方法应该做什么的描述,请参见javadoc:


我怀疑您正在寻找一种不同的方法,但您没有充分描述希望获得哪种路径。

正如您在评论中提到的,您需要这种方法来渲染图像。为此目的使用这种方法是错误的

默认情况下使用应用程序上下文根的相对路径。不需要额外的步骤

至于JBoss在提取war文件时的行为——这似乎有些奇怪,但它并没有违反规范。它可以随意提取未爆炸的战争文件


更新:如果这是关于一场爆发的战争(由您发起),那么请随意发射一个bug。但这没什么大不了的——你不应该在webapp中存储图片。配置外部位置并将其保存在那里。否则,重新部署时可能会丢失图片。

我想使用抱歉,但我认为这不正确。它应该返回他的“picture”dir所在的实际路径——在他的webapp中,不是一些随机生成的temp folderI忘记提到我从seam组件获取servlet上下文,如下所示:ServletContext ctx=(ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();也许它会产生某种影响……我认为你没有理解这种方法的意义。它应该返回所讨论的路径的确切位置。不可能将路径返回到war归档中,因此API有一个bail子句。您可以返回null,但它仍然是正确的。由于大多数应用程序服务器会由于各种性能原因而导致部署的应用程序崩溃,因此返回到该位置的路径代表了实际情况,比null要好得多。我经常看到JBoss对规范的轻率解释,所以我现在看一看servlet规范。与我的想法相反,它没有指定提取war文件的确切行为。虽然使用临时目录听起来很奇怪,而不是tomcat更符合逻辑的行为,但严格来说它并不违反规范(因此我取消了我的否决票)。然而,OP似乎要问的是另一件事,因此我添加了一个新的答案;也许它会产生某种影响。您的应用程序是按分解的方式部署的还是按分解的方式部署的?是的,它是用seam gens生成的ant脚本分解的(“分解”目标)+1“不需要额外的步骤”。OP使问题变得过于复杂。对于显示图像,一切正常,但如何将图像保存为tomcat?(这是一个爆炸式的档案)谢谢。这是我的学校项目,我想走捷径:)。因此,我将它存储在web.xml中作为上下文参数索引-上下文参数是一个不错的选择。不管是否是学校项目,都应该做好。实际上,使用上下文参数执行此操作并不需要花费太多精力:)