InternalResourceViewResolver是Spring中常用的視圖解析器,它可以將邏輯view名字解析為具體的物理視圖路徑,從而渲染出客戶端能夠直接訪問到的響應結果。
一、解析邏輯視圖名字
在Spring中,我們通常不直接返回物理視圖名字,而是使用邏輯視圖名字,InternalResourceViewResolver就是用來將邏輯視圖名字解析為對應的物理視圖文件路徑。下面是具體實現代碼:
@Bean public InternalResourceViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }
在這個例子中,InternalResourceViewResolver被配置為使用JSP作為物理視圖文件,在邏輯視圖名字後自動添加前綴”/WEB-INF/views/”和後綴”.jsp”。例如,邏輯視圖名字為”home”,Spring MVC會把它解析為物理視圖文件在服務器文件系統中的路徑“/WEB-INF/views/home.jsp”。
二、默認視圖名字
如果我們在Controller中不返回任何ModelAndView(即使用void類型作為方法返回值),InternalResourceViewResolver仍然可以渲染視圖。這時,底層將會根據當前請求的URL路徑作為默認的邏輯視圖名字。例如,如果URL路徑是/users/show,則默認的邏輯視圖名字將是”users/show”。這個功能可以通過下面的配置啟用或者禁用:
@Bean public InternalResourceViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); // 啟用或禁用基於URL的默認視圖名字 resolver.setAlwaysUseFullPath(false); return resolver; }
默認情況下,InternalResourceViewResolver啟用了基於URL的默認視圖名字模式。alwaysUseFullPath為false時,內部將忽略前導斜杠,默認地將視圖名組合到基本的解析目錄中。例如,當前請求的URL路徑是”/users/show”,InternalResourceViewResolver默認地會將邏輯視圖名字解析為”/WEB-INF/views/users/show.jsp”。
當alwaysUseFullPath被設置為true時,InternalResourceViewResolver將使用完整的請求URI作為默認的視圖名字。例如,如果當前的請求URL路徑是”/users/show”(注意這裡沒有前導斜杠),則默認的邏輯視圖名字將是”users/show”,而不是” /users/show”。在這種情況下,為了讓視圖解析器正常工作,必須在配置文件中顯示地設置“prefix”屬性。
三、定義視圖類型
InternalResourceViewResolver支持多種視圖類型,包括JSP、Thymeleaf、Freemarker等。我們可以通過subtype屬性來定義解析器使用的特定視圖類型。如果視圖類型未被指定,則InternalResourceViewResolver將根據結果的後綴名字來自動選擇視圖類型。
@Bean public InternalResourceViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); // 指定使用JSP作為視圖類型 resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class); return resolver; }
在上述例子中,我們通過設置ViewClass屬性,強制Spring MVC使用JSP作為視圖類型,而不是根據後綴名字自動選擇。
四、設置默認編碼
我們也可以為InternalResourceViewResolver指定默認的視圖編碼,以確保輸出的數據能夠正確解碼。這個配置也可以通過在servlet的上下文環境中配置來實現。
@Bean public InternalResourceViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); // 設置默認編碼為UTF-8 resolver.setContentType("text/html;charset=UTF-8"); return resolver; }
總結
InternalResourceViewResolver是Spring中常用的視圖解析器,它將邏輯視圖名字解析為物理視圖路徑,輸出最終的響應結果。在使用InternalResourceViewResolver時,我們需要注意以下幾點:
1. 配置前綴和後綴屬性,定義基礎的視圖解析路徑和文件的類型。
2. InternalResourceViewResolver支持JSP、Thymeleaf、Freemarker等多種視圖類型。我們可以通過subtype屬性來指定使用特定的視圖類型。
3. 在需要的情況下,我們可以禁用基於URL的默認視圖名字模式或通過alwaysUseFullPath為true啟用它。
4. InternalResourceViewResolver也可以設置默認編碼,以確保輸出的數據能夠正確解碼,這個配置也可以在servlet的上下文環境中實現。
總之,InternalResourceViewResolver是為Spring MVC應用提供視圖解析能力的一個重要的組件,通過合理的配置來使用視圖解析器,我們可以完成更為靈活和功能強大的Web應用程序。
原創文章,作者:MBDHN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/330794.html