spring-mvc入门(三):映射处理器("Spring MVC入门教程(三):详解映射处理器")
原创
一、概述
Spring MVC 是一种基于 Java 的 Web 应用框架,用于简化 Web 应用的开发和测试。在 Spring MVC 中,映射处理器(Handler Mapping)是一个核心组件,它负责将请求映射到对应的处理器(Controller)。本文将详细介绍映射处理器的概念、作用以及怎样自定义映射处理器。
二、映射处理器的作用
映射处理器(Handler Mapping)的首要作用如下:
- 将客户端请求的 URL 映射到对应的处理器(Controller)
- 解析请求的参数,并将其传递给处理器
- 处理请求的转发和重定向
三、常见的映射处理器
Spring MVC 提供了多种映射处理器,以下是一些常见的映射处理器:
- BeanNameUrlHandlerMapping:通过 URL 和处理器(Controller)的 bean 名称进行映射
- SimpleUrlHandlerMapping:通过 URL 和处理器(Controller)的 key 进行映射
- ControllerClassNameHandlerMapping:通过处理器(Controller)的类名进行映射
- RequestMappingHandlerMapping:拥护注解行为的映射
四、映射处理器的配置和使用
下面将通过一个示例来演示怎样配置和使用映射处理器。
4.1 创建处理器(Controller)
首先,创建一个简洁的处理器(Controller)类,如下所示:
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
4.2 配置映射处理器
在 Spring MVC 的配置文件中,可以配置映射处理器。以下是一个配置示例:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/hello" class="com.example.controller.HelloController"/>
在这个配置中,我们使用了 BeanNameUrlHandlerMapping 映射处理器,将 URL "/hello" 映射到 HelloController 类。
4.3 配置视图解析器
在 Spring MVC 中,视图解析器(ViewResolver)负责将处理器的返回值解析为实际的视图。以下是一个配置示例:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
在这个配置中,我们使用了 InternalResourceViewResolver 视图解析器,将处理器的返回值解析为 JSP 页面。
4.4 测试映射处理器
启动 Spring MVC 应用,访问 URL http://localhost:8080/hello,可以看到页面显示 "hello" 字符串。这表明映射处理器已经胜利将请求映射到了 HelloController 类。
五、自定义映射处理器
如果 Spring MVC 提供的映射处理器无法满足需求,可以自定义映射处理器。以下是一个自定义映射处理器的示例:
5.1 创建自定义映射处理器
创建一个实现了 HandlerMapping 接口的类,如下所示:
package com.example.handlermapping;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomHandlerMapping implements HandlerMapping {
@Override
public Object getHandler(HttpServletRequest request) throws Exception {
String url = request.getRequestURI();
if (url.equals("/custom/hello")) {
return new CustomController();
}
return null;
}
@Override
public HandlerExecutionChain getHandlerAndInterceptors(HttpServletRequest request) throws Exception {
return new HandlerExecutionChain(getHandler(request), null);
}
}
5.2 创建自定义处理器(Controller)
创建一个实现了 Controller 接口的类,如下所示:
package com.example.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView("hello");
}
}
5.3 配置自定义映射处理器
在 Spring MVC 的配置文件中,配置自定义映射处理器,如下所示:
<bean class="com.example.handlermapping.CustomHandlerMapping"/>
六、总结
本文详细介绍了 Spring MVC 中的映射处理器,包括映射处理器的作用、常见的映射处理器、映射处理器的配置和使用以及怎样自定义映射处理器。通过掌握映射处理器,可以更好地领会和运用 Spring MVC,为 Web 应用开发提供更灵活的映射行为。