springMVC常見視圖組件與RESTFul編程風(fēng)格詳解
常見的視圖組件
Spring MVC支持的常見視圖包括:InternalResourceView:內(nèi)部資源視圖(Spring MVC內(nèi)置的,專門為jsp模板語法準(zhǔn)備的)、RedirectView(重定向視圖(Spring MVC內(nèi)置的,用來完成重定向效果)、ThymeleafView(第三方,專門為ThymeleafView模板語法準(zhǔn)備的)......
實現(xiàn)視圖機制的核心類和核心接口
- DispatcherServlet:前端控制器
- 負(fù)責(zé)接收前端請求
- 根據(jù)請求路徑找到對應(yīng)的處理器方法
- 執(zhí)行處理器方法
- 最終返回ModelAndView對象
- ViewResolver:視圖解析器接口
? 這個接口的作用是將邏輯視圖名稱轉(zhuǎn)換為物理視圖名稱。并最終返回一個view接口對象。
- View:視圖接口
? 這個接口負(fù)責(zé)將模板語法的字符串轉(zhuǎn)換成HTML代碼,并且將HTML代碼響應(yīng)給瀏覽器進行渲染。
轉(zhuǎn)發(fā)與重定向的區(qū)別
| 轉(zhuǎn)發(fā) | 重定向 |
|---|---|
| 一次請求,瀏覽器地址欄不會發(fā)生變化 | 兩次請求,瀏覽器地址欄會發(fā)生變化 |
| 轉(zhuǎn)發(fā)代碼:request.getRequestDispatcher("/index").forward(request,response); | 重定向代碼:response.sendRedirect("/webapp/index"); |
| 服務(wù)器內(nèi)部資源跳轉(zhuǎn),由服務(wù)器控制,不可實現(xiàn)跨域訪問 | 可以完成內(nèi)部資源跳轉(zhuǎn),也可以完成跨域訪問 |
| 可以訪問WEB-INF目錄下受保護的資源 | 無法訪問WEB-INF目錄下受保護的資源。(因為重定向相當(dāng)于瀏覽器重新發(fā)送了一次請求,瀏覽器發(fā)送的請求無法訪問被保護的資源) |
springMVC實現(xiàn)轉(zhuǎn)發(fā)forward
@RequestMapping("/a")
public String toA(){
// 采用springmvc的視圖轉(zhuǎn)發(fā)機制,跳轉(zhuǎn)到/b
// 格式:forward:下一個資源的路徑,這里的b不是邏輯視圖名稱,是一個資源路徑
return "forward:/b";
}
@RequestMapping("/b")
public String toB(){
return "b";
}springMVC實現(xiàn)重定向
@RequestMapping("/a")
public String toA(){
// 采用springmvc的視圖重定向機制,跳轉(zhuǎn)到/b
// 格式:redirect:下一個資源的路徑
// 如果要實現(xiàn)跨域,需要寫全路徑,比如:https://baidu.com
return "redirect:b";
}
@RequestMapping("/b")
public String toB(){
return "b";
}mvc:view-controller
這個配置用于將某個請求映射到特定的視圖上,即指定某一個URL請求到一個視圖資源的映射。使得這個視圖資源可以被訪問。相當(dāng)于一個獨立的處理程序,不需要編寫Controller,只需要指定URL和視圖名稱就可以了。
一般用來配置首頁、錯誤頁等。
在springmvc-servlet.xml文件中添加如下配置:
<!-- 配置視圖控制器,必須開啟注解驅(qū)動才能生效-->
<!-- path="/ok"表示訪問路徑,view-name="ok"表示視圖名稱。
訪問http://localhost:8080/springmvc-04/ok時,
會直接返回ok.html頁面,不需要經(jīng)過控制器方法的處理-->
<mvc:view-controller path="/ok" view-name="ok" />
<!-- 開啟注解驅(qū)動,支持@RequestMapping等注解-->
<mvc:annotation-driven />訪問靜態(tài)資源
使用默認(rèn)Servlet處理靜態(tài)資源
在springmvc-servlet.xml文件中添加如下配置:
<!-- 開啟默認(rèn)的servlet處理器,允許靜態(tài)資源(如CSS、JavaScript、圖片等)通過默認(rèn)的servlet進行處理,而不是被Spring MVC攔截。
這對于提供靜態(tài)資源非常重要,否則這些資源可能無法正確加載。
當(dāng)請求的URL沒有匹配到任何控制器方法時,默認(rèn)的servlet處理器會嘗試查找對應(yīng)的靜態(tài)資源并返回給客戶端。
例如,如果請求http://localhost:8080/springmvc-04/css/style.css,默認(rèn)的servlet處理器會嘗試找到webapp目錄下的css/style.css文件并返回給客戶端。
如果沒有開啟默認(rèn)的servlet處理器,Spring MVC會嘗試處理所有請求,包括靜態(tài)資源的請求,這可能會導(dǎo)致靜態(tài)資源無法正確加載,出現(xiàn)404錯誤。
因此,開啟默認(rèn)的servlet處理器是確保靜態(tài)資源能夠正確加載的重要配置。
需要注意的是,默認(rèn)的servlet處理器只會處理那些沒有被Spring MVC攔截的請求,如果請求被Spring MVC攔截了,那么默認(rèn)的servlet處理器就不會介入處理了。
另外,默認(rèn)的servlet處理器也不會處理那些被Spring MVC攔截但沒有找到匹配的控制器方法的請求,這些請求會直接返回404錯誤,而不會嘗試查找靜態(tài)資源。
因此,開啟默認(rèn)的servlet處理器是確保靜態(tài)資源能夠正確加載的重要配置,但也需要確保Spring MVC的請求映射配置正確,以避免不必要的請求被Spring MVC攔截,導(dǎo)致靜態(tài)資源無法加載。
-->
<mvc:default-servlet-handler />使用mvc:resources標(biāo)簽配置靜態(tài)資源
使用mvc:resources標(biāo)簽必須開啟注解驅(qū)動 <mvc:annotation-driven /> 。
在springmvc-servlet.xml文件中添加如下配置:
<!-- 開啟注解驅(qū)動,支持@RequestMapping等注解-->
<mvc:annotation-driven />
<!-- 配置靜態(tài)資源處理器,mapping屬性指定訪問路徑,location屬性指定資源位置。
例如,mapping="/static/**"表示訪問路徑以/static/開頭的請求會被該資源處理器處理,location="/static/"表示資源文件位于webapp目錄下的static文件夾中。
當(dāng)請求http://localhost:8080/springmvc-04/static/css/style.css時,該資源處理器會嘗試找到webapp目錄下的static/css/style.css文件并返回給客戶端。
-->
<mvc:resources mapping="/static/**" location="/static/" />RESTFul編程風(fēng)格
RESTFul(Respresentational State Transfer 表述性狀態(tài)轉(zhuǎn)移 簡稱REST)是web服務(wù)接口的一種設(shè)計風(fēng)格。
RESTFul對一個web服務(wù)接口規(guī)定了哪些東西?
- 對請求的URL格式有約束和規(guī)范
- 對HTTP請求方式有約束和規(guī)范
- 對請求和響應(yīng)的數(shù)據(jù)格式有約束和規(guī)范
- 對HTTP狀態(tài)碼有約束和規(guī)范
REST對請求方式的約束:
- 查詢必須是get請求
- 新增必須是post請求
- 修改必須是put請求
- 刪除必須是delete請求
RESTFul對URL的約束和規(guī)范的核心是采用不同的請求方式+URL來確定web服務(wù)中的資源。
RESTFul風(fēng)格查詢所有數(shù)據(jù)
@GetMapping("/user")
public String getAllUsers() {
return "success";
}
RESTFul風(fēng)格根據(jù)id查詢一條數(shù)據(jù)
@GetMapping("/user/{id}")
public String getUserById(@PathVariable("id") Integer id) {
return "success";
}
RESTFul風(fēng)格新增用戶信息
@PostMapping("/user")
public String saveUser(User user) {
return "success";
}
RESTFul風(fēng)格修改用戶信息
修改用戶信息必須發(fā)送put請求。
如何發(fā)送put或delete請求呢?
- 要想發(fā)送put請求,。首先必須是一個post請求
- 在post請求表單中添加隱藏域
<!--name 必須是_method,value必須是put或者是delete--> <input type="hidden" name="_method" value="put">
- 在web.xml添加一個過濾器
<!--這個過濾器的作用是將HTTP請求中的隱藏字段(通常是一個名為"_method"的參數(shù))轉(zhuǎn)換為HTTP方法(如PUT、DELETE等)。
這對于HTML表單來說非常有用,因為HTML表單只支持GET和POST方法,
而通過使用隱藏字段,可以模擬其他HTTP方法,從而實現(xiàn)更豐富的RESTful API設(shè)計。-->
<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>@PutMapping("/user")
public String modifyUser(User user) {
return "success";
}
RESTFul風(fēng)格刪除用戶信息
@DeleteMapping("/user/{id}")
public String deleteUserById(@PathVariable("id") Integer id) {
return "success";
}到此這篇關(guān)于springMVC-常見視圖組件與RESTFul編程風(fēng)格的文章就介紹到這了,更多相關(guān)springMVC-常見視圖組件與RESTFul編程風(fēng)格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 實戰(zhàn)項目之家居購物商城系統(tǒng)詳解流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個家居購物商城系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
Java多線程的其他知識_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Java多線程的其他知識,需要的朋友可以參考下2017-05-05
java中將一個實體類復(fù)制到另一個實體類的3種方法示例
這篇文章主要給大家介紹了關(guān)于java中將一個實體類復(fù)制到另一個實體類的3種方法,所謂實體類就是一個擁有Set和Get方法的類,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
SpringBoot集成ElasticSearch(ES)實現(xiàn)全文搜索功能
Elasticsearch是一個開源的分布式搜索和分析引擎,它被設(shè)計用于處理大規(guī)模數(shù)據(jù)集,它提供了一個分布式多用戶能力的全文搜索引擎,本文將給大家介紹SpringBoot集成ElasticSearch(ES)實現(xiàn)全文搜索功能,需要的朋友可以參考下2024-02-02
springboot數(shù)據(jù)庫密碼加密的配置方法
這篇文章主要給大家介紹了關(guān)于springboot數(shù)據(jù)庫密碼加密的配置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

