【问题标题】:JSP - Date formatting and Google cacheJSP - 日期格式和谷歌缓存
【发布时间】:2017-02-11 04:06:09
【问题描述】:

我想在我的 JSP 页面上显示一个格式化的日期,所以我使用:

<fmt:formatDate pattern="MMM d" value="${myEvent.date}"/>

完美运行。它在页面上显示为

Nov 28

但是,当它被谷歌缓存时,发生了一件奇怪的事情——缓存页面上的日期显示如下:

2016-11-28 20:00:00.0

谁能解释一下?格式化不应该发生在服务器上吗?我的应用程序服务器 (Tomcat) 不是仅将 HTML 发送到页面吗? Google 一开始怎么知道这实际上是 Java 日期?

澄清一下,为了获得页面的缓存版本,我在 Google 上执行搜索,结果中显示我的页面,然后单击向下箭头并获得我页面的缓存版本。

【问题讨论】:

  • 您是对的:Google 应该只能访问由 JSP/Servlet 输出的 HTML 标记 - 没有其他方法。所以它引出了一个问题:谷歌缓存的价值是从哪里来的?您应该查看源代码,并查看缓存页面中的标记真实情况,与实时版本进行比较。也不排除明显的可能性:页面的缓存版本可能在您实施格式化之前创建,这只是 Google 缓存代码中的一个错误(Google 仍然由人工操作他们确实会犯错误)。
  • 比较谷歌的缓存版本和waybackmachine.org的版本
  • 恐怕你很难得到真正的答案,只有随机猜测,除非有人为谷歌工作并了解他们的内部算法,准备冒险放弃他的工作只是为了回答你的问题可能会有所帮助。我的随机猜测是,负责存档页面的机器人足够聪明,可以识别不完整的日期并将其替换为完整的日期,以便在我们阅读时保持页面信息的一致性。事实上,假设您在 2 年内访问了您的缓存页面,阅读 11 月 28 日将是错误信息,而 2016-11-28 20:00:00.0 将是正确的。
  • 例如,数据标注器可以理解日期,那么为什么不负责归档页面的机器人support.google.com/webmasters/answer/2856609?hl=en
  • 显示更多 HTML 和 jsp 代码,以便了解您在哪些标签中准确填写了日期。提供正确显示日期的代码和不正确显示日期的代码

标签: java jsp caching


【解决方案1】:

显然,当请求没有“Accept-Language”HTTP 标头的 JSP 时,JSTL formatDate 标记不会格式化日期,而是返回 Date 对象的 toString() 的结果。

您可以通过使用cUrl 来获取页面源(而不是在 Chrome 中查看页面源)来验证这一点。

底线:如果您使用 JSTL formatDate 标记并且希望在 Google 的缓存中格式化您的日期,您应该明确设置语言环境。例如:

<fmt:setLocale value="en_US" />

我希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多