java 視圖解析器_SpringMVC——視圖和視圖解析器

請求處理方法執行完成后,最終返回一個 ModelAndView對象。對于那些返回 String,View 或 ModeMap 等類型的處理方法,Spring MVC 也會在內部將它們裝配成一個ModelAndView 對象,它包含了邏輯名和模型對象的視圖

Spring MVC 借助視圖解析器(ViewResolver)得到最終的視圖對象(View),最終的視圖可以是 JSP ,也可能是Excel、JFreeChart 等各種表現形式的視圖

對于最終究竟采取何種視圖對象對模型數據進行渲染,處理器并不關心,處理器工作重點聚焦在生產模型數據的工作上,從而實現 MVC 的充分解耦

一、視圖

視圖的作用是渲染模型數據,將模型里的數據以某種形式呈現給客 戶。

為了實現視圖模型和具體實現技術的解耦,Spring 在 org.springframework.web.servlet 包中定義了一個高度抽象的View 接口:

視圖對象由視圖解析器負責實例化。由于視圖是無狀態的,所以他們 不會有線程安全的問題

常用的視圖實現類

視圖實現類說明

InternalResourceView

將jsp或其他資源封裝成一個視圖,這是InternalResourceViewResolver解析成的視圖

JstlView

如果jsp文件中需要用到JSTL國際化標簽功能,則需要使用該視圖類,而非InternalResourceView視圖類

XsltView

XSTL驅動的視圖

TilesView

基于Tiles頁面布局的視圖

TilesJstlView

如果Tiles模版的jsp組成文件使用到了JSTL了,則需要用該視圖替換TilesView

AbstractExcelView

Excel視圖抽象類,開發者需要繼承AbstractExcelView,獲取視圖模型進行填充,實現自己的文檔視圖,需要依賴POI

AbstractJExcelView

和AbstractExcelView只不過他是依賴JExcelAPI

AbstractPdfStamperView

PDF文檔視圖抽象類,通過AcroForm對PDF文檔進行操作

AbstractPdfView

PDF文檔視圖抽象類,可以通過該抽象類實現自己的PDF文檔視圖,依賴iText

FreeMarkView

使用FreeMark模版引擎的視圖

VelocityLayoutView

使用Velocity模版引擎的視圖

VelocityView

使用Velocity模版引擎的視圖

ConfigurableJasperReportsView

使用java JasperReports報表技術的視圖

JasperReportsCsvView

使用java JasperReports報表技術的視圖

JasperReportsHtmlView

使用java JasperReports報表技術的視圖

JasperReportsMultiFormatView

使用java JasperReports報表技術的視圖

JasperReportsPdgView

使用java JasperReports報表技術的視圖

JasperReportsXlsView

使用java JasperReports報表技術的視圖

MarshallingView

通過oxm和Marshaller技術將模型數據以xml方式輸出

MappingJackson2JsonView

將模型數據通過Jackson開發框架的ObjectMapper已JSON方式輸出

MappingJackson2XmlView

將模型數據通過Jackson開發框架的ObjectMapper已XML方式輸出

redirectView

通過redirect:和forword:前綴進行重定向的視圖

二、視圖解析器

SpringMVC 為邏輯視圖名的解析提供了不同的策略,可 以在 Spring WEB 上下文中配置一種或多種解析策略,并 指定他們之間的先后順序。每一種映射策略對應一個具體 的視圖解析器實現類。

視圖解析器的作用比較單一:將邏輯視圖解析為一個具體 的視圖對象。

所有的視圖解析器都必須實現 ViewResolver 接口

常用的視圖解析器

視圖解析器實現類說明

beanNameViewResolver

常用,將視圖名解析為一個bean,視圖名是bean的id

XmlViewResolver

和beanNameViewResolver類似,它和beanNameViewResolver的區別是bean的定義是放在xml文件中,而不是DispatchServert的配置文件中

ResourceBundleViewResolver

可以利用該類為不同本地化類型提供不同的解析結果

InternalResourceViewResolver

常用,一般通過該類配置前綴和后綴,然后解析為一個URL文件,例如jsp頁面,解析優先級最低

XsltViewResolver

將視圖名解析為一個指定的XSLT樣式表的URL文件

JasperReportsViewResolver

JasperReports是一個基于java的開源報表工具,該解析器將視圖名解析為報表文件對應的路徑

FreeMarkerViewResolver

解析基于FreeMarker模版技術的模版文件

VelocityViewResovler, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VelocityLayoutViewResovler

解析為基于Velocity模版技術的模版文件

ContentNegotiatingViewResovler

常用,內容協商視圖解析器,它不負責具體的視圖解析,而且根據請求的媒體類型,從注冊的視圖解析器中選擇一個合適的解析器來將視圖解析,解析優先級最高

