




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應(yīng)及交互相關(guān)介紹全面總結(jié)目錄前言一.Spring集成Web二.對(duì)于SpringMVC的理解三.MVC執(zhí)行流程1.組件解析2.RequestMapping四.SpringMVC數(shù)據(jù)響應(yīng)頁面跳轉(zhuǎn)回寫數(shù)據(jù)五.SpringMVC獲得請(qǐng)求數(shù)據(jù)
前言
SpringMVC確實(shí)很麻煩,零碎的點(diǎn)太多
一.Spring集成Web
在Spring的學(xué)習(xí)中,我們知道在IOC容器中獲取Bean時(shí)要通過獲取上下文的方式
(newClasspathXmlApplicationContext),這樣我想在不同的地方獲取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
groupIdorg.springframework/groupId
artifactIdspring-web/artifactId
version5.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-classorg.springframework.web.context.ContextLoaderListener/listener-class
/listener
③通過工具獲得應(yīng)用上下文對(duì)象
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
ServletContextservletContext=this.getServletContext();
ApplicationContextapp=WebApplicationContextUtils.getWebApplicationContext(servletContext);
UserServiceuserService=app.getBean(UserService.class);
補(bǔ)充:為了解決xml文件名稱與代碼產(chǎn)生的耦合,引入了設(shè)置全局變量這一操作,通過在web.xml里事先定義好后再由具體的的代碼獲得定義的參數(shù)名來讀文件,極大降低了耦合性
這樣的話以后要改配置文件我就可以直接在一處修改文件名即可
二.對(duì)于SpringMVC的理解
Mmodel進(jìn)行業(yè)務(wù)邏輯的處理
Vview視圖,負(fù)責(zé)數(shù)據(jù)的輸出,畫面的展示
Ccontroller負(fù)責(zé)接收從視圖發(fā)送過來的數(shù)據(jù),同時(shí)控制model與view
SpringMVC是是屬于SpringFramework生態(tài)里面的一個(gè)模塊,它是在Servlet基礎(chǔ)上構(gòu)建并且使用MVC模式設(shè)計(jì)的一個(gè)Web框架,主要的目的是簡(jiǎn)化傳統(tǒng)Servlet+JSP模式下的Web開發(fā)方式。其次,SpringMVC的整體架構(gòu)設(shè)計(jì)對(duì)JavaWeb里面的MVC架構(gòu)模式做了增強(qiáng)和擴(kuò)展,主要有幾個(gè)方面。把傳統(tǒng)MVC框架里面的Controller控制器做了拆分,分成了前端控制器DispatcherServlet和后端控制器Controller,把Model模型拆分成業(yè)務(wù)層Service和數(shù)據(jù)訪問層Repository。
在視圖層,可以支持不同的視圖,比如Freemark、velocity、JSP等等
所以,SpringMVC天生就是為了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.視圖解析器:ViewResolver
ViewResolver負(fù)責(zé)將處理結(jié)果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成物理視圖名,即具體的頁面地址,再生成View視圖對(duì)象,最后對(duì)View進(jìn)行渲染將處理結(jié)果通過頁面展示給用戶
6.視圖:View
SpringMVC框架提供了很多的View視圖類型的支持,包括:jstlView、freemarkerView.pdfView等。最常用的視圖就是jsp。一般情況下需要通過頁面標(biāo)簽或頁面模版技術(shù)將模型數(shù)據(jù)通過頁面展示給用戶,需要由程序員根據(jù)業(yè)務(wù)需求開發(fā)具體的頁面
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)
頁面跳轉(zhuǎn)
1.直接返回字符串,本質(zhì)是在配置文件里寫好頭和尾,在具體的代碼中返回文件名后跳轉(zhuǎn)
2.返回ModelAndView對(duì)象
publicModelAndViewback(){
//Model:模型作用封裝數(shù)據(jù),View:視圖作用展示數(shù)據(jù)
ModelAndViewmodelAndView=newModelAndView();
modelAndView.addObject("username","itcast");//設(shè)置模型數(shù)據(jù)
modelAndView.setViewName("hello");//設(shè)置視圖名稱
returnmodelAndView;
頁面跳轉(zhuǎn)的方式還有,比如向request域存儲(chǔ)數(shù)據(jù)后返回對(duì)象
回寫數(shù)據(jù)
1.直接輸出字符串
publicvoidback(HttpServletResponseresponse)throwsIOException{
response.getWriter().print("HelloJava");
2.寫注解直接返回字符串
@ResponseBody//告知SpringMVC框架不進(jìn)行視圖跳轉(zhuǎn)直接進(jìn)行數(shù)據(jù)響應(yīng)
publicStringback()throwsIOException{
return"hellojava";
3.返回對(duì)象或者集合
事先要配置SpringMVC注解驅(qū)動(dòng)mvc:annotation-driven/默認(rèn)底層就會(huì)集成Jackson進(jìn)行對(duì)象集合與json格式字符串的轉(zhuǎn)換
@ResponseBody
publicSheepback()throwsIOException{
Sheepsheep=newSheep();
sheep.setUsername("懶羊羊");
sheep.setAge(2);
returnsheep;//SpringMVC自動(dòng)將Sheep轉(zhuǎn)換成json格式的字符串
五.SpringMVC獲得請(qǐng)求數(shù)據(jù)
1.獲得基本數(shù)據(jù)類型,形如:
@RequestMapping(value="/resp")
@ResponseBody
publicvoidsave11(Stringusername,intage)throwsIOException{
System.out.println(username);
System.out.println(age);
然后我在URL中輸入相應(yīng)的路徑,傳入相應(yīng)的參數(shù)即可獲得請(qǐng)求的數(shù)據(jù)
http://localhost:yu7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路掃雪機(jī)銷售合同協(xié)議
- 2024年無人機(jī)駕駛員市場(chǎng)現(xiàn)狀試題及答案
- 2024年審計(jì)師考試思路試題及答案
- 2025年護(hù)士職業(yè)道德試題及答案
- 護(hù)師實(shí)驗(yàn)室實(shí)踐試題及答案
- 實(shí)踐經(jīng)驗(yàn)審計(jì)師試題及答案積累
- 無人機(jī)領(lǐng)域的職業(yè)發(fā)展機(jī)會(huì)試題及答案
- 中級(jí)審計(jì)師考試回顧與前瞻試題及答案
- 中級(jí)會(huì)計(jì)技能加強(qiáng)試題及答案解析
- 2024年審計(jì)技術(shù)革新試題及答案
- 《臨床免疫學(xué)檢測(cè)技術(shù)》課件
- 2024年河南鄭州航空港投資集團(tuán)招聘真題
- 2025專利代理師筆試考試題庫有答案分析
- 2025-2030中國高拍儀行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 中考語文課內(nèi)文言文閱讀專題復(fù)習(xí)練習(xí)
- 危重癥患者體位管理
- 湖南省名校聯(lián)考聯(lián)合體2024-2025學(xué)年高一下學(xué)期期中考試地理試題 含答案
- 2025春粵教粵科版(2024)小學(xué)科學(xué)一年級(jí)下冊(cè)(全冊(cè))教案、教學(xué)反思、教學(xué)計(jì)劃(附教材目錄P103)
- 洗浴合同協(xié)議模板
- 2025年陜西高中學(xué)業(yè)水平合格考數(shù)學(xué)試卷及答案
- 綠化工考試試題及答案
評(píng)論
0/150
提交評(píng)論