str regulares expresiones commas all javascript regex jsp tomcat el

commas - replace javascript expresiones regulares



Javascript String.replace(/ / $/, str) funciona de forma extraña en el archivo jsp (3)

Para simplificar, tengo el siguiente archivo llamado test.jsp:

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

Puse este archivo en mi servidor local y luego lo visualicé usando firefox: http: // localhost: 8080 / myproj / test.jsp . Funciona bien, la cadena de alerta de resultado es:

akb

Pero cuando pongo este archivo en un servidor remoto y uso el mismo Firefox para mostrar, su resultado es: a $ bk que es incorrecto para mí.

Luego cambio el contenido de test.jsp a:

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

Tenga en cuenta que aquí agrego dos barras en lugar de una. En este caso, funciona en el servidor remoto pero no en el local.

Luego cambio el nombre del archivo de test.jsp a test.html, pero el contenido es el mismo que mi primer caso, es decir:

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

Al usar el mismo Firefox, funciona bien en ambos servidores.

Pero mi archivo necesita incrustar el javascript en el archivo jsp. no está permitido usar el sufijo .html para mi archivo. ¿Qué debo hacer para escribir un javascript portátil en este escenario?

Mi servidor local usa tomcat-5.5.26; el servidor remoto usa tomcat-5.0.28. La versión de Firefox es 3.0.4.


¿Tal vez puedas mover el código de JavaScript a un archivo .js diferente? Esto evitará que el código se interprete como jsp.


La especificación JSP 2.0 dice: "Cuando la evaluación EL está desactivada, / $ no se reconocerá como una cotización, mientras que cuando la evaluación EL está habilitada, / $ se reconocerá como una cotización para $." (JSP.3.3.2)

Si la evaluación EL está habilitada o deshabilitada depende de muchas cosas:

  • si el servidor de aplicaciones admite JSP 2.0 (Tomcat 5.0 y superior)
  • archivo de descriptor web.xml ... si declara (por ejemplo, al no usar el esquema web-app_2_4.xsd) que utiliza la especificación Servet 2.3 o anterior, EL está desactivado por defecto.
  • Configuración JSP <el-ignored>
  • La directiva de la página está ignorada ( <%@ page isELIgnored=”true|false” %> )

(Ver JSP Spec 2.0 , parte JSP.3.3.2 para más detalles)

Una manera simple de verificar si EL está habilitado / deshabilitado es usar $ {request} en su página. Si ve ''$ {request}'' en la salida, EL está desactivado. Si ves algo diferente, está habilitado.

Es posible que desee cambiar /$ (una barra invertida) a //$ (dos barras diagonales inversas) para obtener /$ en el resultado si también usa EL en su página.

Si ve diferencias entre el servidor local / remoto, su configuración relacionada con EL probablemente difiera. Lo mejor que puede hacer es 1) usar JSP 2.0, Servlet 2.4 o posterior (habilita EL), 2) ejecutar el mismo servidor web en las máquinas. (Por cierto, sugiero que actualice Tomcat 5.0 a 5.5 al menos).


Peter lo tiene, y la sugerencia de Simon también es una buena idea.

Además, no necesita usar expresiones regulares para reemplazar una cadena estática simple. El modismo JS sería:

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