淺談Springmvc中的頁面跳轉(zhuǎn)問題
SpringMvc跳轉(zhuǎ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大量底層代碼,但是有沒有完全屏蔽用戶對ServletAPI
的使用。所以SpringMvc中頁面跳轉(zhuǎn)也是分為兩大類:
使用ServletAPI實(shí)現(xiàn)頁面跳轉(zhuǎn)
重定向方式:由于重定向的本質(zhì)是要求瀏覽器重新發(fā)送一個(gè)請求,SpringMvc里面的頁面一般是放到WEB-INF下,瀏覽器不可以直接訪問)
所以這里的重定向?qū)嵸|(zhì)是重定向到另一個(gè)功能方法。
服務(wù)器內(nèi)部請求轉(zhuǎn)發(fā):請求轉(zhuǎn)發(fā)為服務(wù)器內(nèi)部行為,所以可以直接跳轉(zhuǎn)訪問一個(gè)jsp頁面也可以跳轉(zhuǎn)到另一個(gè)功能處理方法。
```text
//使用原生的ServletApi進(jìn)行頁面跳轉(zhuǎn)
@RequestMapping("/c")
public String test(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
System.out.println("testC");
//跳轉(zhuǎn)到服務(wù)器內(nèi)部的一個(gè)頁面
//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)頁面跳轉(zhuǎn)
直接返回邏輯視圖名
text @RequestMapping("/b") public String testB(){ System.out.println("testB"); //直接返回一個(gè)視圖 return "index"; }
返回自定義的ModelAndView:自定義ModelAndView時(shí),可以重定向或請求轉(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è)頁面
//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中的頁面跳轉(zhuǎn)問題的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
參考:
Java編程實(shí)現(xiàn)springMVC簡單登錄實(shí)例
相關(guān)文章
JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式
這篇文章主要介紹了JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
詳解Java的Proxy動(dòng)態(tài)代理機(jī)制
Java有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。對于靜態(tài)代理,其實(shí)就是通過依賴注入,對對象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過這種形式來封裝的2021-06-06
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java集合排序規(guī)則接口Comparator用法解析
這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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整合過程(分布式事務(wù)解決方案)
Seata 是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務(wù)解決方案),需要的朋友可以參考下2022-03-03
Mybatis自定義TypeHandler解決特殊類型轉(zhuǎn)換問題詳解
這篇文章主要介紹了Mybatis自定義TypeHandler解決特殊類型轉(zhuǎn)換問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

