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

37

This question already has an answer here:

What is the difference between JSF, Servlet and JSP? 15 answers

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

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

Considering the functionality of the page I would presume that a servlet would be the preferred option. The question(s) are:

Is my presumption correct? Is there a real reason to use a servlet over a JSP? What are those reasons?

Также проверьте ответы наstackoverflow.com/questions/1053825/… zkarthik

Ваш Ответ

13   ответов
0

  В JSP Java-кодирование встраивается в теги HTML.

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

Спасибо & amp; С Уважением, Sivakumar.j

3

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

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

1

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

Error: User Rate Limit Exceeded Antony
0

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

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

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

0

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

Error: User Rate Limit Exceeded Antony
Error: User Rate Limit Exceeded
31

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

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

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

4

Whenever you want to write Java code (business logic), do it in a Java class (so, Servlet). Whenever you want to write HTML/CSS/JS code (view/template logic), do it in a JSP. Related question: How to avoid Java code in JSP
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Я согласен, что это сводится к этим правилам. Я также согласен, что вы дали веские основания для правил в другой ветке. Я лично думаю, что было бы целесообразно скопировать это здесь, так как не все люди переходят к другим ответам. Опять же, это обсуждение может быть просто достаточно, чтобы перенести их на другую страницу. Antony
1

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

Error: User Rate Limit Exceeded
8

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

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

3

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

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

Error: User Rate Limit Exceeded
Необходимость JDK против JRE является хорошим соображением. Количество кода, необходимого для отображения страницы, будет примерно таким же, вы делаете удар при первом запуске JSP, хотя после (пере) запуска сервера. Antony
1

но вот пара дополнительных соображений. Ты пишешь:

I have an application that sends the customer to another site to handle the payments. The other site, outside of the customer, calls a page on our server to let us know what the status is of the payment. The called page checks the parameters that are given by the payment application and checks to see whether the transaction is known to us. It then updates the database to reflect the status. This is all done without any interaction with the customer.

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

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

Error: User Rate Limit Exceeded Antony
26

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

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

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

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

4

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

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

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

в папке tomcat / work генерируется Java-сервлет из JSP.

Похожие вопросы