it-swarm.com.ru

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

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

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

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

  • Правильно ли мое предположение?
  • Есть ли реальная причина использовать сервлет поверх JSP?
  • Каковы эти причины?
  • 37
    Antony

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

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

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

    31
    s3v1

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

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

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

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

    26
    JeeBee

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

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

    8
    Bill the Lizard

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

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

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

    4
    user16120

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

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

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

    4
    BalusC

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

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

    3
    Jay

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

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

    3
    Steve Moyer

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

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

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

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

    1
    Alan

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

    1
    Alexandre Victoor

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

    1
    Rudi Adianto

    я думаю это до вас? потому что JSP - это Java внутри HTML и Servlet - это Java, который может выполнять HTML внутри

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

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

    0
    wrecklez

    В сервлете Java теги HTML встраиваются в кодировку Java . В JSP кодировки Java встраиваются в теги HTML.

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

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

    0
    SIVAKUMAR.J

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

    0
    sblundy