javascript
java rest 图_SpringMVC视图及REST风格
什么是視圖解析器?
springMVC用于處理視圖最重要的兩個(gè)接口是ViewResolver和View。
ViewResolver的主要作用是把一個(gè)邏輯上的視圖名稱解析成一個(gè)真的的視圖,而SpringMVC中用于把View對(duì)象呈現(xiàn)給客戶端的是View對(duì)象本身,而ViewResolver只是把邏輯視圖名稱解析為對(duì)象的View對(duì)象。
View接口的主要作用是用來(lái)處理視圖,返給給客戶端。
視圖解析器的執(zhí)行流程:
請(qǐng)求方法執(zhí)行完成后,最終返回一個(gè)ModelAndView對(duì)象,對(duì)于那些返回String,View,ModelMap等類型SpingMVC最終會(huì)在內(nèi)部給他們裝配成一個(gè)ModelAndView對(duì)象,它包含了邏輯名和模型對(duì)象的視圖。StringMVC借助視圖解析器得到最終的視圖對(duì)象,最終的視圖可以是JSP,也可能是其他的文件形式的視圖。對(duì)于最終采取那一種方式渲染處理器并不關(guān)心,處理器重點(diǎn)焦距在生產(chǎn)模型數(shù)據(jù)的工作上,從來(lái)實(shí)現(xiàn)了MVC充分的解耦。
視圖:
視圖的作用是渲染模型數(shù)據(jù),將模型里面的數(shù)據(jù)以某種形式呈現(xiàn)給用戶。為了實(shí)現(xiàn)視圖模型和具體實(shí)現(xiàn)技術(shù)的解耦,Sping定義了一個(gè)View接口。視圖對(duì)象由視圖解析器負(fù)責(zé)實(shí)例化,由于視圖是無(wú)狀態(tài)的,所以它們不會(huì)有線程安全問題。
常用的視圖實(shí)現(xiàn)類:
InternalResourceView:將JSP資源封裝成一個(gè)視圖,是springmvc默認(rèn)使用的視圖解析器。
JstlView:在JSP項(xiàng)目中引入jstl包springmvc會(huì)自動(dòng)使用該解析器
MapingJackJsonView:將模型通過(guò)Jackson開源框架的ObjectMapper以Json方式輸出。
AbstractExcelView:Excel文檔視圖的抽象類,該視圖基于POI構(gòu)造Excel文檔
AbstractPdfVIew:PDF文檔視圖的抽象類,該視圖基于iText構(gòu)建Pdf文檔
BeanNameViewResolver:將邏輯視圖名解析為一個(gè)Bean,Bean的id等于邏輯視圖名。
視圖解析器的作用比較單一,將邏輯視圖解析為一個(gè)具體的視圖對(duì)象,所有的視圖解析器必須實(shí)現(xiàn)ViewResolver接口。
JSP是最常用的視圖技術(shù),可以使用InternalResourceView作為視圖解析器
項(xiàng)目中只要引入了JSTL標(biāo)簽則springmvc會(huì)自動(dòng)把視圖有InternalResourceView轉(zhuǎn)換成JstlView,JstlView是它的子類。
每一個(gè)視圖解析器都實(shí)現(xiàn)了Ordered接口并開發(fā)出一個(gè)order屬性,可以通過(guò)它設(shè)置解析器的優(yōu)先級(jí),order越小優(yōu)先級(jí)越高。Spring MVC會(huì)按視圖解析器順序的優(yōu)先級(jí)對(duì)邏輯視圖名進(jìn)行解析,直到解析成功并返回視圖對(duì)象,否則會(huì)拋出ServletException異常
自定義視圖:
@Component
public 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
");}
}
我們需要將這個(gè)自定義的視圖實(shí)現(xiàn)View接口然后重寫接口中的兩個(gè)方法。然后我們把這個(gè)類聲明成Bean交給spring管理。在這里我們配置一個(gè)beanName解析器。
然后寫一個(gè)請(qǐng)求,這個(gè)請(qǐng)求返回Bean的名字,默認(rèn)是首字母小寫以駝峰式展現(xiàn)。
@RequestMapping("myView")
public String myView(){
System.out.println("myView load ...");
return "myView";
}
這樣就可以完成我們的自定以視圖。
關(guān)與重定向:
如果返回字符串中帶有”redirect:“或”forward:“,SpringMvc會(huì)將其做特殊的處理。
如果我們需要直接訪問視圖可以這樣配置
REST章節(jié)
REST(Representational State Transfer):即(資源)表現(xiàn)層狀態(tài)傳遞。
資源(Resources):網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說(shuō)網(wǎng)絡(luò)上的一段信息。它可以是一段文本,一段歌曲,一張圖片等等,可以用一個(gè)URL指向它,每個(gè)資源都有一個(gè)特定的,獨(dú)一無(wú)二的URL,要訪問這個(gè)資源,直接訪問這個(gè)URI即可。
表現(xiàn)層(Representation):將資源呈現(xiàn)出來(lái)的形式。
狀態(tài)轉(zhuǎn)化(State Transfer):每發(fā)出一個(gè)請(qǐng)求,就代表客戶端和服務(wù)器一次交互。HTTP協(xié)議是一個(gè)無(wú)狀態(tài)的協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端??蛻舳讼胍僮鞣?wù)器,必須通過(guò)某些手段,讓服務(wù)器發(fā)生狀態(tài)轉(zhuǎn)化,而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。
在我們的SpringMVC之中支持HTTP四種請(qǐng)求狀態(tài),REST規(guī)定的HTTP協(xié)議中四種表示操作方式的動(dòng)詞
GET請(qǐng)求:獲取資源
POST請(qǐng)求:新建資源
PUT:更新資源
DELETE:刪除資源
我們需要在WEB.xml中配置實(shí)現(xiàn)PUT,DELETE請(qǐng)求方式,大家都知道在我們傳統(tǒng)的HTML中只有GET,POST兩種請(qǐng)求方式。
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
GET請(qǐng)求
GET請(qǐng)求:
test RestGet請(qǐng)求
@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRestGet(@PathVariable Integer id){
System.out.println("GET請(qǐng)求,獲取id為:" + id + "的對(duì)象!");
return SUCCESS;
}
Post請(qǐng)求
POST請(qǐng)求:
@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRestPost(){
System.out.println("POST請(qǐng)求,添加新的對(duì)象!");
return SUCCESS;
}
PUT和DELETE請(qǐng)求想要使用必須添加上面的過(guò)濾器,并且在Post請(qǐng)求中加上隱藏域name=”_method”,value=”PUT/DELETE”。
PUT,請(qǐng)求其實(shí)是由POST請(qǐng)求轉(zhuǎn)換而來(lái)的。
PUT請(qǐng)求:
@RequestMapping(value="/testRest",method=RequestMethod.PUT)
public String testRestPut(){
System.out.println("PUT請(qǐng)求,更新操作!");
return SUCCESS;
}
DELETE請(qǐng)求
DELETE請(qǐng)求:
@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
System.out.println("DELETE請(qǐng)求,刪除操作!" + id);
return SUCCESS;
}
重復(fù)一次第一章的內(nèi)容在我們springmvc攔截所有請(qǐng)求會(huì)導(dǎo)致css,js,圖片等不能引入我們可以這樣解決:
https://www.cnblogs.com/SimpleWu/category/1354870.html
總結(jié)
以上是生活随笔為你收集整理的java rest 图_SpringMVC视图及REST风格的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java获取2017年第39周_java
- 下一篇: PHP new self什么,php n