Websphere Liberty:WAR中文件的URL没有正确的上次修改时间戳

时间:2017-05-10 20:04:07

标签: websphere websphere-liberty

我在Liberty 16.0.0.4中运行的(解压缩的)WAR中获取了JAR内部文件的URL。代码大致是:

URL url = servletContext.getResource(somePath);
URLConnection connection = url.openConnection();
long lastModified = connection.getLastModified();

网址格式为

"wsjar:file:/{path_to_WAR}/My.war/WEB-INF/lib/someLIB.jar!/META-INF/resources/foo/bar.txt"

我正在寻找文件的时间戳,因为它用于生成etags,缓存控制等。相反,我得到了someLIB.jar的时间戳。无论是在开发中的eclipse发布期间,还是在我们的自动构建过程中,jar的时间戳都毫无意义且不断变化。

这不是一个错误吗?有没有解决方法?

1 个答案:

答案 0 :(得分:1)

wsjar协议尝试与jar协议具有相同的用户可见行为。唯一的预期差异是允许更好地控制缓存和Windows文件共享锁。 jar协议返回JAR的时间戳,而不是条目,因此wsjar协议执行相同的操作,因此这不是错误。理论上,你可以尝试提交一份RFE来为非标准行为添加一个选项,但是不清楚它是否真的会被实现。

作为一种解决方法,您可以调整构建以在JAR中存储包含所有其他文件的时间戳的其他文件,或者您可以将ETag更改为使用弱验证而不是强验证。 (其他人可能会建议解析wsjar URL并自己打开JAR,但依赖其他JAR的语法则相当脆弱。)