摘要:概述上篇文章主要分析了提供的及抽象類,本章繼續(xù)分析其具體的幾個實現(xiàn)類。源碼由繼承關(guān)系繼承抽象類,并實現(xiàn)模板方法,完成將接收的請求進行轉(zhuǎn)發(fā),源碼如下實現(xiàn)父類模板方法獲取部署文件中定義的,傳入?yún)?shù)。
概述
上篇文章主要分析了Spring提供的Controller及抽象類AbstractController,本章繼續(xù)分析其具體的幾個實現(xiàn)類。
本系列文章是基于Spring5.0.5RELEASE。
ServletForwardingController作用
ServletForwardingController實現(xiàn)的功能是將接收的用戶請求轉(zhuǎn)發(fā)給你一個命名的servlet去處理,該命名servlet需在部署描述(web.xml)文件中定義。
源碼
由繼承關(guān)系ServletForwardingController繼承AbstractController抽象類,并實現(xiàn)模板方法handleRequestInternal,完成將接收的請求進行轉(zhuǎn)發(fā),源碼如下:
/** *實現(xiàn)父類模板方法 */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ServletContext servletContext = getServletContext(); Assert.state(servletContext != null, "No ServletContext"); // 獲取部署文件中定義的servlet,傳入servelet name參數(shù)。 RequestDispatcher rd = servletContext.getNamedDispatcher(this.servletName); if (rd == null) { throw new ServletException("No servlet with name "" + this.servletName + "" defined in web.xml"); } // 判斷是否是include請求 if (useInclude(request, response)) { // 是include請求,繼續(xù)使用include rd.include(request, response); if (logger.isDebugEnabled()) { logger.debug("Included servlet [" + this.servletName + "] in ServletForwardingController "" + this.beanName + """); } } else { // 非include請求,進行轉(zhuǎn)發(fā) rd.forward(request, response); if (logger.isDebugEnabled()) { logger.debug("Forwarded to servlet [" + this.servletName + "] in ServletForwardingController "" + this.beanName + """); } } return null; }
實戰(zhàn)
編寫servlet,代碼如下:
public class ForwardServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("hello ForwardServlet..."); } }
配置部署描述文件,代碼如下:
forwording com.github.dalianghe.controller.ForwardServlet
配置Spring配置文件,代碼如下:
測試
編寫完以上代碼,啟動系統(tǒng)并請求,地址:http://localhost:8086/forwardToServlet,請求將通過ServletForwardingController轉(zhuǎn)發(fā)到Servlet進行處理,最終在界面如圖:
ParameterizableViewController作用
根據(jù)參數(shù)的邏輯視圖名直接選擇需要展示的視圖,只支持GET、HEAD請求方法類型。
源碼
核心處理方法源碼如下:
/** *處理請求 */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { //獲取配置的viewName屬性 String viewName = getViewName(); ... ... // 把視圖邏輯名設(shè)置到ModelAndView中 if (getViewName() != null) { modelAndView.setViewName(viewName); } else { modelAndView.setView(getView()); } return (isStatusOnly() ? null : modelAndView); }
實戰(zhàn)
因為此部分使用jsp視圖,故需引入jstl支持,在pom文件中添加依賴坐標(biāo),如下:
javax.servlet jstl 1.2
在Spring配置文件中,添加相關(guān)配置,如下:
在WEB-INF下新建jsp文件夾及test.jsp文件,文件內(nèi)容如下:
My Frist JSP hello jsptest
測試
啟動服務(wù),進行測試,訪問/helloJSP,結(jié)果如下:
測試結(jié)果表明,我們并未編寫Controller,通過配置接口實現(xiàn)通過Spring轉(zhuǎn)發(fā)到視圖。
UrlFilenameViewController作用
作用與ParameterizableViewController一樣,但功能強大很多,支持模式匹配。
示例
以下提供兩種示例,可做為參考,如下:
本類不做演示了,有興趣的可以自行驗證,有問題可以留言或加入qq群反饋。
總結(jié)本章主要分析并演示了Spring提供Controller接口的實現(xiàn)類,目前來說用的很多,有些我也不是很明白,有講解錯誤的地方,還望指定,真心的希望能與大家一起進步。
最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時也可加我qq:276420284,共同學(xué)習(xí)、共同進步,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69586.html
摘要:概述上篇學(xué)習(xí)了視圖解析器作用及處理流程,為我們提供了豐富的視圖解析器見下圖本系列文章是基于。該視圖解析器是根據(jù)處理器返回的邏輯視圖名稱,在應(yīng)用上下文中查找該名稱的視圖對象視圖對象就是的對象。 概述 上篇學(xué)習(xí)了Spring MVC ViewResolver視圖解析器作用及處理流程,Spring為我們提供了豐富的視圖解析器(見下圖):showImg(https://segmentfault...
摘要:類實現(xiàn)接口,使用用戶會話中的主題。新增并更換一張不同的圖片。通過關(guān)閉瀏覽器,然后再訪問進行測試總結(jié)本章通過攔截器和結(jié)合實現(xiàn)了通過請求參數(shù)控制會話主題。 概述 本章繼續(xù)分析ThemeResolver的另一個實現(xiàn)類SessionThemeResolver,需要了解Spring MVC Theme情況的,可參考上一篇文章https://segmentfault.com/a/119000001...
摘要:概述上一篇就默認的進行了分析,詳細請參考,本節(jié)我們繼續(xù)分析學(xué)習(xí),主要分析解析器類繼承關(guān)系如下圖由上面類圖可知,繼承并實現(xiàn)接口,主要是操作的工具類,繼承接口,增加了信息操作。即通過實現(xiàn)的選擇。 概述 上一篇就Spring MVC默認的LocaleResovler(AcceptHeaderLocaleResolver)進行了分析,詳細請參考https://segmentfault.com/...
摘要:總結(jié)本章主要分析了接口抽象類以及對自定義的幾個重要屬性進行了測試,希望對大家有幫助,謝謝。 概述 Controller是Spring MVC為我們提供的基礎(chǔ)的控制器接口,和HttpServlet一樣,接收request和response參數(shù)處理用戶請求,并返回ModelAndView,從概念上可以類比Struts的Action。 Controller主要實現(xiàn)的如下功能: 接收并處理用...
摘要:默認支持該策略。以上是對的宏觀分析,下面我們進行內(nèi)部細節(jié)分析。整體流程一通過實現(xiàn)接口,完成攔截器相關(guān)組件的初始化調(diào)用類的方法??偨Y(jié)本文主要分析了的初始化過程,希望對大家有幫助。隨著學(xué)習(xí)的深入,后面有時間在分析下期中涉及的關(guān)鍵,比如等等。 概述 本節(jié)我們繼續(xù)分析HandlerMapping另一個實現(xiàn)類ReqeustMappingHandlerMapping,該類是我們?nèi)粘i_發(fā)中使用最多的...
閱讀 2307·2023-04-25 16:42
閱讀 1207·2021-11-22 14:45
閱讀 2346·2021-10-19 13:10
閱讀 2831·2021-09-29 09:34
閱讀 3415·2021-09-23 11:21
閱讀 2107·2021-08-12 13:25
閱讀 2194·2021-07-30 15:15
閱讀 3499·2019-08-30 15:54