最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互相關介紹全面總結

 更新時間:2022年10月13日 16:41:19   作者:懶羊羊.java  
Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質上相當于 Servlet,Spring MVC 角色劃分清晰,分工明細,這篇文章主要介紹了SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互

前言

SpringMVC確實很麻煩,零碎的點太多

一.Spring集成Web

在Spring的學習中,我們知道在IOC容器中獲取Bean時要通過獲取上下文的方式

(new ClasspathXmlApplicationContext),這樣我想在不同的地方獲取Bean我得重新加載配置文件,應用上下文的對象也被創(chuàng)建了多次,造成所謂的“硬編碼”問題。

如何解決?

按照思維習慣,解決此問題的最好方法就是把我的配置文件作用域提高

在Web項目中,可以使用ServletContextListener監(jiān)聽Web應用的啟動,我們可以在Web應用啟動時,就加載Spring的配置文件,創(chuàng)建應用上下文對象ApplicationContext,在將其存儲到最大的域servletContext域中,這樣就可以在任意位置從域中獲得應用上下文ApplicationContext對象了,從而實現(xiàn)數(shù)據(jù)共享。

如何實現(xiàn)?

①導入Spring集成Web坐標

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.5.RELEASE</version>
    </dependency>

②配置ContextLoaderListener監(jiān)聽器

Spring提供了一個監(jiān)聽器ContextLoaderListener就是對上述功能的封裝,該監(jiān)聽器內(nèi)部加載Spring配置文件,創(chuàng)建應用上下文對象,并存儲到ServletContext域中,提供了一個客戶端工具WebApplicationContextUtils供使用者獲得應用上下文對象

 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

③通過工具獲得應用上下文對象

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext servletContext = this.getServletContext();   
    ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    UserService userService = app.getBean(UserService.class);
 }

補充:為了解決xml文件名稱與代碼產(chǎn)生的耦合,引入了設置全局變量這一操作,通過在web.xml里事先定義好后再由具體的的代碼獲得定義的參數(shù)名來讀文件,極大降低了耦合性

這樣的話以后要改配置文件我就可以直接在一處修改文件名即可

二.對于SpringMVC的理解

M——model進行業(yè)務邏輯的處理

V——view視圖,負責數(shù)據(jù)的輸出,畫面的展示

C——controller 負責接收從視圖發(fā)送過來的數(shù)據(jù),同時控制model與view

Spring MVC是是屬于Spring Framework生態(tài)里面的一個模塊,它是在Servlet基礎上構建并且使用MVC模式設計的一個 Web框架,主要的目的是簡化傳統(tǒng)Servlet+JSP模式下的Web開發(fā)方式。其次,Spring MVC的整體架構設計對Java Web里面的MVC架構模式做了增強和擴展,主要有幾個方面。把傳統(tǒng)MVC框架里面的Controller控制器做了拆分,分成了前端控制器DispatcherServlet和后端控制器Controller,把 Model模型拆分成業(yè)務層Service和數(shù)據(jù)訪問層Repository。

在視圖層,可以支持不同的視圖,比如 Freemark、velocity、JSP等等

所以,Spring MVC天生就是為了MVC模式而設計的,因此在開發(fā)MVC應用的時候會更加方便和靈活。

三.MVC執(zhí)行流程

客戶端與服務器端的一次會話代表著一次請求與響應,通過MVC的模式使其更加系統(tǒng)

具體執(zhí)行流程如下所示:

①用戶發(fā)送請求至前端控制器DispatcherServlet

②DispatcherServlet收到請求調用HandlerMapping處理器映射器

③處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet

④DispatcherServlet調用HandlerAdapter處理器適配器

⑤HandlerAdapter經(jīng)過適配調用具體的處理器(Controller,也叫后端控制器)

⑥Controller執(zhí)行完成返回ModelAndView

⑦HandlerAdapter將controller執(zhí)行結果ModelAndView返回給DispatcherServlet

⑧DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器

⑨ViewReslover解析后返回具體View

⑩DispatcherServlet根據(jù)View進行渲染視圖〈即將模型數(shù)據(jù)填充至視圖中),DispatcherServlet響應用戶

1.組件解析

1.前端控制器:DispatcherServlet

用戶請求到達前端控制器,它就相當于MVC模式中的C,DispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,DispatcherServlet的存在降低了組件之間的耦合性

2.處理器映射器: HandlerMapping

HandlerMapping負責根據(jù)用戶請求找到Handler即處理器,SpringMVC提供了不同的映射器實現(xiàn)不同的映射方式,例如:配置文件方式,實現(xiàn)接口方式,注解方式等

3.處理器適配器: HandlerAdapter

通過 HandlerAdapter對處理器進行執(zhí)行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執(zhí)行

4.處理器:Handler

它就是我們開發(fā)中要編寫的具體業(yè)務控制器。由DispatcherServlet把用戶請求轉發(fā)到Handler。由Handler對具體的用戶請求進行處理

5.視圖解析器:View Resolver

View Resolver負責將處理結果生成View視圖,View Resolver 首先根據(jù)邏輯視圖名解析成物理視圖名,即具體的頁面地址,再生成View視圖對象,最后對View進行渲染將處理結果通過頁面展示給用戶

6.視圖:View

SpringMVC框架提供了很多的View視圖類型的支持,包括: jstlView、freemarkerView.pdfView等。最常用的視圖就是jsp。一般情況下需要通過頁面標簽或頁面模版技術將模型數(shù)據(jù)通過頁面展示給用戶,需要由程序員根據(jù)業(yè)務需求開發(fā)具體的頁面

2.RequestMapping

作用:用于建立請求URL和處理請求方法之間的對應關系

位置:

類上,請求URL的第一級訪問目錄。此處不寫的話,就相當于應用的根目錄

