Spring MVC 的核心流程由「前端控制器 → 處理器映射器 → 處理器適配器 → 處理器」構成。本文聚焦註解式映射器與適配器的演進、配置方式及 Handler 開發要點。
DispatcherServlet 啟動時從 DispatcherServlet.properties 載入默認組件。若在 springmvc.xml 未顯式配置,則使用默認策略。
| Spring 版本 | 處理器映射器 | 處理器適配器 |
|---|---|---|
| 3.1 之前 | DefaultAnnotationHandlerMapping | AnnotationMethodHandlerAdapter |
| 3.1 之後 | RequestMappingHandlerMapping | RequestMappingHandlerAdapter |
注意:映射器與適配器必須成對使用(版本一致),否則請求無法正確分發與執行。
<!-- 註解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 註解適配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<mvc:annotation-driven/>
一行配置自動註冊:
RequestMappingHandlerMapping、RequestMappingHandlerAdapterMappingJackson2HttpMessageConverter 等)實際開發中請直接使用 <mvc:annotation-driven/>,勿重複配置上述兩個 Bean。
@Controller
public class ItemsController3 {
@RequestMapping("/queryItems")
public ModelAndView queryItems() throws Exception {
// 模擬服務層查詢
List<Items> itemsList = Arrays.asList(
new Items("聯想筆記本", 6000f, "ThinkPad T430"),
new Items("蘋果手機", 5000f, "iPhone 6")
);
ModelAndView mv = new ModelAndView();
mv.addObject("itemsList", itemsList);
mv.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return mv;
}
}
<context:component-scan base-package="com.iot.ssm.controller"/>
掃描 @Controller、@Service、@Repository 等註解,自動註冊 Bean,無需逐個在 XML 定義。