6

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

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

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

4

2 回答 2

6

相对磁盘文件系统路径相对于当前工作目录,这取决于您启动应用程序的方式(在 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可通过继承的方法在 servlet 中使用getServletContext()

于 2010-08-29T20:44:08.270 回答
0

正确/标准/兼容的方式是使用http://adderpit.com/jdk/j2eedocs/api/javax/servlet/ServletContext.html#getResourceAsStream(java.lang.String)

喜欢

servletContext.getResourceAsStream("config/sdb.ttl");
于 2010-08-30T19:10:47.943 回答