首頁 Java java教程 SpringMVC視圖及REST風格的詳細分析(附程式碼)

SpringMVC視圖及REST風格的詳細分析(附程式碼)

Sep 26, 2018 pm 03:26 PM
springmvc

這篇文章帶給大家的內容是關於SpringMVC視圖及REST風格的詳細分析(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

什麼是視圖解析器?

springMVC用來處理視圖最重要的兩個介面是ViewResolver和View。

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

View介面的主要作用是用來處理視圖,回傳給客戶端。

視圖解析器的執行流程:

請求方法執行完成後,最終返回一個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作為視圖解析器

# #專案中只要引入了JSTL標籤則springmvc會自動把視圖有InternalResourceView轉換成JstlView,JstlView是它的子類別。 每一個視圖解析器都實作了Ordered介面並開發出一個order屬性,可以透過它來設定解析器的優先權,order越小優先權越高。 Spring MVC會依視圖解析器順序的優先權對邏輯視圖名稱進行解析,直到解析成功並返回視圖對象,否則會拋出ServletException異常

自訂視圖:

@Component
public class MyView implements View {

    @Override
    public String getContentType() {
        return "text/html";
    }

    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            response.getWriter().println("<h1>Spring MVC Custom view</h1>");
    }

}
登入後複製
我們需要將這個自訂的視圖實作View介面然後重寫介面中的兩個方法。然後我們把這個類別聲明成Bean交給spring管理。在這裡我們配置一個beanName解析器。
<!-- 配置BeanName解析器 -->
    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="1"/>
    </bean>
登入後複製
然後寫一個請求,這個請求回傳Bean的名字,預設是首字母小寫以駝峰式展現。
@RequestMapping("myView")    public String myView(){
        System.out.println("myView load ...");        
        return "myView";
    }
登入後複製
這樣就可以完成我們的自定以視圖。

關與重定向:




#如果傳回字串中帶有」

redirect :###“或"###forward:###",SpringMvc會將其做特殊的處理。 ##################如果我們需要直接存取檢視可以這樣配置############
<!– 直接配置对应的视图访问路径 -->
<mvc:view-controller path="/hello" view-name="hello.jsp" />
<!-- 如果配置了mvc-controller会导致其它页面没法正常访问,还需要添加一个标签 -->
<mvc:annotation-driven />
登入後複製
#########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过滤器实现PUT,DELETE请求 -->
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>
        org.springframework.web.filter.HiddenHttpMethodFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
登入後複製

GET请求

GET请求:
<a href="rest/testRest/10">test RestGet请求</a><br><br>

@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRestGet(@PathVariable Integer id){
    System.out.println("GET请求,获取id为:" + id + "的对象!");
    return SUCCESS;
}
登入後複製

Post请求

POST请求:
<form action="rest/testRest" method="post">
    <input type="submit" value="post请求" />
</form>

@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRestPost(){
    System.out.println("POST请求,添加新的对象!");
    return SUCCESS;
}
登入後複製

PUT和DELETE请求想要使用必须添加上面的过滤器,并且在Post请求中加上隐藏域name="_method",value="PUT/DELETE"。

PUT,请求其实是由POST请求转换而来的。

PUT请求:
<form action="rest/testRest" method="post">
    <!-- 添加隐藏域,名称为_method,value为请求方式 -->
    <input type="hidden" name="_method" value="PUT" />
    <input type="submit" value="put请求" />
</form>

@RequestMapping(value="/testRest",method=RequestMethod.PUT)
public String testRestPut(){
    System.out.println("PUT请求,更新操作!");
    return SUCCESS;
}
登入後複製

DELETE请求

DELETE请求:
<form action="rest/testRest/10000" method="post">
    <!-- 添加隐藏域,名称为_method,value为请求方式 -->
    <input type="hidden" name="_method" value="DELETE" />
    <input type="submit" value="delete请求" />
</form>

@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
    System.out.println("DELETE请求,删除操作!" + id);
    return SUCCESS;
}
登入後複製

重复一次第一章的内容在我们springmvc拦截所有请求会导致css,js,图片等不能引入我们可以这样解决:

