2014-04-27 19 views
10

Ho letto Spring MVC HandlerMapping e HandlerAdapter, ma io sono sempre confuso tra questi due concepts.I può capire che HandlerMapping viene utilizzato per mappare richiesta HTTP in ingresso al controller ma what is the use of HandlerAdapter?
why do we use it?
what is the exact difference between these two with example?
Please help io su questo.Grazie !!Spring MVC HandlerMapping VS HandlerAdapter

risposta

9

L'interfaccia della strategia HandlerAdapter svolge il ruolo di richiamo dei metodi del gestore selezionati da alcuni HandlerMapping.

Se un HandlerMappingselect un controller, ma non un metodo specifico, quindi HandlerAdapter seleziona anche il metodo del gestore.

DispatcherServlet richiama i controller tramite gli oggetti strategia HandlerAdapter.

Ciò consente a diversi tipi di controllori di utilizzare strategie di richiamo dei metodi differenti. e le strategie di mappatura degli URL sono possibili.

L'installazione di nuovi tipi di strategie di richiamo del gestore richiede che venga registrato un bean HandlerAdapter appropriato.

Quando vengono installati più HandlerAdapter, il DispatcherServlet invocherà tutto per controllare il primo che supporta l'oggetto gestore fornito da HandlerMappingstrategy. Il primo HandlerAdapter che supporta l'oggetto gestore (controller o metodo) viene utilizzato per richiamare il gestore.

Spring MVC supporta diversi tipi di controller, tra cui: i controllori di annotazione definito (con @Controller), il WebFlow FlowExecutor ecc

AnnotationMethodHandlerAdapter

AnnotationMethodHandlerAdapter adatta richieste HTTP al gestore di metodi annotati con @RequestMapping. Interpreta gli argomenti di input richiesti per i gestori e interpreta i valori di output. Questo HandlerAdapter è configurato per impostazione predefinita.

AnnotationMethodHandlerAdapter può essere utilizzato con controller con più metodi di gestione in una varietà di modi potenti.

8

Dall'introduzione di RequestMappingHandlerMapping e RequestMappingHandlerAdapter nella primavera 3.1, la distinzione è ancora più semplice: RequestMappingHandlerMapping trova il metodo di gestione appropriato per la richiesta specificata. RequestMappingHandlerAdapter esegue questo metodo, fornendogli tutti gli argomenti.

-1

Il HandlerMapping viene utilizzato per eseguire il mapping di una richiesta agli handler, ad esempio i controller. Ad esempio: DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping, BeanNameUrlHandlerMapping. DefaultAnnotationHandlerMapping.

<mvc:annotation-driven /> dichiara il supporto esplicito per i controller MVC basati su annotazione. Il tag configura due bean (Mapping e Adapter) DefaultAnnotationHandlerMapping e AnnotationMethodHandlerAdapter in modo che non sia necessario dichiararli nel file di configurazione del contesto.

HandlerAdapter è fondamentalmente un'interfaccia che facilita la gestione delle richieste HTTP in modo molto flessibile in Spring MVC. Il DispatcherServlet non invoca direttamente il metodo - fondamentalmente funge da ponte tra se stesso e gli oggetti del gestore, portando a un design che si accoppia liberamente.

public interface HandlerAdapter { 
    //check if a particular handler instance is supported or not. 
    boolean supports(Object handler); 

    //used to handle a particular HTTP request and returns ModelAndView object to DispatcherServlet 
    ModelAndView handle(
     HttpServletRequest request, 
     HttpServletResponse response, 
     Object handler) throws Exception; 

    long getLastModified(HttpServletRequest request, Object handler); 
} 

Tipi di HandlerAdapter:
enter image description here

AnnotationMethodHandlerAdapter: che esegue i metodi annotati con @RequestMapping. AnnotationMethodHandlerAdapter è stato ritirato e sostituito da RequestMappingHandlerAdapter dalla primavera 3.1+.

SimpleControllerHandlerAdapter: questo è l'adattatore di handler predefinito registrato da Spring MVC. Si occupa di classi che implementano l'interfaccia Controller e viene utilizzato per inoltrare una richiesta a un oggetto controller.

Se un'applicazione Web utilizza solo controller, non è necessario configurare alcun HandlerAdapter poiché il framework utilizza questa classe come adattatore predefinito per gestire una richiesta.

Definiamo una semplice classe di controllo, utilizzando il vecchio stile di controllo (che implementa l'interfaccia Controller):

public class SimpleController implements Controller { 
    @Override 
    public ModelAndView handleRequest(
     HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 

     ModelAndView model = new ModelAndView("Greeting"); 
     model.addObject("message", "Dinesh Madhwal"); 
     return model; 
    } 
} 

simile configurazione XML:

<beans ...> 
    <bean name="/greeting.html" 
     class="com.baeldung.spring.controller.SimpleControllerHandlerAdapterExample"/> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

for more