Spring MVC HanderMapping
La interface HandlerMapping
es utilizada por el DispatcherServlet para determinar cual es el controlador que debe manejar una petición HTTP, este componente analiza la URL de la petición y determina a que controlador se debe llamar para responder a la misma, el HandlerMapping
utilizado por defecto es DefaultAnnotationHandlerMapping
, si utilizamos la anotación @EnableWebMvc
o su etiqueta XML equivalente <mvc:annotation-driven />
en la configuración se utilizará la clase RequestMappingHandlerMapping
, ambas clases utilizan las anotaciones @Controller
y @RequestMapping
.
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"carmelo.spring.controller"})
public class WebAppConfig {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
Siendo esta nuestra configuración ya tendremos definido un HandlerMapping
según lo dicho previamente, con esto podemos definir un controlador usando las anotaciones @Controller
y @RequestMapping
, los detalles del ViewResolver
los puedes ver en el tutorial Spring MVC ViewResolver.
@Controller
public class HomeController {
@RequestMapping("/home.html")
public String homeController(Model model){
return "home";
}
}
El funcionamiento de este controlador ya lo hemos explicado en tutoriales anteriores, mas específicamente en Spring MVC Controladores, lo que deseamos mostrar es que nuestro HandlerMapping
usara la anotación @RequestMapping
para responder a una determinada petición.
BeanNameUrlHandlerMapping
El BeanNameUrlHandlerMapping
mapea una URL usando el nombre del bean controlador, es decir la URL a la que responder un controlador estará determinada por su nombre, recordemos que podemos indicar el nombre de un bean en la anotación, si este no aparece se utilizara el nombre del método con la letra inicial en minúscula.
Agregamos los siguientes bean a nuestra configuración:
@Bean
public HandlerMapping handlerMapping() {
return new BeanNameUrlHandlerMapping();
}
@Bean("/inicio.html")
public HomeController homeController() {
return new HomeController();
}
El primero define el HandlerMapping
y el segundo el controlador que responderá a la URL definida por el nombre del bean, en nuestro caso: "/index.html".
public class HomeController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("home");
}
}
Para definir el controlador extendemos la clase AbstractController
, el resultado es el siguiente.
Esta vista es creado usando la tecnología JSP, si deseas conoce más de la misma puedes ir al tutorial Spring MVC Vistas JSP.
SimpleUrlHandlerMapping
Este componente funciona de manera muy similar al anterior, salvo que este utiliza una colección para almacenar las URL y sus correspondientes controladores, usaremos un objeto Properties
para este propósito, a través de su método put()
ingresamos primero la URL y luego el nombre del controlador para la misma, ejemplo:
@Bean
public HandlerMapping handlerMapping() {
Properties urlMaps = new Properties();
urlMaps.put("/index.html", "homeController");
SimpleUrlHandlerMapping handler = new SimpleUrlHandlerMapping();
handler.setMappings(urlMaps);
return handler;
}
@Bean
public HomeController homeController() {
return new HomeController();
}
Podemos agregar todas las URL y los controladores que deseemos, la clase controladora no necesita cambios, si vemos el navegador debemos visualizar el mismo resultado que en el ejemplo anterior.
En este ejemplo variamos la URL ahora es "/index.html".
Con esto finalizamos el tutorial en el que estudiamos el componente HandlerMapping
, vimos los componentes usados por defecto, estos utilizan las anotaciones @Controller
y @RequestMapping
, también utilizamos los componentes SimpleUrlHandlerMapping
y el BeanNameUrlHandlerMapping
en nuestro proyecto de ejemplo.
- Ir a GitHut: Código Spring MVC HandlerMapping
- Ir a Inicio: Cursos Spring Framework.
Comentarios
Publicar un comentario