Почему скриптлеты существуют в JSP?

Я слышал миллиард раз о том, как ужасно использовать скриптлеты (эти php-подобные <% %> штуки) в JSP.

  • Было доказано, что скриптлеты нарушают шаблоны проектирования кода, и обычно Шаблон MVC
  • Многие платформы J2EE (например, JSF 2.0+) уже отключили использование скриптлетов.

Поскольку скриптлеты не требуются ни для каких целей и могут быть заменены JSTL, другими библиотеками тегов и EL (языком выражений), почему они все еще существуют? Почему Oracle до сих пор не удалила эти скриптлеты из технологии JSP?


person Victor2748    schedule 07.01.2015    source источник
comment
Основная причина, по которой они не были удалены, — обратная совместимость, но, как вы сказали, теперь они устарели.   -  person morgano    schedule 07.01.2015
comment
Я люблю скриптлеты. Я использую их все время. Они очень удобны.   -  person rickz    schedule 07.01.2015
comment
@rickz Почему вы предпочитаете использовать сценарии, а не библиотеки тегов JSP и язык выражений?   -  person Victor2748    schedule 07.01.2015
comment
Я использую их все. Но, но вы не можете победить скриптлеты за то, что делаете что-то быстрое и грязное. Я добавляю немного java в скриптлет и вызываю его в своем браузере. Я вношу некоторые изменения в свой код и нажимаю кнопку «Обновить». Я делаю это снова и снова, пока не буду доволен результатом.   -  person rickz    schedule 07.01.2015
comment
Вы не можете просто удалить вещи из продуктов. Начиная с версии 1.1 и модели событий AWT ничего не удалялось из Java. Если тогда.   -  person user207421    schedule 07.01.2015


Ответы (2)


Они все еще существуют для обратной совместимости.

person Slash    schedule 07.01.2015

Этому вопросу уже три года, но я хотел бы высказать свое личное мнение по этому вопросу. Я использую JSP со скриптлетами более 15 лет в большом проекте (система CRM), и вот мой опыт:

  • Скриптлеты нарушают шаблон MVC, только если вы им это позволите. Я не понимаю, почему <c:out ...${product.priceVat}> должно быть как-то лучше, чем <%= product.getPriceVat() %>. Во много раз на самом деле хуже. Это более подробно, и вы можете потерять информацию о типе. Является ли свойство priceVat BigDecimal или это форматированная строка с валютой? Вы иногда не знаете, в случае EL (зависит от используемой IDE).
  • Большим подспорьем для нашего проекта являются автоматические рефакторинги. Если один разработчик переименует метод getPriceVat в getPriceTax, это должно быть отражено во всей кодовой базе. IntelliJ IDEA отлично справляется с обработкой скриптлетов. Не уверен, что он автоматически переименовывает ${product.priceVat} в ${product.priceTax} (EDIT: да, круто). Netbeans или Eclipse не так хорошо обрабатывают сегментацию JSP.
  • Скриптлеты работают лучше, чем комбинация EL/JSTL. Они должны, если вы заглянете под капот. Последний производит больший код (Apache Jasper), и мы несколько раз запускали ограничение кода в 64 КБ для метода Java и были буквально вынуждены заменить некоторые теги скриптлетами.
  • Прототипирование. Мы часто создаем прототипы JSP, используя скриптлеты (ввод кода — обновление страницы — ввод кода — обновление...). Позже мы улучшаем наши теги и очищаем страницу.
  • Горячие исправления. Мы предотвратили перезагрузку сервера несколько раз, напрямую изменив один скрипт JSP на рабочем сервере. Невозможно, если вам нужно изменить скомпилированный код внутри класса и вам нужно перестроить весь файл WAR. Я знаю, что это противно.
  • Отступы кода - это кошмар со скриптлетами. Это явный недостаток использования скриптлетов.
  • Я надеюсь, что поддержка скриптлетов никогда не будет прекращена. Возможность отключения скриптлетов в web.xml должна быть достаточной для сторонников чистоты кода.
person bizwiz    schedule 23.08.2018