Когда вы используете JSP, а когда сервлет?[дубликат]

StackOverflow https://stackoverflow.com/questions/101579

  •  01-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

У меня есть приложение, которое отправляет клиента на другой сайт для обработки платежей.Другой сайт, не являющийся клиентом, вызывает страницу на нашем сервере, чтобы сообщить нам, каков статус платежа.Вызываемая страница проверяет параметры, предоставленные платежным приложением, и проверяет, известна ли нам транзакция.Затем он обновляет базу данных, чтобы отразить статус.Все это происходит без какого-либо взаимодействия с клиентом.

Лично я решил реализовать эту функциональность в виде JSP, поскольку проще просто переместить файл в файловую систему, чем скомпилировать и упаковать файл, а затем добавить запись в файл конфигурации.

Учитывая функциональность страницы, я бы предположил, что сервлет будет предпочтительным вариантом.Вопрос(ы):

  • Верно ли мое предположение?
  • Есть ли реальная причина использовать сервлет вместо JSP?
  • Каковы эти причины?
  • Это было полезно?

    Решение

    JSP компилируется в сервлет при первом запуске.Это означает, что между ними нет реальной разницы во времени выполнения.

    Однако большинство из них традиционно используют сервлеты для контроллеров и JSP для представлений.Поскольку контроллеры — это просто классы Java, вы можете получить полную поддержку инструментов (завершение кода и т. д.) из всех IDE.Это обеспечивает лучшее качество и более быстрое время разработки по сравнению с JSP.Некоторые более продвинутые IDE (на ум приходит IntelliJ IDEA) имеют отличную поддержку JSP, что делает этот аргумент устаревшим.

    Если вы создаете свою собственную структуру или просто делаете ее с помощью простых JSP, вы можете смело продолжать использовать JSP.Разницы в производительности нет, и если вы чувствуете, что JSP писать легче, обязательно продолжайте.

    Другие советы

    JSP:Для представления данных пользователю.Здесь не должно быть никакой бизнес-логики и, тем более, никакого доступа к базе данных.

    Сервлеты:Для обработки ввода из формы или определенного URL-адреса.Обычно люди используют такую ​​библиотеку, как Struts/Spring, поверх сервлетов, чтобы упростить программирование.В любом случае сервлет должен просто проверить поступившие данные, а затем передать их в реализацию внутреннего бизнес-уровня (для которой вы можете закодировать тестовые примеры).Затем он должен поместить полученные значения в запрос или сеанс и вызвать JSP для их отображения.

    Модель:Модель данных, содержащая ваши структурированные данные, которые обрабатывает веб-сайт.Сервлет может принять аргументы, поместить их в модель, а затем вызвать бизнес-уровень.Затем модель может взаимодействовать с серверными DAO (или Hibernate) для доступа к базе данных.

    Любой нетривиальный проект должен реализовать структуру MVC.Это, конечно, перебор для тривиальной функциональности.В вашем случае я бы реализовал сервлет, который вызывал DAO для обновления статуса и т. д. или чего-то еще.

    JSP следует использовать на уровне представления, сервлеты — для бизнес-логики и внутреннего кода (обычно на уровне базы данных).

    Я не знаю причин, по которым вы не можете использовать JSP, как вы описываете (он все равно компилируется в сервлет контейнером), но вы правы, предпочтительный метод - сначала сделать его сервлетом. .

    JSP — это ярлык для написания сервлета.Фактически они переводятся в Java-код сервлета перед компиляцией.(Вы можете проверить это в каком-то подкаталоге Tomcat, имя которого я не помню).

    Чтобы выбрать между сервлетом и JSP, я использую простое правило:если страница содержит больше HTML-кода, чем Java-кода, используйте JSP, в противном случае просто напишите сервлет.В целом это примерно переводится как:используйте JSP для представления контента и сервлеты для управления, проверки и т. д.

    Кроме того, проще организовать и структурировать код внутри сервлета, поскольку он использует простой синтаксис класса Java.JSP, как правило, более монолитны, хотя внутри них можно создавать методы.

    Есть 2 довольно простых правила:

    1. Всякий раз, когда вы хотите написать код Java (бизнес-логику), делайте это в классе Java (то есть сервлете).
    2. Всякий раз, когда вы хотите написать код HTML/CSS/JS (логика представления/шаблона), делайте это в JSP.

    Связанный вопрос:

    JSP, по сути, представляет собой разметку, которая автоматически компилируется в сервлет контейнером сервлетов, поэтому этап компиляции происходит в обоих случаях.Вот почему контейнер сервлетов, поддерживающий JSP, должен иметь полный доступный JDK, а не только JRE.

    Таким образом, основная причина использования JSP — уменьшение количества кода, необходимого для отображения страницы.Если вам не нужно отображать страницу, лучше использовать сервлет.

    Я знаю, что сегодня это не популярный ответ, но:Когда я разрабатываю приложение с нуля, я всегда использую JSP.Когда логика нетривиальна, я создаю обычные классы Java для выполнения тяжелой работы, которую вызываю из JSP.Я никогда не понимал аргумента в пользу того, что вам следует использовать сервлеты, потому что, будучи чистыми классами Java, они более удобны в сопровождении.JSP может легко вызвать чистый класс Java, и, конечно же, обычный класс Java так же удобен в сопровождении, как и любой сервлет.Форматировать страницу в JSP проще, потому что вы можете поместить всю разметку в строку вместо того, чтобы писать кучу println.Но самым большим преимуществом JSP является то, что вы можете просто поместить их в каталог, и они станут доступны напрямую:вам не нужно возиться с настройкой связей между URL-адресом и файлом класса.Безопасность легко обеспечить, если каждый JSP начинается с проверки безопасности, которая может представлять собой один оператор вызова, поэтому нет необходимости помещать безопасность на уровень диспетчеризации.

    Единственная причина, по которой я вижу использование сервлета, — это если вам нужно сложное сопоставление между URL-адресами и результирующим классом выполнения.Например, если вы хотите проверить URL-адрес, а затем вызвать один из многих классов в зависимости от состояния сеанса или чего-то подобного.Лично я никогда не хотел этого делать, и приложения, которые я видел, которые это делают, обычно сложно поддерживать, потому что, прежде чем вы сможете даже начать вносить изменения, вы должны выяснить, какой код действительно выполняется.

    Большинство Java-приложений в настоящее время построены на основе шаблона MVC...На стороне контроллера (сервлета) вы реализуете бизнес-логику.Контроллер сервлета обычно перенаправляет запрос на jsp, который генерирует фактический ответ html (представление в MVC).Цель состоит в том, чтобы разделить проблемы...На эту тему написаны тысячи книг.

    В архитектуре MVC сервлеты используются в качестве контроллера, а JSP — в качестве представления.Но оба технически одинаковы.JSP будет преобразован в сервлет либо во время компиляции (как в JDeveloper), либо при первом доступе (как в Tomcat).Итак, настоящая разница заключается в простоте использования.Я почти уверен, что вам будет сложно отрисовать HTML-страницу с помощью сервлета;но вопреки здравому смыслу на самом деле вы обнаружите, что довольно легко запрограммировать даже довольно сложную логику внутри JSP (возможно, с помощью какого-нибудь подготовленного вспомогательного класса).Ребята из PHP делают это постоянно.И поэтому они попадают в ловушку создания спагетти-кодов.Итак, мое решение вашей проблемы:Если вам проще писать код на JSP и это не требует слишком большого количества кода, смело пишите на JSP.В противном случае используйте сервлет.

    Согласен со всеми вышеизложенными замечаниями о различиях между JSP и сервлетами, но есть еще пара дополнительных соображений.Ты пишешь:

    У меня есть приложение, которое отправляет клиента на другой сайт для обработки платежей.Другой сайт, вне клиента, вызывает страницу на нашем сервере, чтобы сообщить нам, каков статус платеж.Названная страница проверяет параметры, которые даются платежным заявлением, и проверяют, известна ли нам транзакция.Затем он обновляет базу данных, чтобы отразить статус.Все это сделано без какого -либо взаимодействия с клиентом.

    Ваше приложение использует платежную службу другого приложения.Ваше решение хрупко, потому что если платежный сервис в другом приложении изменится, это приведет к поломке вашей страницы JSP.Или, если вы хотите изменить политику оплаты вашего приложения, вам придется изменить вашу страницу.Короткий ответ: ваше приложение должно использовать платежную службу приложения через веб-службу.Ни сервлет, ни страница JSP не подходят для размещения вашей логики потребления.

    Во-вторых, в этом смысле большинство случаев использования сервлетов/JSP-страниц за последние несколько лет были помещены в контекст таких фреймворков, как Spring или Struts.Я бы порекомендовал Spring, поскольку он предлагает вам полный набор того, что вам нужно, от серверных страниц до логики шлюза веб-сервисов и DAO.Если вы хотите понять основы Spring, я бы порекомендовал Весна в действии.Если вам нужно лучше понять, как распределять корпоративную архитектуру, написанную на таком языке, как Java (или C#), я бы порекомендовал Фаулера. Шаблоны архитектуры корпоративных приложений.

    Да, это должен быть сервлет.JSP может быть проще разработать, но сервлет будет проще поддерживать.Представьте себе, что вам нужно исправить какую-то случайную ошибку за 6 месяцев и попытаться вспомнить, как она работала.

    В сервлете Java теги HTML встроены в код Java.В JSP коды Java встроены в теги HTML.

    Для большого приложения для большой проблемы сервлет сложен для чтения, понимания, отладки и т. д. из-за нечитаемости внедрения большего количества html-тегов в код Java. Поэтому мы используем jsp. В jsp его легко понять, отладить и т. д.

    Спасибо и с уважением, sivakumar.j

    я думаю, это зависит от тебя?Поскольку JSP - это Java внутри HTML, а сервлет - это Java, которая может сделать HTML внутри

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

    но преимущество JSP в том, что вы можете легко писать там код.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top