我正在处理一个我无法复制的生产中出现的问题。因此,我基于跟踪代码并查看服务器日志来调试此问题。失败的地方是有一个servlet的请求,其中包含另一个servlet的参数。这是一个短暂的情况,经过2-3次尝试后问题就消失了。
这里有三个基本网址,第一个是形状
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
时,他们不会访问网址#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下发生的。