SpringMVC視圖及REST風格的詳細分析(附程式碼)
這篇文章帶給大家的內容是關於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>");
}
}
<!-- 配置BeanName解析器 -->
<bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
@RequestMapping("myView") public String myView(){
System.out.println("myView load ...");
return "myView";
}
關與重定向:
#如果傳回字串中帶有」
<!– 直接配置对应的视图访问路径 --> <mvc:view-controller path="/hello" view-name="hello.jsp" /> <!-- 如果配置了mvc-controller会导致其它页面没法正常访问,还需要添加一个标签 --> <mvc:annotation-driven />
在我们的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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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