IE Edge浏览器将URL参数从&转换为&

问题描述 投票:0回答:1

在我的应用程序中,当在JSP中使用url标记时,正在使用JSTL标记库1.1版,如下所示。

<c:url var="Url" value="/testUrl">
  <c:param name="action" value="login"/>
  <c:param name="name" value="test"/>
</c:url>

在旧版本的Internet Explorer中,它转换为:http://applicationurl.com/testUrl?action=login&name=test

虽然在Edge浏览器中,它转换为:

http://applicationurl.com/testUrl?action=login&amp;name=test

因此&转换为“ &amp;”。现在,当控制器尝试使用下面的代码获取参数名称时。

private void outputRequestParams(HttpServletRequest request) {
    Enumeration requestParameter = request.getParameterNames();
    while (requestParamNames.hasMoreElements()) {
        String  paramName  = (String)requestParameter.nextElement();
        System.out.println("Parameter Name: " + paramName);
}

上面的代码作为参数名称返回下面。

[使用旧的Internet Explorer时:参数名称:名称

[使用Edge浏览器时:参数名称:放大器名称

由于在代码中有很多地方期望参数名称为name,所以在获取amp; name时失败。

我们正在使用servlet api 5.5.23 jar。

问题:

  1. 为什么&仅在使用c:url标记形成url时才附加?当我们直接使用字符串形成url时,效果很好。
  2. 是否由于任何jar版本不匹配而发生这种情况。
  3. 我们可以在应用程序中对上述问题进行何种通用修复,以便它可以在Edge浏览器上开始工作,并且可以避免在多个位置进行更改。

请让我知道是否需要更多信息。预先感谢。

jsp servlets cross-browser jstl tomcat8
1个回答
0
投票

目前看来,唯一的解决方案是将&替换为&并创建URL。这项更改对我来说是有效的,因为我已经采用了从所有位置调用的通用方法。如果有人有更好的解决方案,请提出。

© www.soinside.com 2019 - 2024. All rights reserved.