#spring #spring-mvc
#весна #spring-mvc
Вопрос:
Я новичок в Spring MVC. Я не совсем понял адаптеры обработчиков. Что такое адаптер обработчика и когда я использую адаптеры?
Ответ №1:
A HandlerMapping
сопоставляет метод с URL-адресом, поэтому DispatcherServlet
он знает, какой метод должен быть вызван конкретным запросом. Затем DispatcherServlet
используйте a HandlerAdapter
для вызова метода.
Почему DispatcherServlet не вызывает метод напрямую?
Потому что существует много способов вызова метода, таких как аннотации, xml и т. Д. HandlerAdapter
разъединяет действия DispatcherServlet
и вызываемые действия.
Ответ №2:
В этом разделе Spring docs обсуждаются адаптеры по умолчанию и то, как они связаны с конфигурацией аннотаций.
Вкратце, адаптеры обработчиков решают, какой контроллер (и метод) вызывать для запроса.
Комментарии:
1. Ссылка разорвана.
2. @Vishnu, я думаю, за шесть лет все изменится.
Ответ №3:
Вы можете найти адаптер в HandlerAdapter, и эта часть имени взята из шаблона адаптера. Адаптер подобен мосту между двумя объектами, а HandlerAdapter — это мост между объектом-обработчиком и сервлетом диспетчера.
Как вы можете видеть из исходного кода HandlerAdapter ниже, взятого из документации Spring, существует один метод, метод handle с возвращаемым типом 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;
Это выполнение логики приложения создает модель и представление. Представление может быть в виде строки имени представления или объекта представления. Модель содержит данные, которые будут использоваться для отображения представления. HandlerAdapter обернет модель и представление в объект ModelAndView. Это задание диспетчерского сервлета для обработки объекта ModelAndView.
Сервлет диспетчера не знает об объекте обработчика и освобожден от прямой обработки логики приложения. Объект обработчика также освобожден от преобразования модели и представления в объект ModelAndView, потому что HandlerAdapter выполнит эту работу по преобразованию.
Ответ №4:
HandlerMapping просто сопоставляет метод с URL-адресом. Большинство новичков не используют этот объект напрямую, а вместо этого используют RequestMapping. Тип возвращаемого отображаемого метода (обычно) определяет, какое представление SpringMVC будет использовать для отображения ответа.
Например, следующее сопоставление запросов сгенерирует сопоставление обработчиков для запросов GET на «/» или «/ home» для вызова этого метода:
@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET)
public String getHome() {
return "homepage";
}
Метод возвращает строковое имя представления, которое обычно разрешается в «/WEB-INF/views/homepage.jsp» (но это, конечно, зависит от вашего ViewResolver)
Просто к вашему сведению для начала: вы можете добавлять различные объекты, которые могут вам понадобиться в качестве параметров вашего метода (например, Locale, HttpServletRequest и т. Д.). См. RequestMapping javadoc для получения дополнительной информации.
Комментарии:
1. Он спросил о HandlerAdapter, вы объяснили HandlerMapping