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.

Foi útil?

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'));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top