Javascript String.replace(/ \ $ /,str)在jsp文件中很奇怪

时间:2009-01-23 10:42:00

标签: javascript regex jsp tomcat el

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

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

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

 akb

但是当我把这个文件放在远程服务器上并使用相同的firefox来显示时,它输出的是:$ 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。

3 个答案:

答案 0 :(得分:8)

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配置&lt; el-ignored&gt;
  • Page指令isELIgnored(<%@ page isELIgnored=”true|false” %>

(有关详细信息,请参阅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)。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

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