淺談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)有完全屏蔽用戶(hù)對(duì)ServletAPI
的使用。所以SpringMvc中頁(yè)面跳轉(zhuǎn)也是分為兩大類(lèi):
使用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)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
參考:
Java編程實(shí)現(xiàn)springMVC簡(jiǎn)單登錄實(shí)例
SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄
springmvc Rest風(fēng)格介紹及實(shí)現(xiàn)代碼示例
- Spring MVC請(qǐng)求參數(shù)與響應(yīng)結(jié)果全局加密和解密詳解
- SpringMVC實(shí)現(xiàn)簡(jiǎn)單跳轉(zhuǎn)方法(專(zhuān)題)
- 解決springMVC 跳轉(zhuǎn)js css圖片等靜態(tài)資源無(wú)法加載的問(wèn)題
- springMVC幾種頁(yè)面跳轉(zhuǎn)方式小結(jié)
- springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法
- 詳解springmvc控制登錄用戶(hù)session失效后跳轉(zhuǎn)登錄頁(yè)面
- Spring mvc結(jié)果跳轉(zhuǎn)方法詳解
相關(guān)文章
JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式
這篇文章主要介紹了JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
詳解Java的Proxy動(dòng)態(tài)代理機(jī)制
Java有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。對(duì)于靜態(tài)代理,其實(shí)就是通過(guò)依賴(lài)注入,對(duì)對(duì)象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過(guò)這種形式來(lái)封裝的2021-06-06
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java集合排序規(guī)則接口Comparator用法解析
這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
spring AOP的Around增強(qiáng)實(shí)現(xiàn)方法分析
這篇文章主要介紹了spring AOP的Around增強(qiáng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了spring面向切面AOP的Around增強(qiáng)具體步驟與相關(guān)操作方法,需要的朋友可以參考下2020-01-01
Spring?Cloud?+?Nacos?+?Seata整合過(guò)程(分布式事務(wù)解決方案)
Seata 是一款開(kāi)源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了Spring?Cloud?+?Nacos?+?Seata整合過(guò)程(分布式事務(wù)解決方案),需要的朋友可以參考下2022-03-03
Mybatis自定義TypeHandler解決特殊類(lèi)型轉(zhuǎn)換問(wèn)題詳解
這篇文章主要介紹了Mybatis自定義TypeHandler解決特殊類(lèi)型轉(zhuǎn)換問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

