SpringMVC攔截器攔截不了Controller

問題描述

通過debug模式發現每次執行controller的請求,請求都是先進入controller方法
在這裏插入圖片描述
然後才進入Interceptor攔截器方法
在這裏插入圖片描述

問題分析及解決方法

  通過上圖分析可知,攔截器實際上攔截的並不是controller請求,而是/favicon.ico請求。由此可知該攔截器攔截不了controller請求。
  通過查閱資料得知是因爲<mvc:annotation-driven/>標籤有默認的攔截器,它已經註冊了一個DefaultAnnotationHandlerMapping ,自己定義的攔截器優先級沒有它高,導致不會調用自己定義的攔截器。
  由於我把<mvc:annotation-driven/>標籤寫在了applicationContext配置文件中,我首先試着在web.xml中把springmvc-config的配置寫在applicationContext配置上面,重新部署項目,發現還是攔截不到controller請求,查閱資料發現:
applicationContext.xml是隨ContextLoaderListener的加載而執行的,
而springmvc-config.xml是隨DispatcherServlet的加載而執行的,
在web.xml中,加載順序是listener>filter>servlet
所以applicationContext.xml先加載!

  於是,我將<mvc:annotation-driven/>標籤寫到springmvc-config.xml配置文件中,重新部署項目,問題成功解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章