猿问

如何查找基于Servlet的应用程序的工作文件夹以加载资源

我编写了一个Java Servlet,希望将其安装在不同服务器上的许多Tomcat实例上。Servlet使用一些静态文件,这些文件与WEB-INF下的war文件一起打包。这是典型安装中的目录结构:


- tomcat

-- webapps

--- myapp

---- index.html

---- WEB-INF

----- web.xml

----- classes

------ src

------- .....

----- MY_STATIC_FOLDER

------ file1

------ file2

------ file3

如何知道MY_STATIC_FOLDER的绝对路径,以便可以读取静态文件?


我不能依靠“当前文件夹”(我在新File(“。”)中得到的东西),因为它取决于从哪个Tomcat服务器启动,在每个安装中都不同!


哔哔one
浏览 427回答 3
3回答

泛舟湖上清波郎朗

您可以ServletContext#getRealPath()用来将相对Web内容路径转换为绝对磁盘文件系统路径。String relativeWebPath = "/WEB-INF/static/file1.ext";String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);File file = new File(absoluteDiskPath);InputStream input = new FileInputStream(file);// ...但是,如果你的唯一目的是为了得到一个InputStream出来,更好的使用ServletContext#getResourceAsStream(),而不是作为getRealPath()可能返回null每当战争不是扩大本地磁盘上的文件系统(Tomcat的默认完成,但可配置,不这样做!):String relativeWebPath = "/WEB-INF/static/file1.ext";InputStream input = getServletContext().getResourceAsStream(relativeWebPath);// ...毕竟,这比该java.io.File方法更健壮。

慕无忌1623718

你可以试试这个String relativeWebPath = "WEB-INF/static/file1.ext";InputStream input = getServletContext().getResourceAsStream(relativeWebPath);

慕容708150

我更喜欢使用getResourceaAsStream选项基于父目录加载资源。getClass().getClassLoader().getResourceAsStream("/MY_STATIC_FOLDER/file1");
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答