程序員可以選擇一種視圖解析器或混用多種視圖解析器

每個視圖解析器都實現了 Ordered 接口并開放出一個 order 屬性,可以通過 order 屬性指定解析器的優先順序,order 越小優先級越高。

SpringMVC 會按視圖解析器順序的優先順序對邏輯視圖名進行解 析,直到解析成功并返回視圖對象,否則將拋出 ServletException 異常

InternalResourceViewResolver

JSP 是最常見的視圖技術,可以使用 InternalResourceViewResolver 作為視圖解析器:

Excel 視圖

若希望使用 Excel 展示數據列表,僅需要擴展 SpringMVC 提供的 AbstractExcelView 或 AbstractJExcel View 即可。實現 buildExcelDocument() 方法,在方法中使用模型數據對象構建 Excel 文檔就可以 了。

AbstractExcelView 基于 POI API,而 AbstractJExcelView 是基于 JExcelAPI 的。

視圖對象需要配置 IOC 容器中的一個 Bean,使用 BeanNameViewResolver 作為視圖解析器即可

若希望直接在瀏覽器中直接下載 Excel 文檔,則可以設置 響應頭 Content-Disposition 的值為 attachment;filename=xxx.xls

三、重定向和轉發

①、一般情況下,控制器方法返回字符串類型的值會被當成邏 輯視圖名處理

②、如果返回的字符串中帶 forward: 或 redirect: 前綴 時,SpringMVC 會對他們進行特殊處理:

將 forward: 和 redirect: 當成指示符,其后的字符串作為 URL 來處理

redirect:success.jsp:會完成一個到 success.jsp 的重定向的操作

forward:success.jsp:會完成一個到 success.jsp 的轉發操作

org.springframework.web.servlet.view.UrlBasedViewResolver.class

