javascript
jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题
最近被問到過幾次關于springmvc多視圖解析器解析的問題;總結一下。
1、問題:
假設我有兩個jsp:
WEB-INF/html/a.jsp
WEB-INF/report/b.jsp
且我配置了視圖解析器:
然后呢,我分別返回視圖名為a和b;為什么a能找到,而b的時候是404;我配置了兩個視圖解析器,第一個找不到的話,第二個能找到啊?遇到過這個問題的朋友基本上會有類似的問題;
2、分析
此處我們使用了InternalResourceViewResolver,其有一個buildView方法,該方法一定會創建一個View;所以呢View永遠不為null(即使該jsp不存在);問題就是出在這;因為我們使用這個的時候默認是使用servlet forward轉發的,此時并不知道該jsp是否存在。
3、解決方案:
3.1、最簡單的辦法是使用其viewNames屬性,來指定一個是否可以處理的規則;
如上兩個的意思是對html或report開頭的視圖名進行處理,比如返回的視圖名為html/a 那么會交給viewNames為html*的那個解析器處理;支持的規則可以查看javadoc。
3.2、內容協商,根據請求時的MediaType來決定使用哪個View;比如根據不同的MediaType決定是JSON/XML/HTML展示時;可以搜索ContentNegotiatingViewResolver了解;
以上的方式對于請求的MediaType一樣,且視圖名沒有規則時一點用沒有。
3.3、如果僅有幾個不同的視圖需要特殊處理;可以考慮直接返回View對象進行處理;而直接不走ViewResolver;
3.4、如果以上都不滿足;那只能自己實現自己相應的ViewResolver,可以覆蓋兩個方法進行處理:
3.4.1、覆蓋UrlBasedViewResolver子類的canHandle;來決定哪些視圖名不需要當前ViewResolver進行處理;自己可以得到prefix +?suffix進行判斷具體的視圖頁面是否存在,當然這個可能會存在性能問題;考慮做緩存。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arm el2与el3_ARMv8的学习
- 下一篇: csv python 图片 存_Pyth