快速总结
我正在处理一个无法复制的问题。因此,我正在根据跟踪代码和查看服务器日志来调试它。失败点是对一个 servlet 的请求带有另一个 servlet 的参数。这是一个短暂的情况,经过 2-3 次尝试后问题就消失了。
详细说明
这里有三个基本的 URL,第一个是形状
http://example.com/Apps/x9/HowdyServlet?argument=foo
第二个是
http://example.com/Apps/x9/OtherServlet?argument=bar
第三个是
http://example.com/Apps/servlet/MainServlet?thing=1
然后我们有一个 div,它是第二页导航栏的一部分,如下所示:
<div id="FrobberNav"
title="Navigate to Frobber"
class="top-navigation-button "
onmouseover="x9.topNav.mouseover(this);"
onmouseout="x9.topNav.mouseout(this);"
onclick="location.href='../servlet/MainServlet?thing=1'"
style="float:right">
<a id="FrobberNavLink"
name="FrobberNavLink"
href="#"
onclick="return false;"
title="Navigate to Frobber">Frobber</a>
</div>
鼠标悬停的相关 JavaScript 的一点点是
x9.topNav.mouseover = function(element) {
var mouseoverClasses = element.className + " top-navigation-button-hover";
// update element classes
element.className = mouseoverClasses;
};
x9.topNav.mouseout = function (element) {
removeClass(element, 'top-navigation-button-hover');
};
错误是,有时当有人点击时,div
他们不会转到 URL #3,而是被发送到
http://example.com/Apps/x9/HowdyServlet?thing=1
这里要注意的重要一点是,这是一个“不可能”的 URL,因为搜索参数和 servlet 已经混淆了。
这是一个 Java 应用程序,大部分情况下通过 Spring Web Flow 驱动的 RichFaces 呈现页面。我们没有太多花哨的 JavaScript 可以在我背后重写那个页面。
这是我咬牙切齿的地方
我无法在我的本地或我们的 DEV 或 UAT 环境中重现此错误。我搜索了生产日志,每隔几天就会看到这种情况发生几次。生产在 iPlanet 服务器上运行,这些服务器提供静态内容,然后将应用程序请求传回一些 Weblogic 服务器。我可以在 iplanet 日志中看到损坏的请求,所以我知道在传入路径上不是某些 URL 重写出错。
我有用户/测试人员的证词,证明这是他们在出现问题时试图按下的按钮。除了我可以识别的 Java 代码之外,也没有其他地方可以生成此特定链接。
几乎感觉location.href
第一页的价值在某种程度上挥之不去,并被用来构建新链接。有没有这样的比赛条件?
我的测试人员可以确认在 IE 下会发生这种情况,而其他人则说在 Chrome 和 Firefox 下都会发生这种情况。