springmvc視圖解析器_SpringMVC視圖及REST風格

17fc57cceda281ac2651e9a0b199651a.png

什么是視圖解析器?

springMVC用于處理視圖最重要的兩個接口是ViewResolver和View。

ViewResolver的主要作用是把一個邏輯上的視圖名稱解析成一個真的的視圖,而SpringMVC中用于把View對象呈現給客戶端的是View對象本身,而ViewResolver只是把邏輯視圖名稱解析為對象的View對象。

View接口的主要作用是用來處理視圖,返給給客戶端。

3a4eb618612a7ce422a2f560f383328b.png

視圖解析器的執行流程:

請求方法執行完成后,最終返回一個ModelAndView對象,對于那些返回String,View,ModelMap等類型SpingMVC最終會在內部給他們裝配成一個ModelAndView對象,它包含了邏輯名和模型對象的視圖。StringMVC借助視圖解析器得到最終的視圖對象,最終的視圖可以是JSP,也可能是其他的文件形式的視圖。對于最終采取那一種方式渲染處理器并不關心,處理器重點焦距在生產模型數據的工作上,從來實現了MVC充分的解耦。

視圖:

視圖的作用是渲染模型數據,將模型里面的數據以某種形式呈現給用戶。為了實現視圖模型和具體實現技術的解耦,Sping定義了一個View接口。視圖對象由視圖解析器負責實例化,由于視圖是無狀態的,所以它們不會有線程安全問題。

常用的視圖實現類:

InternalResourceView:將JSP資源封裝成一個視圖,是springmvc默認使用的視圖解析器。

JstlView:在JSP項目中引入jstl包springmvc會自動使用該解析器

MapingJackJsonView:將模型通過Jackson開源框架的ObjectMapper以Json方式輸出。

AbstractExcelView:Excel文檔視圖的抽象類,該視圖基于POI構造Excel文檔

AbstractPdfVIew:PDF文檔視圖的抽象類,該視圖基于iText構建Pdf文檔

BeanNameViewResolver:將邏輯視圖名解析為一個Bean,Bean的id等于邏輯視圖名。

視圖解析器的作用比較單一,將邏輯視圖解析為一個具體的視圖對象,所有的視圖解析器必須實現ViewResolver接口。

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

bae9295e2d5a0ba88baaccac0554b6ce.png

項目中只要引入了JSTL標簽則springmvc會自動把視圖有InternalResourceView轉換成JstlView,JstlView是它的子類。

每一個視圖解析器都實現了Ordered接口并開發出一個order屬性,可以通過它設置解析器的優先級,order越小優先級越高。Spring MVC會按視圖解析器順序的優先級對邏輯視圖名進行解析,直到解析成功并返回視圖對象,否則會拋出ServletException異常

自定義視圖:

