【问题标题】:Javascript String.replace(/\$/,str) works weirdly in jsp fileJavascript String.replace(/\$/,str) 在 jsp 文件中的工作很奇怪
【发布时间】:2010-10-03 02:49:18
【问题描述】:

为简单起见,我有以下名为 test.jsp 的文件:

<script language="javascript">
    alert("a$b".replace(/\$/g,"k"));
</script>

我将此文件放在本地服务器中,然后使用 firefox 显示它:http://localhost:8080/myproj/test.jsp。它工作正常,结果警报字符串是:

 akb

但是当我将此文件放在远程服务器并使用相同的 firefox 显示时,它的输出是:a$bk 这对我来说不正确。

然后我将 test.jsp 内容更改为:

<script language="javascript">
    alert("a$b".replace(/\\$/g,"k"));
</script>

注意这里我添加了两个斜杠而不是一个。在这种情况下,它适用于远程服务器,但不适用于本地服务器。

然后我将文件从test.jsp重命名为test.html,但是内容和我的第一种情况一样,即:

<script language="javascript">
    alert("a$b".replace(/\$/g,"k"));
</script>

通过使用相同的 firefox,它在两个服务器上都可以正常工作。

但我的文件需要在 jsp 文件中嵌入 javascript。我的文件不允许使用 .html 后缀。在这种情况下我应该怎么写一个可移植的javascript?

我的本​​地服务器使用tomcat-5.5.26;远程服务器使用 tomcat-5.0.28。 Firefox 版本是 3.0.4。

【问题讨论】:

    标签: javascript regex jsp tomcat el


    【解决方案1】:

    彼得明白了,西蒙的建议也是个好主意。

    此外,您不需要使用正则表达式来进行简单的静态字符串替换。 JS 成语是:

    alert('a$b'.split('$').join('k'));
    

    【讨论】:

    • 对我来说另一种丑陋的方式:alert("a$b".replace(/\/g,"k"))
    【解决方案2】:

    JSP 2.0 规范说:“当禁用 EL 评估时,\$ 将不会被识别为引号,而当启用 EL 评估时,\$ 将被识别为 $ 的引号。” (JSP.3.3.2)

    是否启用或禁用 EL 评估取决于很多因素:

    • 如果应用服务器支持 JSP 2.0(Tomcat 5.0 及更高版本支持)
    • web.xml 描述符文件...如果声明(例如不使用 web-app_2_4.xsd 架构)它使用 Servet 2.3 规范或更早版本,则默认禁用 EL。
    • JSP 配置
    • 页面指令 isELIgnored (&lt;%@ page isELIgnored=”true|false” %&gt;)

    (有关详细信息,请参阅JSP Spec 2.0,JSP.3.3.2 部分)

    检查 EL 是否启用/禁用的简单方法是在您的页面上使用 ${request}。如果您在输出中看到“${request}”,则 EL 被禁用。如果您看到不同的内容,则表示已启用。

    如果您还在页面上使用 EL,您可能需要将 \$(一个反斜杠)更改为 \\$(两个反斜杠)以在输出中获得 \$

    如果您看到本地/远程服务器之间的差异,则它们与 EL 相关的设置可能不同。您能做的最好的事情是 1) 使用 JSP 2.0、Servlet 2.4 或更高版本(启用 EL),2) 在机器上运行相同的 Web 服务器。 (顺便说一句,我建议您至少将 Tomcat 5.0 升级到 5.5)。

    【讨论】:

      【解决方案3】:

      也许您可以将 javascript 代码移动到单独的 .js 文件中?这将防止代码被解释为jsp。

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多