Javascript String.replace (/ \ $ /, str) funciona estranhamente no arquivo JSP
-
19-08-2019 - |
Pergunta
Para simplificar, eu tenho o seguinte arquivo chamado test.jsp:
<script language="javascript">
alert("a$b".replace(/\$/g,"k"));
</script>
Eu coloquei este arquivo no meu servidor local, em seguida, exibi-lo usando o firefox: http: // localhost: 8080 / myproj / test.jsp . Ele funciona bem, a corda de alerta resultado é:
akb
Mas quando eu colocar este arquivo em um servidor remoto e usar o mesmo firefox para exibição, que saída é:. Um $ bk que é incorreto para me
Então eu alterar o conteúdo test.jsp a:
<script language="javascript">
alert("a$b".replace(/\\$/g,"k"));
</script>
Note aqui eu adicionar duas barras em vez de um. Neste caso, ele funciona no servidor remoto, mas não em um local.
Então eu mudar o nome do arquivo a partir de test.jsp para test.html, mas o conteúdo é o mesmo que o meu primeiro caso, ou seja:.
<script language="javascript">
alert("a$b".replace(/\$/g,"k"));
</script>
Usando o mesmo firefox, ele funciona bem em ambos os servidores.
Mas as minhas necessidades de arquivo para incorporar o javascript no arquivo JSP. não é permitido usar o sufixo .html para o meu arquivo. O que devo fazer para escrever um javascript portátil neste cenário?
O meu servidor local utiliza tomcat-5.5.26; servidor remoto usa tomcat-5.0.28. Firefox versão é 3.0.4.
Solução
JSP 2.0 Spec diz: "Quando a avaliação EL está desativada, \ $ não será reconhecido como uma citação, enquanto que quando a avaliação EL está habilitado, \ $ será reconhecido como um orçamento de $." (JSP.3.3.2)
Se EL Avaliação está ativado ou desativado depende de muitas coisas:
- se servidor de aplicativos suporta JSP 2.0 (Tomcat 5.0 e superior faz)
- arquivo de descritor web.xml ... se declara (por exemplo, por não usar esquema web-app_2_4.xsd) que ele usa Servet 2.3 especificação ou anterior, EL é desabilitada por padrão.
- Configuração JSP
- Página directiva isELIgnored (
<%@ page isELIgnored=”true|false” %>
)
(Veja JSP Spec 2.0 , parte JSP.3.3.2 por mais detalhes)
maneira simples de verificar se EL é ativado / desativado é usar $ {pedido} em sua página. Se você ver '$ {pedido}' na saída, EL está desativado. Se você ver algo diferente, ele está habilitado.
Você pode querer mudar \$
(uma barra invertida) para \\$
(duas barras invertidas) para obter \$
na saída, se você também usar EL em sua página.
Se você ver as diferenças entre o servidor local / remoto, suas definições relacionadas com a EL provavelmente diferem. Melhor que você pode fazer é a 1) usar JSP 2.0, Servlet 2.4 ou posterior (permite EL), 2) executar mesmo servidor web em máquinas. (Btw, eu sugiro que você atualizar Tomcat 5,0 a 5,5, pelo menos).
Outras dicas
Talvez você pode mover o código javascript para um arquivo js separado? Isso impedirá que o código seja interpretado como jsp.
Pedro entendeu, e sugestão de Simon também é uma boa idéia.
Além disso, você não precisa usar regex para fazer um simples estática-texto de substituição. O idioma JS seria:
alert('a$b'.split('$').join('k'));