使用相对路径设置location.href有时会导致路径不正确

时间:2016-11-29 20:08:01

标签: javascript java servlets weblogic iplanet

快速摘要

我正在处理一个我无法复制的生产中出现的问题。因此,我基于跟踪代码并查看服务器日志来调试此问题。失败的地方是有一个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下发生的。

0 个答案:

没有答案