Подтвердить что ты не робот

Когда использовать Servlet или @Controller

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

Насколько я понимаю, существуют различные способы реализации "обработки запросов", например "Контроллер", в веб-приложении, ориентированном на "MVC", причем два из них:

  • Специфичный для Java сервлет (т.е. созданный с помощью нового → Сервлет, например, в затмении), используемый как "Контроллер". Вот этот extends HttpServlet, и вы используете такие методы, как doGet и doPost и т.д.
  • A Spring MVC аннотированный класс @Controller (да, используя DispatcherServlet). С помощью этого вы используете @RequestMethod GET/POST и т.д.

Теперь на мои вопросы...

  • Когда вы используете один или другой?
  • Есть ли какие-либо общие преимущества для использования одного метода над другим? (Например, один метод рекомендуется для другого вообще?)

[РЕД.]: выделенные ключевые слова

4b9b3361

Ответ 1

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

JSP - удобный способ написать сервлет, который позволяет вам смешивать html с элементами сценариев (хотя рекомендуется избегать Java-кода в jsp в пользу тегов и el-выражений). Под обложками он будет скомпилирован как сервлет, но это позволит вам использовать множество грязных заявлений печати. ​​

Важно иметь хотя бы базовое понимание сервлетов и JSP. Spring MVC - одна из многих фреймворков, построенных поверх сервлетов, чтобы попытаться упростить задачу написания веб-приложения. В основном все запросы сопоставляются с DispatcherServlet, который выступает в качестве переднего контроллера.

Затем DispatcherServlet вызывает контроллер, аннотации которого соответствуют входящему запросу. Это более аккуратно, чем писать эти сопоставления самостоятельно в web.xml(хотя с сервлета 3.0 вы можете аннотировать сервлеты сейчас). Но вы также получаете много других преимуществ, которые можно использовать, например, для полей формы отображения для объекта, проверки этого объекта с помощью аннотаций jsr303, входов и выходов карты в xml или json и т.д. И т.д. Кроме того, он плотно интегрирован с ядром Spring, поэтому вы можете легко провод в ваших службах для вызова контроллера.

Стоит отметить, что существует множество конкурирующих фреймворков, построенных поверх сервлетов. Spring MVC является одним из самых популярных, поэтому он не является плохим выбором для изучения.

Ответ 2

Сервлет и контроллер Spring MVC можно использовать для выполнения того же самого действия, но они действуют на разных уровнях приложения Java

Сервлет является частью структуры J2EE, и каждый сервер приложений Java (Tomcat, Jetty и т.д.) создан для запуска сервлета. Сервлет - это уровень "низкого уровня" в стеке J2EE. Вам не нужен сервлет .jar для запуска приложения, поскольку он предварительно упакован с сервером приложений

A Spring MVC-контроллер - это библиотека, построенная на сервлете, чтобы упростить задачу. Spring MVC предлагает более встроенные функции, такие как параметр формы для сопоставления параметров метода контроллера, упрощение обработки представлений двоичной формы (т.е. когда ваша форма может загружать файлы). Вам необходимо упаковать необходимые банки в ваше приложение, чтобы запустить Spring MVC Controller

Вы должны использовать сервлет, когда вам нужно идти "на низком уровне", и пример может быть вызван соображениями производительности. Spring MVC работает хорошо, но если у него есть некоторые накладные расходы, если вам нужно выжать все, что вы можете с вашего сервера приложений (и вы уже настроили другие слои, такие как db), идите с сервлетом. Вы можете выбрать сервлет, если хотите понять основы веб-спецификаций J2EE (т.е. Для образовательных целей)

Во всех остальных случаях вы можете/должны выбрать веб-фреймворк. Spring MVC является одним из них; с помощью Spring MVC вам не нужно изобретать колесо (например, управление бинарной формой, преобразование формы в bean, валидация параметров и т.д.). Еще один плюс Spring MVC заключается в том, что в одном классе вы можете легко управлять вводом из разных URL-адресов и методов, делая то же самое в сервлете, но код более сложный и менее читаемый. Мое мнение состоит в том, что Spring MVC хорош для создания служб отдыха и управления простыми приложениями (например, веб-приложение с простыми формами). Если вам нужно управлять очень сложными формами с помощью Ajax, вложенных форм и приложения с состоянием сеанса и страницы, мой совет заключается в том, чтобы переключиться на компонентную структуру (например, apache wicket).

Ответ 3

JSF и JSP, а также Spring MVC строится на сервлетах. Проблема в том, что сервлеты не очень "хороши" для работы, потому что вам нужно написать прямой html.

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

Использование SpringMVC или JSF, которые работают с Dipatcherservlet или FacesServlet, выполняется быстрее и веселее. Они анализируют ваши файлы и отправляют их через сервлет.