2011-10-24 31 views

Respuesta

8

Comience here y vea si eso ayuda; si no es así, formule una pregunta más específica. Además, this section de los documentos de Spring explica los adaptadores predeterminados y cómo se relacionan con la configuración de anotación.

En pocas palabras, los adaptadores de controlador deciden qué controlador (y método) solicitar una solicitud.

+0

El enlace está roto. – Vishnu

+0

@Vishnu Las cosas cambian en seis años, supongo. –

2

A HandlerMapping simplemente asigna un método a una URL. La mayoría de los principiantes no usan este objeto directamente, sino que usan RequestMapping en su lugar. El tipo de devolución del método mapeado (generalmente) determina qué vista utilizará SpringMVC para generar una respuesta.

Por ejemplo, la siguiente RequestMapping generará una HandlerMapping para peticiones GET a "/" o "/ home" para invocar este método:

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

El método devuelve un nombre de cadena de un punto de vista, lo que haría normalmente se resuelven en "/WEB-INF/views/homepage.jsp" (pero eso depende de su ViewResolver, por supuesto)

Sólo un FYI para comenzar: puede agregar diferentes objetos que pueda necesitar como parámetros a su método (como Locale, HttpServletRequest, etc.). Consulte RequestMapping javadoc para obtener más información.

+1

Preguntó por HandlerAdapter, usted explicó HandlerMapping –

9

A HandlerMapping asigna un método a una URL, por lo que DispatcherServlet sabe qué método debe invocarse mediante una solicitud específica. Luego, el DispatcherServlet usa un HandlerAdapter para invocar el método.

¿Por qué DispatcherServlet no invoca un método directamente?

Debido a que hay muchas maneras de invocar un método, como anotación, XML, etc. HandlerAdapter desacopla el DispatcherServlet y las acciones invocadas.

3

Puede encontrar Adapter en HandlerAdapter y esa parte del nombre proviene del patrón Adapter. El adaptador es como un puente entre dos objetos y HandlerAdapter es un puente entre el objeto del manejador y el servlet del despachador.

Como puede ver en el código fuente de HandlerAdapter a continuación tomado de la documentación de Spring, hay un método, método de manejo con tipo de devolución ModelAndView. Cada HandlerAdapter implementará este método para delegar HttpServletRequest y HttpServletResponse en el objeto del manejador para que luego el objeto del manejador ejecute la lógica de la aplicación usando 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; 

Esta aplicación lógica de aplicación produce modelo y vista. La vista puede estar en forma de ver el nombre del objeto String o View. El modelo contiene datos que se usarán para representar la vista. HandlerAdapter ajustará el modelo y la vista en el objeto ModelAndView. Es trabajo de servlet del despachador procesar el objeto ModelAndView.

El servlet despachador no conoce el objeto del manejador ni se libera de la lógica de aplicación directamente. El objeto Handler también se alivia de convertir el modelo y la vista en el objeto ModelAndView porque HandlerAdapter lo hará.

Cuestiones relacionadas