protected View createView(String viewName, Locale locale) throwsException {if(!this.canHandle(viewName, locale)) {return null;

}else{

String forwardUrl;if(viewName.startsWith("redirect:")) {

forwardUrl= viewName.substring("redirect:".length());

RedirectView view= new RedirectView(forwardUrl,

this.isRedirectContextRelative(),

this.isRedirectHttp10Compatible());return this.applyLifecycleMethods(viewName, view);

}else if(viewName.startsWith("forward:")) {

forwardUrl= viewName.substring("forward:".length());return newInternalResourceView(forwardUrl);

}else{return super.createView(viewName, locale);

}

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539974.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android app 應用簽名

為什么要簽名? 這個要從Android的系統設計來解釋。 ---Android系統中的每個應用都是一個用戶,應用的包名(清單文件中 package的值)就是用戶名。 當一個已安裝的應用A和一個正要安裝的應用B,它們的包名相同&#xff…

[.Net線程處理系列]專題五:線程同步——事件構造

引言: 其實這部分內容應該是屬于專題四,因為這篇也是講關于線程同步的,但是由于考慮到用戶的閱讀習慣問題,因為文章太長了,很多人不是很愿意看包括我也是這樣的,同時也有和我說可以把代碼弄成折疊的&#x…

java redis set list_RedisTemplate的各種操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...

注入以下RedisTemplateAutowiredprivate RedisTemplate redisTemplate;1、保存和讀取Set:代碼示例:SetOperations set redisTemplate.opsForSet(); set.add("set1","22"); set.add("set1","33"); set.add(&quo…

閃屏頁面(Splash)開發

業余作品--365安全衛士 ------------------------------------------- 閃屏頁面(Splash):app剛啟動時的頁面 作用: 1、展示公司品牌logo 2、應用初始化。如游戲app第一次啟動初始化數據 3、檢測新版本。 4、檢測程序合法性。如 招商銀行app在啟動…

matlab2016b ubuntu命令行安裝 + matconvnet的安裝

0. 下載安裝包 下載的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso。 1. 拷貝安裝文件并上傳服務器 在Windows下用虛擬光驅打開,并將R2016b_glnxa64_dvd1.iso和R2016b_glnxa64_dvd2.iso所有內容復…

科普dip,dp,sp,dpi,ppi,px,Density

一、概念 DPI:DPI是Dots Per Inch的縮寫,也就是“每英寸點數”,打印機分辨率。這里所說的“點”,在屏幕上并不是不變的,并不是唯一對應屏幕上的像素點,而是受到分辨率等因素的影響。這個點有可能是1個像素…

do與mysql數據類型對照_dophon-db: dophon框架的數據庫模塊,支持mysql,sqlite數據庫,帶有orm持久化功能與鏈式操作實例,貼近邏輯習慣,支持mysql多數據源配置...

dophon-db項目介紹dophon框架的數據庫模塊,也可單獨作為一個與數據庫模塊交互的部件支持mysql數據庫連接支持orm形式的數據操作如有疑問請發送郵件聯系作者:ealohu163.com軟件架構模塊架構分為以組件:mysql連接組件(包括連接池,連接封裝類,分頁,結果輸出過濾器,遠程接收器,增量…

clamp 函數

返回范圍內的一個數值。可以使用 clamp 函數將不斷增加、減小或隨機變化的數值限制在一系列的值中。 float clamp(float minnumber, float maxnumber, float parameter) 最小數值和最大數值指定返回值的范圍。 參數是值要鉗制在范圍內的屬性或變量。 如果參數位于最小數值和最大…

jquery $.each遍歷json數組方法

轉載地址&#xff1a;http://blog.sina.com.cn/s/blog_636f2d150101ezs1.html <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.o…

java 責任鏈模式 鏈表_責任鏈模式的實現及源碼中應用

01—責任鏈模式的實現假設一個出差任務的流程需要審批出差行程和出差報銷金額。那么&#xff0c;對應兩個部門的審核。我們先定義一個出差任務Task類&#xff1a;然后&#xff0c;我們定義一個抽象的處理類Handler&#xff0c;其中具體的處理方法Handle交給子類去實現。然后&am…

JQuery $.each遍歷JSON字符串報Uncaught TypeError:Cannot use 'in' operator to search for

查看一個簡單的jQuery的例子來遍歷一個JavaScript數組對象。 [js] view plaincopy var json [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":&quo…

php setcookie 過期,php cookie怎么設置過期時間?

PHP中可以使用setcookie()函數設置cookie的過期時間。語法為“setcookie(name,value,expire,path,domain,secure)”&#xff1b;其中expire參數用于指定cookie的有效期&#xff0c;即過期時間戳。setcookie() 函數向客戶端發送一個 HTTP cookie。cookie 是由服務器發送到瀏覽器…

nginx自定義500、404錯誤頁面

1&#xff0c;首先在http添加以下內容 http{ fastcgi_intercept_errors on; } 2&#xff0c;server中添加以下內容&#xff1a; 注意路徑 error_page 500 502 503 504 /500.html; location /500.html { internal; } error_page 404 /404.html; location /404.html { intern…

php如何輸出復選框的值,php 怎么輸出復選框呢?

表單有6個復選框&#xff0c;如果選中的分別是第126個&#xff0c;數據庫存為 1&#xff0c;2&#xff0c;6現在的問題是 在修改的頁面 怎么用php從數據庫取值&#xff0c;輸出6個復選框&#xff0c;讓126為checked &#xff1f;回復討論(解決方案)$row[id]1;>我的意思是 從…

jQuery Mobile動態刷新頁面樣式

見 百度經驗 http://jingyan.baidu.com/article/7f766dafbc18f24101e1d014.html JQM里面當我們更新了某些頁面標簽(如: listview, radiobuttons, checkboxes, select menus)里的數據時,必須做refresh操作. 為什么必須做refresh操作操作呢?因為JQM在做頁面渲染的時候,為了使樣…

R-CNN論文翻譯

R-CNN論文翻譯Rich feature hierarchies for accurate object detection and semantic segmentation用于精確物體定位和語義分割的豐富特征層次結構2017-11-29摘要過去幾年&#xff0c;在權威數據集PASCAL上&#xff0c;物體檢測的效果已經達到一個穩定水平。效果最好的方法是融…

inflate簡介,LayoutInflater和inflate()方法的用法

一、inflate簡介 inflate這個方法總共有四種形式&#xff08;見下面&#xff09;&#xff0c;目的都是把xml表述的layout轉化為View對象。 其中有一個比較常用&#xff0c;View inflate(int resource, ViewGroup root)&#xff0c;另三個&#xff0c;其實目的和這個差不多。 …

php ci框架 實例化類,php框架CI(codeigniter)自動加載與自主創建對象操作實例分析...

本文實例講述了php框架CI(codeigniter)自動加載與自主創建對象操作。分享給大家供大家參考&#xff0c;具體如下&#xff1a;CI的autoload很好用&#xff0c;自動創建對象&#xff0c;但是注意&#xff0c;他的對象只有一個。我們很多情況下需要生成對象&#xff0c;這就很麻煩…

sass、gulp應用

Sass介紹n CSS 不是一個編程語言&#xff0c;可以用它來開發網頁樣式&#xff0c;但是沒有辦法用它進行編程。SASS 的出現&#xff0c;讓 CSS 實現了通過代碼編程來實現的方式。n SASS 是一種 CSS 開發工具&#xff0c;提供了許多便利的寫法&#xff0c;讓CSS 的處理實現了可編…

自定義控件SettingItemView

一、效果圖 選中&#xff1a;顯示自動更新開啟不選擇&#xff1a;顯示自動更新關閉------------在布局文件中的使用方式和android自生的控件一樣 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andro…