为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2019-11-04 14:33:43
我编写了一个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服务器启动,在每个安装中都不同!
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超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方法更健壮。


查看完整回答
反对 回复 2019-11-04
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

你可以试试这个


String relativeWebPath = "WEB-INF/static/file1.ext";


InputStream input = getServletContext().getResourceAsStream(relativeWebPath);


查看完整回答
反对 回复 2019-11-04
?
慕容708150

TA贡献1831条经验 获得超4个赞

我更喜欢使用getResourceaAsStream选项基于父目录加载资源。


getClass().getClassLoader().getResourceAsStream("/MY_STATIC_FOLDER/file1");


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 426 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信