一尘不染

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

jsp

为简单起见,我有一个名为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,在两个服务器上都可以正常工作。

但是我的文件需要将javascript嵌入到jsp文件中。我的文件不允许使用.html后缀。在这种情况下,我该怎么做才能编写可移植的javascript?

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


阅读 230

收藏
2020-06-08

共1个答案

一尘不染

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(<%@ 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)。

2020-06-08