核心组件详解
前端控制器 - DispatcherServlet
作用:所有请求的入口,负责请求分发和协调组件。
public class DispatcherServlet extends HttpServlet {
// 核心服务方法
protected void doService(HttpServletRequest request,
HttpServletResponse response) {
// 请求处理主流程
}
}
处理器映射 - HandlerMapping
作用:根据请求 URL 匹配对应的处理器(Controller 方法)。
实现类:
RequestMappingHandlerMapping
:处理@RequestMapping
注解。BeanNameUrlHandlerMapping
:根据 Bean 名称匹配 URL。
处理器适配器 - HandlerAdapter
作用:调用具体的处理器方法,并处理参数绑定和返回值。
public interface HandlerAdapter {
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
}
关键实现:
RequestMappingHandlerAdapter
(处理@Controller)HttpRequestHandlerAdapter
(处理Servlet API)
参数解析:通过
HandlerMethodArgumentResolver
解析方法参数(如@RequestParam
,@PathVariable
)。
视图解析器 - ViewResolver
作用:将逻辑视图名(如
"home"
)解析为实际视图(如 JSP、Thymeleaf)。典型实现:
InternalResourceViewResolver
(JSP)配置示例:
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }
JSON响应处理机制
大部分时候我们使用的是JSON作为数据返回,这时候就不是ViewResolver作为返回解析,JSON 返回和视图返回在结果处理阶段完全分离,前者走消息转换器HttpMessageConverter,后者走视图解析器ViewResolver。
核心组件 - HttpMessageConverter
public interface HttpMessageConverter<T> {
boolean canRead/Write(Class<?> clazz, MediaType mediaType);
T read(Class<? extends T> clazz, HttpInputMessage inputMessage);
void write(T t, MediaType contentType,
HttpOutputMessage outputMessage);
}
常用实现:
MappingJackson2HttpMessageConverter
(JSON)Jaxb2RootElementHttpMessageConverter
(XML)