<!--将非mapping配置下的请求交给默认的Servlet来处理-->
<mvc:default-servlet-handler/>
<!--如果添加了默认servlet,mvc请求将无效,需要添加annotation-driven-->
<mvc:annotation-driven></mvc:annotation-driven>
登入後複製

以上是SpringMVC視圖及REST風格的詳細分析(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

比較SpringBoot與SpringMVC的差異是什麼? 比較SpringBoot與SpringMVC的差異是什麼? Dec 29, 2023 am 10:46 AM

SpringBoot與SpringMVC的不同之處在哪裡? SpringBoot和SpringMVC是兩個非常流行的Java開發框架,用於建立Web應用程式。儘管它們經常分別被使用,但它們之間的差異也是很明顯的。首先,SpringBoot可以被看作是一個Spring框架的擴充或增強版。它旨在簡化Spring應用程式的初始化和配置過程,以幫助開發人

spring和springmvc有哪些差別 spring和springmvc有哪些差別 Dec 29, 2023 pm 05:02 PM

spring和springmvc的區別:1、定位和功能;2、核心功能;3、應用領域;4、擴展性。詳細介紹:1、定位和功能,Spring是一個綜合性的應用程式開發框架,提供了依賴注入、面向切面編程、事務管理等功能,旨在簡化企業級應用程式的開發,而Spring MVC是Spring框架中的一個模組,用於Web應用程式的開發,實現了MVC模式;2、核心功能等等。

SpringBoot與SpringMVC的差別是什麼? SpringBoot與SpringMVC的差別是什麼? Dec 29, 2023 pm 05:19 PM

SpringBoot和SpringMVC是Java開發中常用的兩個框架,它們都是由Spring框架所提供的,但在功能和使用方式上有一些區別。本文將分別介紹SpringBoot和SpringMVC的特點和區別。一、SpringBoot的特點:簡化配置:SpringBoot透過約定優於配置的原則,大大簡化了專案的配置過程。它可以自動配置專案所需的參數,開發人

springboot和springmvc有哪些差別 springboot和springmvc有哪些差別 Jun 07, 2023 am 10:10 AM

springboot和springmvc區別是:1、意義不同;2、配置不同;3、依賴項不同;4、開發時間不同;5、生產力不同;6、實現JAR打包功能的方式不同;7、是否提供批次處理功能;8、作用不同;9、社群和文件支援不同;10、是否需要部署描述符。

Java的SpringMVC攔截器怎麼用 Java的SpringMVC攔截器怎麼用 May 13, 2023 pm 02:55 PM

攔截器(interceptor)的作用SpringMVC的攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。將攔截器依一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在存取被攔截的方法或欄位時,攔截器鏈中的攔截器就會依其先前定義的順序被呼叫。攔截器也是AOP思想的具體實作。攔截器和過濾器區別區別過濾器(Filter)攔截器(Intercepter)使用範圍是servlet規格中的一部分,任何JavaWeb工程都可以使用是Spri

Java API 開發中使用 SpringMVC 進行 Web 服務處理 Java API 開發中使用 SpringMVC 進行 Web 服務處理 Jun 17, 2023 pm 11:38 PM

隨著網路的發展,Web服務越來越普遍。 JavaAPI作為一種應用程式接口,也不斷地推出新的版本來適應不同的應用場景。而SpringMVC作為一種流行的開源框架,能夠幫助我們輕鬆地建立Web應用程式。本文將詳細講解在JavaAPI開發中,如何使用SpringMVC進行Web服務處理,包括配置SpringMVC、編寫控制器、使用

比較SpringBoot和SpringMVC的異同點 比較SpringBoot和SpringMVC的異同點 Dec 29, 2023 am 08:30 AM

解析SpringBoot和SpringMVC之間的異同SpringBoot和SpringMVC是Java領域中非常重要的開發架構。雖然它們都屬於Spring框架的一部分,但在使用和功能上有一些明顯的區別。本文將對SpringBoot和SpringMVC進行比較,解析它們之間的異同。首先,讓我們來了解一下SpringBoot。 SpringBo

See all articles