@Componentpublic class MyView implements View { @Override public String getContentType() { return "text/html"; } @Override public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().println("

Spring MVC Custom view

"); }}

我們需要將這個自定義的視圖實現View接口然后重寫接口中的兩個方法。然后我們把這個類聲明成Bean交給spring管理。在這里我們配置一個beanName解析器。

 

然后寫一個請求,這個請求返回Bean的名字,默認是首字母小寫以駝峰式展現。

@RequestMapping("myView") public String myView(){ System.out.println("myView load ..."); return "myView"; }

這樣就可以完成我們的自定以視圖。

關與重定向:

如果返回字符串中帶有”redirect:“或"forward:",SpringMvc會將其做特殊的處理。

如果我們需要直接訪問視圖可以這樣配置

REST章節

REST(Representational State Transfer):即(資源)表現層狀態傳遞。

資源(Resources):網絡上的一個實體,或者說網絡上的一段信息。它可以是一段文本,一段歌曲,一張圖片等等,可以用一個URL指向它,每個資源都有一個特定的,獨一無二的URL,要訪問這個資源,直接訪問這個URI即可。

表現層(Representation):將資源呈現出來的形式。

狀態轉化(State Transfer):每發出一個請求,就代表客戶端和服務器一次交互。HTTP協議是一個無狀態的協議,即所有的狀態都保存在服務器端。客戶端想要操作服務器,必須通過某些手段,讓服務器發生狀態轉化,而這種轉化是建立在表現層之上的,所以就是表現層狀態轉化。

在我們的SpringMVC之中支持HTTP四種請求狀態,REST規定的HTTP協議中四種表示操作方式的動詞

GET請求:獲取資源

POST請求:新建資源

PUT:更新資源

DELETE:刪除資源

我們需要在WEB.xml中配置實現PUT,DELETE請求方式,大家都知道在我們傳統的HTML中只有GET,POST兩種請求方式。

HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter/*

GET請求

GET請求:test RestGet請求
@RequestMapping(value="/testRest/{id}

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

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

相關文章

mysql5.7.x 1251_MySql-8.0.x免安裝版下載與配置,Navicat打開數據庫鏈接報錯1251的解決辦法...

概述MySQL從5.7一下子跳到了MySQL8.0, 其中的變化必然是很大的, 這里就不說了, 本文主要講解最新版MySQL安裝的事情.實際上5.7版本后的mysql免安裝版都是沒有data文件和my.ini文件的,下面再具體說明怎么生成,注意不能自己手動新建.下載下載程序必然去官網…

To install 64-bit ODBC drivers

為了更充分的利用硬件資源,我想很多人都開使用64位操作系統了,同時你可以也發現了在64位操作系統上ODBC的驅動找不到了,所以ODBC的東西都沒法用了。 因為2007以前版本的Office只有32位版本,所以我們不能在64位系統上使用ODBC。使用…

【Qt開發】QTableWidget設置根據內容調整列寬和行高

QTableWidget要調整表格行寬主要涉及以下一個函數 1.resizeColumnsToContents(); 根據內容調整列寬 2.resizeColumnToContents(int col); 根據內容自動調整給定列寬 3.horizontalHeader()->setResizeMode 把給定列…

深入淺出mysql數據開發_深入淺出MySQL數據庫開發、優化與管理維護 PDF掃描版[513KB]...

深入淺出MySQL數據庫開發、優化與管理維護 內容介紹:本書從數據庫的基礎、開發、優化、管理維護4個方面對MySQL進行了詳細的介紹,其中每一部分都獨立成篇。本書內容實用,覆蓋廣泛,講解由淺入深,適合于各個層次的讀者。…

Understand Lambda Expressions in 3 minutes(翻譯)

本文翻譯自CodeProject上的一篇簡單解釋Lambda表達式的文章,適合新手理解。譯文后面我補充了一點對Lambda表達式的說明。 1.什么是Lambda表達式? Lambda表達式是一種匿名方法,多數情況下用來在LINQ中快速創建委托。簡單地說,它代表…

Hibernate二級緩存配置

一、定義: 二級緩存是進程或集群范圍內的緩存,可以被所有的Session共享,是可配置的插件 二、二級緩存原理圖 解析:每次從二級緩存中取出的對象,都是一個新的對象。 三、配置步驟如下: 同理:以員…

redis配置主從沒效果_跟我一起學Redis之加個哨兵讓主從復制更加高可用

Redis哨兵(Sentinel)其實本質就是一個RedisServer節點,通過設置 運行模式 來開啟哨兵的功能;主要功能如下:監控(Monitoring ):哨兵節點會不斷地檢查的主服務和從服務的運行狀態;自動故障遷移(Automatic failover) &…

閏秒導致MySQL服務器的CPU sys過高

今天,有個哥們碰到一個問題,他有一個從庫,只要是啟動MySQL,CPU使用率就非常高,其中sys占比也比較高,具體可見下圖。 注意:他的生產環境是物理機,單個CPU,4個Core。 于是&…

position定位——讓人又愛又恨的屬性

關于css中的position這個屬性,在使用的時候,有時很強大,有時又讓人很無奈。 強大的時候,對于div中的一些小物件不方便使用margin或者padding的時候,給與position:absolute;再配備left、right、top和bottom,…

CentOS 6.8安裝Python2.7.13

轉載自:http://www.cnblogs.com/94YY/p/6224441.html查看當前系統中的 Python 版本python --version返回 Python 2.6.6 為正常。檢查 CentOS 版本cat /etc/redhat-release返回 CentOS release 6.8 (Final) 為正常。安裝所有的開發工具包yum groupinstall -y "D…

新安裝數據庫sqlserver2008r2,使用javaweb連接不上問題處理

鼠標右鍵【計算機】--》【管理】,打開界面如下: 選擇自己數據庫的實例名: 選擇TCP/IP:右鍵【屬性】,將所有TCP動態端口的【0】刪掉,TCP端口設為1433;重啟服務,即可連接。PS:不知道這…

vue 鼠標點擊事件_VBA代碼解決方案第115講:點擊鼠標實現精準控制觸發事件的VBA代碼第二方案...

大家好,我們今日繼續講解VBA代碼解決方案的第115講內容:工作表事件中,根據Target參數不同,實現精準控制觸發事件的VBA代碼第二方案。在上一講中我們講了利用Address的屬性實現控制觸發事件的方案,今日講解第二方案&…

mysql注入5.0以上_[Injection]對MYSQL 5.0服務器以上版本注入

How to do a SQL Injection for MYSQL Server 5.01. Find a vulnerable add a ‘ at the end of the site example: news.php?id1 add a ‘ at the end of the 1 and see if you get a syntax error2. order by #–Keep upping the # until you get an error.3. union all sel…

動態規劃(制表法)模板及應用

int cache[100][100] 初始化為全體為 -1,這樣在 cache 中存儲的可以是其他任意非負整數,也可以是布爾類型 0/1 (true/false),1. 模板 int cache[2500][2500];// 初始化為 -1,memset(cache, -1, sizeof(cach…

(翻譯)31天Windows Phone學習-1-項目模板

今天在在外文網站Google關于Windows Phone 7的學習資料,無疑間Google到了Jeff Blankenburg的 31 Days of Windows Phone這個系列,感覺寫的比較基礎和淺顯易懂,適合我這種入們級的人學習,所以準備拿來對Windows Phone 7的簡單入門學…

Mssql 跨域查詢

有數據庫test1和數據庫test2。其中test1中有表 table1、table2;test2 中有表 table1。三個表的字段都為為:id、xingming、shijian、shuliang。接下來我們就以上面的條件為例來介紹跨數據庫查詢和跨表 查詢的方法。 SELECT * FROM OPENROWSET(sqloledb…

arch mysql日志位置_MySQL 日志文件與相關參數

1 、參數文件及mysql參數查看mysql 的 my.cnf 配置文件位置命令:>./bin/mysql --help | grep my.cnf查看mysql 的參數設置命令: mysql > show variables --顯示所有參數; // show variables like log_error% 顯示某匹配參數mysql > select se…

MOSS點滴(2):自定義Application Page

在MOSS中后臺管理的頁面都是Application Page,比如網站設置的頁面(settings.aspx)就是典型的Application Page,它不能被Sharepoint Desiger定制。如果我們要修改只能手動的使用其他工具來修改,我們也可以添加Application Page,必須…

wpf使用webbrowser時提示當前頁面腳本發生錯誤_win7系統internet腳本錯誤的應對辦法...

最近有win7系統用戶反饋,上網時遇到ie瀏覽器總會提示internet腳本錯誤的問題,不知如何解決,為此非常苦惱,那么win7系統提示internet腳本錯誤怎么辦呢?就此問題,下面小編教你win7系統internet腳本錯誤的應對辦法。有不…

JDK的目錄結構及結構圖

-bin目錄: JDK開發工具的可執行文件 -lib目錄: 開發工具使用的歸檔包文件 -jre: Java 運行時環境的根目錄,包含Java虛擬機,運行時的類包和Java應用啟動器, 但不包含開發環境中的開發工具 -demo: 含有源代碼的程序示例 -include: 包含…