方法上,請求URL的第二級訪問目錄,與類上的使用@ReqquestMapping標注的一級目錄一起組成訪問虛擬路徑屬性:

value:用于指定請求的URL。它和path屬性的作用是一樣的method:用于指定請求的方式

params:用于指定限制請求參數(shù)的條件。它支持簡單的表達式。要求請求參數(shù)的key和value必須和配置的一模一樣

四.SpringMVC數(shù)據(jù)響應

頁面跳轉

1.直接返回字符串,本質是在配置文件里寫好頭和尾,在具體的代碼中返回文件名后跳轉

2.返回ModelAndView對象

    public ModelAndView back(){
//            Model:模型 作用封裝數(shù)據(jù),View:視圖 作用展示數(shù)據(jù)
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("username","itcast");   //設置模型數(shù)據(jù)
        modelAndView.setViewName("hello");     //設置視圖名稱
        return modelAndView;
   }

頁面跳轉的方式還有,比如向request域存儲數(shù)據(jù)后返回對象

回寫數(shù)據(jù)

1.直接輸出字符串

    public void back(HttpServletResponse response) throws IOException {
        response.getWriter().print("Hello Java");
    }

2.寫注解直接返回字符串

    @ResponseBody  //告知SpringMVC框架 不進行視圖跳轉 直接進行數(shù)據(jù)響應
    public String back() throws IOException {
        return "hello java";
    }

3.返回對象或者集合

事先要配置SpringMVC注解驅動<mvc:annotation-driven/>默認底層就會集成Jackson進行對象集合與json格式字符串的轉換

    @ResponseBody
    public Sheep back() throws IOException {
        Sheep sheep = new Sheep();
        sheep.setUsername("懶羊羊");
        sheep.setAge(2);
        return sheep;  //SpringMVC自動將Sheep轉換成json格式的字符串
    }

五.SpringMVC獲得請求數(shù)據(jù)

1.獲得基本數(shù)據(jù)類型,形如:

    @RequestMapping(value="/resp")
    @ResponseBody
    public void save11(String username,int age) throws IOException {
        System.out.println(username);
        System.out.println(age);
    }

然后我在URL中輸入相應的路徑,傳入相應的參數(shù)即可獲得請求的數(shù)據(jù)

http://localhost:yu7daily/demo1?username=lyy&age=2

2.獲得POJO類型參數(shù)

    @RequestMapping(value="/demo2")
    @ResponseBody
    public void back(User user) throws IOException {
        System.out.println(user);
    }

同樣在URL傳入路徑,即可獲得數(shù)據(jù)

http://localhost:yu7daily/demo2?username=lyy&age=2

到此這篇關于SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互相關介紹全面總結的文章就介紹到這了,更多相關SpringMVC集成Web內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于Java異常處理的幾條建議_動力節(jié)點Java學院整理

    關于Java異常處理的幾條建議_動力節(jié)點Java學院整理

    Java提供了拋出異常、捕捉異常和finally語句的使用來處理程序異常,下面就來具體看一下關于Java異常處理的幾條建議
    2017-06-06
  • JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式

    JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式

    這篇文章主要介紹了JavaBean和SpringBean的區(qū)別及創(chuàng)建SpringBean方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • javaweb Servlet開發(fā)總結(一)

    javaweb Servlet開發(fā)總結(一)

    Servlet是sun公司提供的一門用于開發(fā)動態(tài)web資源的技術。這篇文章主要介紹了javaweb Servlet開發(fā)的第一篇,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Vert.x運行環(huán)境搭建流程圖解

    Vert.x運行環(huán)境搭建流程圖解

    這篇文章主要介紹了Vert.x運行環(huán)境搭建流程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • spring boot使用sonarqube來檢查技術債務

    spring boot使用sonarqube來檢查技術債務

    今天小編就為大家分享一篇關于spring boot使用sonarqube來檢查技術債務,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼

    SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼

    本篇文章主要介紹了SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • SpringBoot整合mybatis-generator-maven-plugin的方法

    SpringBoot整合mybatis-generator-maven-plugin的方法

    這篇文章主要介紹了SpringBoot整合mybatis-generator-maven-plugin,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • SpringCloud微服務集成Dubbo的詳細過程

    SpringCloud微服務集成Dubbo的詳細過程

    Apache?Dubbo?是一款易用、高性能的?WEB?和?RPC?框架,同時為構建企業(yè)級微服務提供服務發(fā)現(xiàn)、流量治理、可觀測、認證鑒權等能力、工具與最佳實踐,這篇文章主要介紹了SpringCloud微服務集成Dubbo,需要的朋友可以參考下
    2024-03-03
  • SpringBoot整合liquibase及l(fā)iquibase生成初始化腳本的方式

    SpringBoot整合liquibase及l(fā)iquibase生成初始化腳本的方式

    這篇文章主要介紹了SpringBoot整合liquibase的相關資料,文中給大家介紹了liquibase生成初始化腳本的兩種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 淺析SpringBoot自動化配置原理實現(xiàn)

    淺析SpringBoot自動化配置原理實現(xiàn)

    這篇文章主要介紹了淺析SpringBoot自動化配置原理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06

最新評論

济源市| 中卫市| 平利县| 张家口市| 茂名市| 苍梧县| 清新县| 江安县| 宁陕县| 海口市| 耒阳市| 安顺市| 息烽县| 高安市| 衡山县| 韩城市| 宁蒗| 固原市| 永仁县| 吴川市| 南通市| 达尔| 小金县| 神木县| 万载县| 英吉沙县| 武冈市| 辛集市| 云梦县| 西宁市| 松滋市| 景泰县| 洞头县| 元阳县| 台安县| 高要市| 湟源县| 宝坻区| 霍林郭勒市| 平顶山市| 都兰县|