淺談Springmvc中的頁(yè)面跳轉(zhuǎn)問(wèn)題
SpringMvc跳轉(zhuǎn)問(wèn)題
SpringMvc的Controller每次處理完數(shù)據(jù)后都會(huì)返回一個(gè)邏輯視圖(view)和模型(model)
所以我們會(huì)看到原生的Controller是返回一個(gè)ModelAndView(內(nèi)部包含了view和model)。
正常情況下(除非被@ModelAttribute注解了的方法),否則最終都會(huì)返回ModelAndView。
當(dāng)然有時(shí)候一個(gè)功能處理方法不一定要返回一個(gè)邏輯視圖,也可以重定向到另一個(gè)功能方法
服務(wù)器內(nèi)部轉(zhuǎn)發(fā)到一個(gè)邏輯視圖或者另一個(gè)功能方法。
---
SpringMvc的強(qiáng)大之處在于它封裝了Servlet大量底層代碼,但是有沒(méi)有完全屏蔽用戶對(duì)ServletAPI
的使用。所以SpringMvc中頁(yè)面跳轉(zhuǎn)也是分為兩大類:
使用ServletAPI實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
重定向方式:由于重定向的本質(zhì)是要求瀏覽器重新發(fā)送一個(gè)請(qǐng)求,SpringMvc里面的頁(yè)面一般是放到WEB-INF下,瀏覽器不可以直接訪問(wèn))
所以這里的重定向?qū)嵸|(zhì)是重定向到另一個(gè)功能方法。
服務(wù)器內(nèi)部請(qǐng)求轉(zhuǎn)發(fā):請(qǐng)求轉(zhuǎn)發(fā)為服務(wù)器內(nèi)部行為,所以可以直接跳轉(zhuǎn)訪問(wèn)一個(gè)jsp頁(yè)面也可以跳轉(zhuǎn)到另一個(gè)功能處理方法。
```text
//使用原生的ServletApi進(jìn)行頁(yè)面跳轉(zhuǎn)
@RequestMapping("/c")
public String test(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
System.out.println("testC");
//跳轉(zhuǎn)到服務(wù)器內(nèi)部的一個(gè)頁(yè)面
//request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request,response);
//跳轉(zhuǎn)到服務(wù)器內(nèi)部的一個(gè)功能處理方法
//request.getRequestDispatcher("/dispather/b").forward(request,response);
//重定向一個(gè)功能方法
response.sendRedirect(request.getContextPath()+"/dispather/b");
return null;
}
使用SpringMvc的API實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
直接返回邏輯視圖名
text @RequestMapping("/b") public String testB(){ System.out.println("testB"); //直接返回一個(gè)視圖 return "index"; }
返回自定義的ModelAndView:自定義ModelAndView時(shí),可以重定向或請(qǐng)求轉(zhuǎn)發(fā)
```text
//Controller中使用ModelAndView進(jìn)行跳轉(zhuǎn)和重定向
@RequestMapping("/e")
public ModelAndView testE(){
System.out.println("testE");
//跳轉(zhuǎn)到服務(wù)器內(nèi)部的一個(gè)頁(yè)面
//return "index";
//跳轉(zhuǎn)到服務(wù)器內(nèi)部的一個(gè)功能處理方法
//return new ModelAndView("forward:/dispather/b");
//重定向一個(gè)功能方法
return new ModelAndView("redirect:/dispather/b");
}
總結(jié)
以上就是本文關(guān)于淺談Springmvc中的頁(yè)面跳轉(zhuǎn)問(wèn)題的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
參考:
Java編程實(shí)現(xiàn)springMVC簡(jiǎn)單登錄實(shí)例
SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄
springmvc Rest風(fēng)格介紹及實(shí)現(xiàn)代碼示例
相關(guān)文章
IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文)
這篇文章主要介紹了IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java實(shí)現(xiàn)一個(gè)小說(shuō)采集程序的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇Java實(shí)現(xiàn)一個(gè)小說(shuō)采集程序的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的, 現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
Java 中函數(shù) Function 的使用和定義示例小結(jié)
這篇文章主要介紹了Java 中函數(shù) Function 的使用和定義小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
并發(fā)編程之Java內(nèi)存模型volatile的內(nèi)存語(yǔ)義
這篇文章主要介紹了并發(fā)編程之Java內(nèi)存模型volatile的內(nèi)存語(yǔ)義,理解volatile特性的一個(gè)好辦法是把對(duì)volatile變量的單個(gè)讀/寫,看成是使用同一個(gè)鎖對(duì)單個(gè)讀/寫操作做了同步。下面我們一起進(jìn)入文章看看具體例子吧,需要的小伙伴可以參考下2021-11-11
Spring框架中一個(gè)有用的小組件之Spring Retry組件詳解
Spring Retry 是從 Spring batch 中獨(dú)立出來(lái)的一個(gè)功能,主要實(shí)現(xiàn)了重試和熔斷,對(duì)于那些重試后不會(huì)改變結(jié)果,毫無(wú)意義的操作,不建議使用重試,今天通過(guò)本文給大家介紹Spring Retry組件詳解,感興趣的朋友一起看看吧2021-07-07

