欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

SpringMVC確實(shí)很麻煩,零碎的點(diǎn)太多

一.Spring集成Web

在Spring的學(xué)習(xí)中,我們知道在IOC容器中獲取Bean時(shí)要通過獲取上下文的方式

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

如何解決?

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

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

如何實(shí)現(xiàn)?

①導(dǎo)入Spring集成Web坐標(biāo)

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

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

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

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

③通過工具獲得應(yīng)用上下文對(duì)象

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);
 }

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

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

二.對(duì)于SpringMVC的理解

M——model進(jìn)行業(yè)務(wù)邏輯的處理

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

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

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

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

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

三.MVC執(zhí)行流程

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

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

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

②DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器

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

④DispatcherServlet調(diào)用HandlerAdapter處理器適配器

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

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

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

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

⑨ViewReslover解析后返回具體View

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

1.組件解析

1.前端控制器:DispatcherServlet

用戶請(qǐng)求到達(dá)前端控制器,它就相當(dāng)于MVC模式中的C,DispatcherServlet是整個(gè)流程控制的中心,由它調(diào)用其它組件處理用戶的請(qǐng)求,DispatcherServlet的存在降低了組件之間的耦合性

2.處理器映射器: HandlerMapping

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

3.處理器適配器: HandlerAdapter

通過 HandlerAdapter對(duì)處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過擴(kuò)展適配器可以對(duì)更多類型的處理器進(jìn)行執(zhí)行

4.處理器:Handler

它就是我們開發(fā)中要編寫的具體業(yè)務(wù)控制器。由DispatcherServlet把用戶請(qǐng)求轉(zhuǎn)發(fā)到Handler。由Handler對(duì)具體的用戶請(qǐng)求進(jìn)行處理

5.視圖解析器:View Resolver

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

6.視圖:View

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

2.RequestMapping

作用:用于建立請(qǐng)求URL和處理請(qǐng)求方法之間的對(duì)應(yīng)關(guān)系

位置:

類上,請(qǐng)求URL的第一級(jí)訪問目錄。此處不寫的話,就相當(dāng)于應(yīng)用的根目錄

方法上,請(qǐng)求URL的第二級(jí)訪問目錄,與類上的使用@ReqquestMapping標(biāo)注的一級(jí)目錄一起組成訪問虛擬路徑屬性:

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

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

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

頁(yè)面跳轉(zhuǎn)

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

2.返回ModelAndView對(duì)象

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

頁(yè)面跳轉(zhuǎn)的方式還有,比如向request域存儲(chǔ)數(shù)據(jù)后返回對(duì)象

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

1.直接輸出字符串

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

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

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

3.返回對(duì)象或者集合

事先要配置SpringMVC注解驅(qū)動(dòng)<mvc:annotation-driven/>默認(rèn)底層就會(huì)集成Jackson進(jìn)行對(duì)象集合與json格式字符串的轉(zhuǎn)換

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

五.SpringMVC獲得請(qǐng)求數(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中輸入相應(yīng)的路徑,傳入相應(yīng)的參數(shù)即可獲得請(qǐng)求的數(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

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

相關(guān)文章

  • SpringBoot使用itext填充pdf表單及導(dǎo)出pdf的流程

    SpringBoot使用itext填充pdf表單及導(dǎo)出pdf的流程

    由于最近開發(fā)的項(xiàng)目需要用到打印單據(jù),就在網(wǎng)上找了一下方案,反反復(fù)復(fù),都沒有找到合適的,借鑒了網(wǎng)上資源,使用itext5、itext7的工具包,所以本文介紹了SpringBoot使用itext填充pdf表單及導(dǎo)出pdf的流程,需要的朋友可以參考下
    2024-09-09
  • Java二維數(shù)組講解

    Java二維數(shù)組講解

    這篇文章主要詳細(xì)介紹了Java二維數(shù)組,文中有詳細(xì)的相關(guān)資料講解,感興趣的朋友可以參考一下
    2023-04-04
  • Struts2學(xué)習(xí)筆記(6)-簡(jiǎn)單的數(shù)據(jù)校驗(yàn)

    Struts2學(xué)習(xí)筆記(6)-簡(jiǎn)單的數(shù)據(jù)校驗(yàn)

    這篇文章主要介紹Struts2中的數(shù)據(jù)校驗(yàn),通過一個(gè)簡(jiǎn)單的例子來說明,希望能給大家做一個(gè)參考。
    2016-06-06
  • SpringMVC在多線程下請(qǐng)求頭獲取失敗問題的解決方案

    SpringMVC在多線程下請(qǐng)求頭獲取失敗問題的解決方案

    這篇文章主要介紹了我們就對(duì)多線程環(huán)境下使用SpringMVC中RequestContextHolder無法獲取請(qǐng)求的問題進(jìn)行了深入的分析,并針對(duì)相關(guān)問題給出了相應(yīng)的解決方案,需要的朋友可以參考下
    2024-08-08
  • Mybatis與Ibatis的區(qū)別

    Mybatis與Ibatis的區(qū)別

    這篇文章主要介紹了Mybatis與Ibatis的區(qū)別,需要的朋友可以參考下
    2016-05-05
  • Java java.lang.InstantiationException異常案例詳解

    Java java.lang.InstantiationException異常案例詳解

    這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • spring security數(shù)據(jù)庫(kù)表結(jié)構(gòu)實(shí)例代碼

    spring security數(shù)據(jù)庫(kù)表結(jié)構(gòu)實(shí)例代碼

    這篇文章主要介紹了spring security數(shù)據(jù)庫(kù)表結(jié)構(gòu)實(shí)例代碼,需要的朋友可以參考下
    2017-09-09
  • javafx實(shí)現(xiàn)圖片3D翻轉(zhuǎn)效果方法實(shí)例

    javafx實(shí)現(xiàn)圖片3D翻轉(zhuǎn)效果方法實(shí)例

    程序?qū)崿F(xiàn)思路: 在javafx中Node對(duì)象有一個(gè)effect屬性,可以用于實(shí)現(xiàn)各種特效。PerspectiveTransform特效可以使Node對(duì)象實(shí)現(xiàn)透視變換。因此我們可以通過計(jì)算透視變換中每個(gè)點(diǎn)的位置來實(shí)現(xiàn)3D翻轉(zhuǎn)特效。
    2013-04-04
  • java 遞歸深入理解

    java 遞歸深入理解

    一個(gè)過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,需要的朋友可以參考下
    2012-11-11
  • springboot項(xiàng)目組引入JMeter的實(shí)現(xiàn)步驟

    springboot項(xiàng)目組引入JMeter的實(shí)現(xiàn)步驟

    本文主要介紹了springboot項(xiàng)目組引入JMeter的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論