Что такое адаптер Handler в пружине MVC? - PullRequest
14 голосов
/ 24 октября 2011

Я новичок в Spring MVC. Я не совсем понял адаптеры обработчиков. Что такое адаптер обработчика и когда я использую адаптеры?

Ответы [ 4 ]

11 голосов
/ 25 сентября 2013

A HandlerMapping отображает метод на URL, поэтому DispatcherServlet знает, какой метод должен быть вызван конкретным запросом. Затем DispatcherServlet использует HandlerAdapter для вызова метода.

Почему DispatcherServlet не вызывает метод напрямую?

Поскольку существует много способов вызова метода, таких как аннотация, xml и т. Д. HandlerAdapter разделяет DispatcherServlet и вызываемые действия.

8 голосов
/ 24 октября 2011

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

Вкратце, адаптеры обработчиков решают, какой контроллер (и метод) вызывать для запроса.

3 голосов
/ 14 июня 2014

Вы можете найти Adapter в HandlerAdapter, и эта часть имени происходит из шаблона Adapter. Адаптер - это мост между двумя объектами, а HandlerAdapter - мост между объектом-обработчиком и сервлетом-диспетчером.

Как видно из исходного кода HandlerAdapter, взятого из документации Spring, существует один метод - метод обработки с возвращаемым типом ModelAndView. Каждый HandlerAdapter будет реализовывать этот метод для делегирования HttpServletRequest и HttpServletResponse объекту-обработчику, поэтому объект-обработчик будет выполнять логику приложения, используя эти HttpServletRequest / Response.

public interface HandlerAdapter {

  //Check if controller is supported
  boolean supports(Object handler);   

  //handle request
  ModelAndView handle(HttpServletRequest rqst, 
                      HttpServletResponse rsp,
                      Object handler) throws Exception; 

Выполнение этой логики приложения создает модель и представление. Представление может быть в форме имени представления String или View object. Модель содержит данные, которые будут использоваться для визуализации представления. HandlerAdapter обернет модель и представление в объект ModelAndView. Это задача сервлета диспетчера для обработки объекта ModelAndView.

Сервлет-диспетчер не знает об объекте-обработчике и освобождается от непосредственной обработки логики приложения. Объект-обработчик также освобожден от преобразования модели и представления в объект ModelAndView, поскольку HandlerAdapter выполнит эту задачу преобразования.

1 голос
/ 08 февраля 2013

A HandlerMapping просто отображает метод на URL. Большинство начинающих не используют этот объект напрямую, а вместо этого используют RequestMapping . Тип возвращаемого значения сопоставленного метода (как правило) определяет, какое представление SpringMVC будет использовать для визуализации ответа.

Например, следующий RequestMapping сгенерирует HandlerMapping для запросов GET к "/" или "/ home" для вызова этого метода:

@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET)
public String getHome() {
    return "homepage";
}

Метод возвращает строковое имя представления, которое обычно разрешается в "/WEB-INF/views/homepage.jsp" (но это, конечно, зависит от вашего ViewResolver )

Просто к сведению: для начала вы можете добавить различные объекты, которые вам могут понадобиться в качестве параметров для вашего метода (например, Locale, HttpServletRequest и т. Д.). Посмотрите RequestMapping javadoc для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...