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