2010-08-29 136 views
5

我正在在Eclipse(JSP)的Web应用程序,并使用Tomcat作为服务器(集成到Eclipse)。我必须创建下面的对象并指定配置文件的路径。这绝对路径工作很好:绝对相对路径(Eclipse中,JSP)

Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl"); 

但是我想知道为什么我不能使用相对路径。是否应该是"config/sdb.ttl"(如果项目名称是根)?但它不能以这种方式找到它(NotFoundException)。

回答

5

相对磁盘文件系统的路径是相对于这取决于你如何启动该应用程序(在Eclipse这将是该项目的文件夹,在命令控制台这将是当前打开的文件夹中的当前工作目录,在Tomcat管理/服务它将是Tomacat/bin文件夹等)。你无法从Java代码中控制它,所以忘掉它吧。

在JSP/Servlet中,您可以使用ServletContext#getRealPath()将相对Web内容路径(其根目录位于公共web内容,在您的案例中为/WebContent文件夹)转换为绝对磁盘文件系统路径。所以:

String relativeWebPath = "/config/sdb.ttl"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Store store = StoreFactory.create(absoluteDiskPath); 
// ... 

ServletContext是由继承getServletContext()方法的servlet可用。

+0

我创造在位于src文件夹一类这个存储对象。由于这不是JSP/Servlet,我不能使用getServletContext()方法。在JSP中,我实例化这个类,并在其构造器中生成Store对象。任何其他解决办法? – Aliens 2010-08-29 21:36:19

+0

一个JSP文件是语义上的[错了地方(http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files)作业。无论如何,因为JSP文件被编译成一个servlet,它可以访问到''用的getServletContext ServletContext'()'为好。你也可以使用隐含的变量'application'来引用它。即'application.getRealPath(relativeWebPath)'。顺便说一下,你是否在说“我不能使用这个方法”之前尝试**? – BalusC 2010-08-29 22:04:49

+0

嘿。当然,我尝试了它,但它仍然无法正常工作。我不知道你是否了解我。我没有在JSP中调用getServletContext()。我想在/ src中的.java文件中调用它,但我不能这么做。这个.java文件是一个类。并且该类在JSP中实例化。 – Aliens 2010-08-29 22:29:12