springmvc在處理器方法中通常返回的是邏輯視圖,如何定位到真正的頁面,就需要通過視圖解析器。 springmvc里提供了多個視圖解析器,InternalResourceViewResolver就是其中之一: 最常用的視圖解析器:InternalResourceViewResolver 當處理器 ...
springmvc在處理器方法中通常返回的是邏輯視圖,如何定位到真正的頁面,就需要通過視圖解析器。
springmvc里提供了多個視圖解析器,InternalResourceViewResolver就是其中之一:
最常用的視圖解析器:InternalResourceViewResolver
當處理器返回“index”時,InternalResourceViewResolver解析器會自動添加首碼和尾碼:/WEB-INF/jsp/index.jsp
註意:這裡的order表示視圖解析的優先順序,數目越小優先順序越大(即:0為優先順序最高,所以優先進行處理視圖),
InternalResourceViewResolver在項目中的優先順序必須設置為最低,也就是order要最大。不然它會阻礙其他
視圖解析器。為什麼呢?
解釋如下:
我們知道,當處理器返回邏輯視圖時(也就是return “string”),要經過視圖解析器鏈,前面的解析器能處理的,就不會繼續往下傳播。
如果不能處理就要沿著解析器鏈繼續尋找,直到找到合適的視圖解析器(概括為:能解析的,不繼續往下找,不能解析的,要繼續往下找解析器)。
看下麵的圖:
假如我們有幾個視圖解析器:視圖解析器1、視圖解析器2、視圖解析器3。如圖
當處理器(@controller)返回的邏輯視圖解析過程:
當經過視圖解析器1時,如果能解析就解析而且不會再繼續往下。如果不能執行就返回null,這樣下麵的解析器才能處理。
但是對於解析器InternalResourceViewResolver來說,不管能不能解析它都不會返回null,也就是說它攔截了所有的邏輯視圖,
讓後續的解析器得不到執行,所以InternalResourceViewResolver必須放在最後。
記住一點:不能解析就返回null,這樣後續解析器才能解析。