Javascript String.replace (/ \ $ /, str) работает странно в файле JSP - PullRequest
4 голосов
/ 23 января 2009

Для простоты у меня есть следующий файл с именем 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, он работает нормально на обоих серверах.

Но мой файл должен встраивать JavaScript в файл JSP. не разрешается использовать суффикс .html для моего файла. Что я должен сделать, чтобы написать переносимый JavaScript в этом сценарии?

Мой локальный сервер использует tomcat-5.5.26; удаленный сервер использует tomcat-5.0.28. Версия Firefox - 3.0.4.

Ответы [ 3 ]

8 голосов
/ 23 января 2009

Спецификация JSP 2.0 гласит: «Когда оценка EL отключена, \ $ не будет распознаваться как кавычка, тогда как при включении оценки EL \ $ будет распознаваться как цитата за $». (JSP.3.3.2)

Включение или отключение EL Evaluation зависит от многих факторов:

  • , если сервер приложений поддерживает 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) запускать один и тот же веб-сервер на компьютерах. (Кстати, я предлагаю вам обновить Tomcat 5.0 до версии не ниже 5.5).

2 голосов
/ 23 января 2009

Может быть, вы можете переместить код JavaScript в отдельный файл .js? Это предотвратит интерпретацию кода как jsp.

0 голосов
/ 23 января 2009

Питер получил его, и предложение Саймона также является хорошей идеей.

Кроме того, вам не нужно использовать регулярное выражение для простой замены статической строки. Идиома JS будет:

alert('a$b'.split('$').join('k'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...