我正在Eclipse(JSP)中制作一个Web应用程序,并将Tomcat用作服务器(已集成到Eclipse中)。我必须在下面创建对象并指定配置文件的路径。这个绝对路径非常有效:
Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl");
但是我想知道为什么我不能使用相对路径。是否"config/sdb.ttl"正确(如果项目名称是根)?但是它不能以这种方式定位(NotFoundException)。
"config/sdb.ttl"
NotFoundException
相对磁盘文件系统路径是相对于当前工作目录的,这取决于您启动应用程序的方式(在Eclipse中将是项目文件夹,在Command Console中将是当前打开的文件夹,在Tomcat管理器/服务中将是的Tomacat/bin文件夹,等等)。您无法从Java代码内部对此进行控制,所以就算了吧。
Tomacat/bin
在JSP / Servlet中,您可以用于ServletContext#getRealPath()将相对的Web内容路径(其根在公共Web内容中,在您的情况下为/WebContent文件夹)转换为绝对磁盘文件系统路径。所以:
ServletContext#getRealPath()
/WebContent
String relativeWebPath = "/config/sdb.ttl"; String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); Store store = StoreFactory.create(absoluteDiskPath); // ...
该ServletContext是由继承的Servlet可用getServletContext()的方法。
ServletContext
getServletContext()