我写了一些代码来读取Java Servlet类中的文件。 (我在Windows上使用Netbeans和Tomcat服务器)。但是,我的servlet找不到该文件!
经过多次挖掘,我发现我必须将我想要读取的文件放在Tomcat / bin文件夹中。这非常令人惊讶。如何获取Webapps /文件夹的路径?我们假设我的网站项目名为“Web1”。
基本上我正在做的是我正在尝试读取我的.xsl文件,以便将我的DOM文档转换为HTML。起初我尝试将这个.xsl文件放在任何地方(与我的index.jsp处于同一级别,与我的servlet类文件在同一目录中等等......但根本没有工作)
另外,当我完成transform()时,我的HTML文件也会进入Tomcat / bin文件夹〜!
答案 0 :(得分:5)
你能使用javax.servlet.ServletContext.getRealPath(String path)吗?
返回包含给定虚拟路径的实际路径的String。例如,路径“/index.html”返回服务器文件系统上的绝对文件路径,将由“http://host/contextPath/index.html”请求提供服务,其中contextPath是此ServletContext的上下文路径。 返回的实际路径将采用适合运行servlet容器的计算机和操作系统的形式,包括正确的路径分隔符。如果servlet容器由于任何原因(例如,当从.war存档中提供内容时)无法将虚拟路径转换为实际路径,则此方法返回null。
答案 1 :(得分:0)
你在哪里消费XSL?如果从您的Java代码中将文件放入src / java / resources中,那么当WAR汇编为/WEB-INF/classes/foo.xsl时,它将最终位于类路径的顶部。然后你可以使用Class#getResource(“foo.xsl”)甚至更好,如果你使用DOM4J或等效的方法有加载文件的方法。 现在,如果是你在客户端执行转换的JavaScript,那就是另一个故事
答案 2 :(得分:0)
这样的事情对你来说可能更方便:
java.net.URL url = ClassLoader.getSystemResource(file_name);
try {
InputStream is = url.openStream());
//Read the file and do stuff
} catch(IOException e) {
System.err.println("Error: could not load the file");
}
这将允许您为类路径中的文件获取InputStream
(在您的情况下,在webapps文件夹中的某些内容)。至于写作结果,我不确定。