1.首先,用戶發送請求,DispatcherServlet會攔截請求,但DispatcherServlet收到請求後不進行處理,而對URL進行解析得到相應的URI(資源標識符). 2.DispatcherServlet調用用HandlerMapping,HandlerMapping的作用就是解析請求 ...
1.首先,用戶發送請求,DispatcherServlet會攔截請求,但DispatcherServlet收到請求後不進行處理,而對URL進行解析得到相應的URI(資源標識符).
2.DispatcherServlet調用用HandlerMapping,HandlerMapping的作用就是解析請求鏈接(URI),然後根據請求鏈接,找到合適的處理器Handler(所說的Handler,也就是Controller或Action),HandlerMapping但並不是簡單的返回處理器,而是將處理器和攔截器封裝,形成一個處理器執行鏈(HandlerExecuteChain)返回給DispatcherServlet.
3.DispatcherServlet 根據獲得的Handler類型,選擇一個合適的HandlerAdapter.
4.在HandlerAdapter執行前調用HandlerInterceptor的preHander()方法.
5.HandlerAdapter定義瞭如何處理請求的策略,通過請求URI,請求Method和處理器的requestMapping定義,最終調用Handler(Controller)的方法來處理請求,完成功能.
6.Controller向DispatcherServlet返回一個 ModelAndView 對象(包含模型數據,邏輯視圖名字)
7.根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet. 8.DispatcherServlet 根據ModelAndView實例中的模型數據,邏輯視圖名字把信息反饋給ViewResolver.9. ViewResolver用於處理視圖,然後返回給客戶端。
如果是xml配置,在Spring.xml的配置文件中,記得進行HandlerMapping,HandlerAdapter和ViewResolver的註冊,如果不進行註冊,Spring將使用預設的註冊.Controller類的添加,以便依賴註入 如果是註解的配置,需要在Spring.xml中添加
<context:annotation-config /> <!-- 簡化配置搭配@Resource、@PostConstruct、@PreDestroy等註解 --> <context:component-scan /> <!-- 自動掃描包路徑 --> <mvc:annotation-drivent /> <!-- 它會自動註冊DefaultAnnotationHanderMappint與AnnotationHanderAdapter這兩個bean,不過缺點是無法再註入interceptors屬性,就無法指定攔截器 -->