Tomcat 8 关于 getRealPath 的一个问题

Tomcat 8 关于 getRealPath 的一个问题

奢华的一滴泪 发布于 2021-11-27 字数 881 浏览 830 回复 14

请看下面这行代码:

String path = getServletContext().getRealPath("/test");

使用 Tomcat 版本是 8.0 RC5

如果 Web 根路径存在 test 这样的文件或者文件夹,那么 path 可以得到这个 test 对应的全路径。但如果 test 不存在,那么上面代码得到的 path 值为 null。

而在 Tomcat 5、6、7 上,不管 test 是否存在,得到的 path 都是 /test 这个 Web 路径对应文件系统的全路径。

不晓得 Tomcat 8 上怎么会有这样的改动,已经向官方提交了这个问题 (Bug 55837)。

最要命的是,OSChina 的 URLMappingFilter 严重依赖 getRealPath 这个方法。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

想挽留 2021-12-01 14 楼

我用的Tomcat 8.0.18,问题依然存在,

     String path = req.getRealPath(File.separator + "upload");

    String testpath = req.getSession().getServletContext().getRealPath(File.separator);

都是null,郁闷中。

www.dojav.com我的技术站。

爱的故事 2021-12-01 13 楼

哈哈。

秉烛思 2021-12-01 12 楼

没人说要升级到 Tomcat 8 啊:)

等风来 2021-12-01 11 楼

该问题已经得到 Tomcat 项目负责人的确认,并且将在 8.0 RC6 版本中修复

请看:https://issues.apache.org/bugzilla/show_bug.cgi?id=55837

裸钻 2021-12-01 10 楼

正式版还没发布了,不想换,只不过我在本机开发环境喜欢用最新的,发现没法用

画骨成沙 2021-12-01 9 楼

@红薯 我都是直接用 ("/"),里面只有这个

2021-12-01 8 楼

回复
我们要依赖 getRealPath 返回的值来确定目录是否存在

奢望 2021-12-01 7 楼

红薯这是准备要替换?

尐偏执 2021-12-01 6 楼

谁跟你说 tomcat 8 有性能提升? tomcat 8 主要是实现新的 J2EE 规范

看透却不说透 2021-12-01 5 楼

那就不升级了,呵呵

无边思念无边月 2021-12-01 4 楼

回复
servlet3.1的异步特性,红薯在哪里用了?

眼眸 2021-11-30 3 楼

回复
没用:)

冷默言语 2021-11-29 2 楼

我还停留在tomcat6.0.32

睫毛上残留的泪 2021-11-29 1 楼

该问题已经得到 Tomcat 项目负责人的确认,并且将在 8.0 RC6 版本中修复

请看:https://issues.apache.org/bugzilla/show_bug.cgi?id=55837