1. 程式人生 > >InternalResourceViewResolver檢視解析器(轉)

InternalResourceViewResolver檢視解析器(轉)

  轉載地址:https://www.cnblogs.com/liruiloveparents/p/5054605.html

  

springmvc在處理器方法中通常返回的是邏輯檢視,如何定位到真正的頁面,就需要通過檢視解析器。

springmvc裡提供了多個檢視解析器,InternalResourceViewResolver就是其中之一:

最常用的檢視解析器:InternalResourceViewResolver

image

 

當處理器返回“index”時,InternalResourceViewResolver解析器會自動新增字首和字尾:/WEB-INF/jsp/index.jsp

注意:這裡的order表示檢視解析的優先順序,數目越小優先順序越大(即:0為優先順序最高,所以優先進行處理檢視),

InternalResourceViewResolver在專案中的優先順序必須設定為最低,也就是order要最大。不然它會阻礙其他

檢視解析器。為什麼呢?

解釋如下:

我們知道,當處理器返回邏輯檢視時(也就是return “string”),要經過檢視解析器鏈,前面的解析器能處理的,就不會繼續往下傳播。

如果不能處理就要沿著解析器鏈繼續尋找,直到找到合適的檢視解析器(概括為:能解析的,不繼續往下找,不能解析的,要繼續往下找解析器)。

看下面的圖:

假如我們有幾個檢視解析器:檢視解析器1、檢視解析器2、檢視解析器3。如圖

image

 

當處理器(@controller)返回的邏輯檢視解析過程:

當經過檢視解析器1時,如果能解析就解析而且不會再繼續往下。如果不能執行就返回null,這樣下面的解析器才能處理。

但是對於解析器InternalResourceViewResolver來說,不管能不能解析它都不會返回null,也就是說它攔截了所有的邏輯檢視,

讓後續的解析器得不到執行,所以InternalResourceViewResolver必須放在最後。

記住一點:不能解析就返回null,這樣後續解析器才能解析。