MVC三層架構(gòu)在各框架中的特征.doc_第1頁
MVC三層架構(gòu)在各框架中的特征.doc_第2頁
MVC三層架構(gòu)在各框架中的特征.doc_第3頁
MVC三層架構(gòu)在各框架中的特征.doc_第4頁
MVC三層架構(gòu)在各框架中的特征.doc_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

MVC三層架構(gòu)在各框架中的特征(注:為了展示筆記的完整性,建議用web版式打開觀看,效果更佳。)1. 基于web開發(fā)中最原始的jsp+Servlet 圖形化理解jsp+servlet結(jié)構(gòu): Server Client Web容器請求 Service(impl) 響應(yīng)view Servlet1 Jsp1 Jsp3DataBase Dao(impl) Servlet2 Servlet3web.xml Jsp21.從結(jié)構(gòu)上分析jsp+servlet圖解原理: 在基于mvc設(shè)計模式下的最原始的jsp+Servlet框架,在某種程度上是不能夠達(dá)到mvc最直觀的體現(xiàn)。當(dāng)客戶端發(fā)送請求到服務(wù)器時,服務(wù)器會將從客戶端接收到的信息通過封裝技術(shù)進(jìn)行解析,在交給web容器,web容器會通過一篇web.xml的配置文件去找與之相匹配的servlet,此時servlet會開啟一個線程,只要是符合web.xml中所配置的某一個servlet時,該servelt就會啟動,然后servlet在去調(diào)用service或者service的接口實現(xiàn)類,service(impl)在去調(diào)用dao(impl),dao通過從數(shù)據(jù)庫(Database)那獲取到數(shù)據(jù),在封裝到model實體類中去。Servlet在完成這一系類的動作后,最終將為我們返回一個jsp頁面,最后該頁面在返回到客戶端展示給客戶。2. 從web.xml配置上: TextSerevlet com.lh.serivlet.UserSerivlet TextSerevlet /accessServlet 注:需要用到的每一篇servlet都要寫入它的配置文件。Web.xml的配置量大,繁雜。從性能優(yōu)異的角度考慮,它的運行性能是最快的,但是開發(fā)性能就很有難度。3. 控制器:Jsp+servlet的控制器是:工程中的每一個xxxServlet就充當(dāng)一個控制器,但是必須去extends HttpServlet,并重寫public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 4. 作用域?qū)ο骃ervletContext(上下文),也叫全局的作用域?qū)ο?。Session(會話)服務(wù)器的一次會話中或者服務(wù)器超時。Request(請求)在一次請求的過程中。Respones(響應(yīng))5. 數(shù)據(jù)綁定:沒有,只能通過數(shù)組去獲取頁面的數(shù)據(jù)。6. 類型轉(zhuǎn)換:將jsp頁面的數(shù)據(jù)轉(zhuǎn)換為String類型。也可以是基本數(shù)據(jù)類型。但是要進(jìn)行強制轉(zhuǎn)換。7. 有效性驗證:可以在某一個需要用到Servlet的類中用java代碼進(jìn)行驗證。也可以在jsp頁面書寫ajax代碼進(jìn)行驗證或者是定義function()函數(shù),在函數(shù)中用正則表達(dá)式加以判斷。8. 操作業(yè)務(wù)層對象調(diào)業(yè)務(wù)方法:在某一個XxxServlet中extends HttpServlet并重寫doPost()和doGet()方法,我們只需在doGet()或者doPost()中用request.getParameter()方法來得到頁面的數(shù)據(jù)。如果我們要操作到業(yè)務(wù)層我們只需在當(dāng)前的這個類中實例化出業(yè)務(wù)層的類,即XxxService dao = new XxxServiceImpl();然后獲取實體Bean對象中的屬性。最后在我們需要用到數(shù)據(jù)訪問層的哪一個具體的業(yè)務(wù)實現(xiàn)方法就用實例化出的dao調(diào)用所需方法即可。 9. 返回:可以返回對象,也可以返回具體要跳轉(zhuǎn)的哪個頁面。10. 在js頁面做顯示:EL表達(dá)式,JSP腳本表達(dá)式11. 標(biāo)簽:HTML標(biāo)簽,JSP自定義標(biāo)記庫,JST L標(biāo)準(zhǔn)標(biāo)記庫。12. 文件上傳:頁面需要怎樣獲取? 服務(wù)器怎么獲得?1.必須導(dǎo)入文件上傳的jar包。2.13. 過濾器:我們自己定義的一個類XxxFilter 必須implements Filter接口,并實現(xiàn)它的三個方法,destroy(),doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException ,init(FilterConfig arg0)。在doFilter()中調(diào)用chain.doFilter(request, response)方法,表示將請求交給下一個組件。2. 基于web開發(fā)中的Struts1框架結(jié)構(gòu)圖 Struts-congif.xml Servlet ActionServlet(中央核心控制器) Action 模型 JavaBean EJBWeb容器 Client Action Action FormBean web.xml Jsp(視圖)1. 從結(jié)構(gòu)上分析Struts1圖解原理: 客戶端發(fā)送請求到服務(wù)器,服務(wù)器將收到的信息傳給web容器,這時,web容器會通過到web.xml配置文件中去查找那篇符合命名規(guī)范的action屬性中的*.do,在交給ActionServlet(中央核心控制器),通過該配置,web容器將信息傳給具體的某一個XxxAction,該XxxAction會繼承Action,并重寫它的public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception 方法,同時,我們可以在該XxxAction中去調(diào)用JavaBean中的實體對象。但是,需要注意的是,在ActionServlet到Action這一過程中,我們是通過Form組件技術(shù)來對jsp頁面的信息來進(jìn)行了一次封裝,達(dá)到了前端頁面(jsp)和后臺的實體Bean對象之間的一次數(shù)據(jù)的綁定。最后再是到Struts-config.xml文件中進(jìn)行進(jìn)行配置,通過正確的配置找到所需的jsp.2從web.xml配置上: action org.apache.struts.action.ActionServlet config /WEB-INF/struts-lx.xml,/WEB-INF/struts-zh.xml !- 子配置文件,param-name的值只能以config/開頭 config/m1 /WEB-INF/struts-zh.xml - debug 3 detail 3 0 action *.do CharsetFiltercom.lovo.struts.filter.CharsetFilterencodingutf-8ignoretrueCharsetFilter*.doCharsetFilter*.jsp index.jsp 注:從上面的配置中我們可以看出,servlet的配置是必不可少的。3.控制器:ActionServlet是struts1的中央核心控制器,它在web.xml中配置成自動啟動的Servlet,在啟動時中央核心控制器會讀取配置文件(struts-config.xml)的配置信息,為struts中不同的模塊初始化相應(yīng)的對象。4.作用域?qū)ο?5. 數(shù)據(jù)綁定:6. 類型轉(zhuǎn)換:LoginForm loginF = (LoginForm)form;7. 有效性驗證:驗證框架,不能重寫Validate方法。也可以自定義驗證規(guī)則,但是必須做配置。8. 操作業(yè)務(wù)層對象調(diào)業(yè)務(wù)方法:9. 返回:Action將業(yè)務(wù)處理的不同結(jié)果返回一個目標(biāo)響應(yīng)對象給中央核心控制器,或者返回一個頁面mapping.findForward(success)10. 在js頁面做顯示:EL表達(dá)式,自定義標(biāo)簽庫,直接在jsp頁面上寫java代碼。11. 標(biāo)簽: Html標(biāo)簽 Bean標(biāo)簽 Logic標(biāo)簽 :生成表單中的文本輸入項:輸出bean的屬性:比較變量是否等于指定的值 :生成表單中的密碼輸入項:得到集合類型對象的元素個數(shù):比較變量是否不等于指定的值 : 生成用戶請求的隱含表單項:創(chuàng)建和復(fù)制bean標(biāo)記為:比較變量是否小于指定的值 : 生成用戶請求的提交按鈕:判斷特定的對象是否等于指定字符串:判斷特定的對象是否不存在:比較變量是否等于指定的值 : 生成用戶請求的重置按鈕 12. 文件上傳:13. 過濾器: Client 3.基于web開發(fā)中Struts2框架的結(jié)構(gòu)圖: HttpServletRequest ActionContextCleanUp Other Filters(Site Meth, etc) FilterDispatcher(Struts2中的中央核心控制器) ActionMapper Interceptor1ActionInvocation ActionPorxy Interceptor2 Tag Subsystem (html) Interceptor3ConfigurationManager Action Template(jsp,freeVarter,etc) Result Interceptor3 Struts.xml Interceptor2 HttpServlerResponse Interceptor31. 從結(jié)構(gòu)上分析Struts2圖解原理: Struts2的思想是基于JOPO(簡單的老的Java對象)的一種新思想而產(chǎn)生的。一度影響了重量級的容器。它的實現(xiàn)是靠用簡單的javabean對象去完成各種復(fù)雜的功能。我們也可以把這一實現(xiàn)的過程稱為JOPO。在Struts2中是沒有容器的。當(dāng)客戶端發(fā)送一個請求時,在服務(wù)器上會經(jīng)過層層過濾器,最后到達(dá)FilterDispatcher(Struts2中的中央核心控制器),中央核心控制器在通過層層的攔截器去找相應(yīng)的Action,最后Action返給我們一個所訪問的頁面,由于在Struts2中的攔截器是上下文相互環(huán)繞的,所以,在當(dāng)Action中的Resulet返給我們一個頁面的同時還會在次進(jìn)行后期的攔截器處理,就這樣一層層的攔截,直到將最終所取得的信息傳給HttpServletResponse,在接著就是HttpServletResponse會將得到的信息響應(yīng)給HttpServletRequest.但在這個響應(yīng)的過程中也再次經(jīng)過了過濾器的過濾。直到信息完整的到達(dá)HttpServletRequest。2從web.xml配置上: struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* index.jsp3.控制器:核心控制器:FilterDispatcher,在web應(yīng)用中負(fù)責(zé)攔截所有的用戶請求,如果用戶的請求以 .ation結(jié)尾,則該請求被傳入到struts2框架處理。業(yè)務(wù)控制器: Action(在struts2中起作用的實際上不是用戶自定義的Action,而是系統(tǒng)自動生成的action代理,但該代理是以用戶自定義的action為目標(biāo)的)4. 作用域?qū)ο螅河星懊娴膕truts1中我們可以從Action的execute方法中將請求和響應(yīng)當(dāng)做參數(shù)傳遞給了Action,但是在Struts2中我們會發(fā)現(xiàn)Action的execute方法是沒有任何的參數(shù),所以也就無法得到作用域?qū)ο?。那么,Struts2又是如何得到作用域?qū)ο蟮哪??分析:?dāng)Struts2的過濾器啟動的時候,首先就會初始化一個叫做ServletActionContext的類。它掌管著所有的作用域?qū)ο?。代碼展示如下:import org.apache.struts2.ServletActionContext;public class ContextAction implements Action public String execute() throws Exception /獲得請求 HttpServletRequest request = ServletActionContext.getRequest(); /獲得會話 HttpSession session = request.getSession(); /獲得上下文對象 ServletContext application = ServletActionContext.getServletContext(); 5. 數(shù)據(jù)綁定:6. 類型轉(zhuǎn)換:7. 有效性驗證:驗證框架8. 操作業(yè)務(wù)層對象調(diào)業(yè)務(wù)方法:9. 返回:10. 在js頁面做顯示:OGNL11. 標(biāo)簽:OGNL表達(dá)式、EL表達(dá)式、Struts2框架自身提供的標(biāo)簽庫、html標(biāo)簽。12. 文件上傳:13.過濾器:4. 基于web開發(fā)中springMVC框架的結(jié)構(gòu)圖: HandlerMappingSpring-servlet.xml Browser DispatcherServlet Controller XxxServlet ModelAndView ViewResolver ModelView(jsp,pdf,excel,josn.)1. 從結(jié)構(gòu)上分析springMVC圖解原理: springMVC的出現(xiàn)是在struts2的發(fā)展上而興起的。SpringMVC的設(shè)計思想被評委教科書式的框架,它是最能體現(xiàn)出MVC設(shè)計模式中的分離與互用的極致。所以,基于springMVC的原理我們是非常有必要進(jìn)行掌握并深入理解的。我們必須清楚的了解Spring的MVC框架主要由DispatcherServlet、處理器映射、處理器、視圖解析器、視圖組成。瀏覽器發(fā)送請求到spring容器,spring容器通過在web.xml配置文件中找到中央核心控制器(DispatcherServlet)的url配置,并且在web.xml中還必須要配置一個初始化的加載參數(shù)(詳見下面2),當(dāng)DispatcherServlet接收到一個請求后,它會通過請求的HandlerMapping處理映射路徑去找到在Spring-servlet.xml配置文件中的一個處理器(Controller),該處理器會找到具體的某一個Xxxservlet,Xxxservlet會將所獲取到的信息間接的傳給DispatcherServlet,在這一個過程中會有一個ModelAndView的對象產(chǎn)生(體現(xiàn)出了SpringMVC分離的思想)。當(dāng)DispatcherServlet得到這個ModelAndView后會將信息傳給ViewResolver,這時ViewResolver會將符合格式的view返回出來,最后再將符合格式的數(shù)據(jù)響應(yīng)到瀏覽器端。2從web.xml配置上: mySpringorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/classes/mySpring-servlet.xml1mySpring*.springindex.jsp 注:參數(shù)的配置是必不可少的。必須是在/WEB-INF目錄下的classes子目錄下的我們自己定義的哪一篇xxx-servlet.xml文件。3. 控制器:DispatcherServlet,該控制的作用是將請求轉(zhuǎn)發(fā)到相應(yīng)的應(yīng)用控制器。 4. 作用域?qū)ο?在SpringMVC中不推薦使用。5. 數(shù)據(jù)綁定:springMVC支持的數(shù)據(jù)綁定有6種,1.有基本數(shù)據(jù)類型綁定(String和String)。2.簡單對象類型綁定(類似與struts中的ActionForm)。3.List類型綁定(必須創(chuàng)建ArrayList對象來進(jìn)行綁定)。4.Set類型綁定(必須在Set對象中Add相應(yīng)的數(shù)量的模型對象)。5.Map類型綁定(必須依靠Bean對象)。6.復(fù)合數(shù)據(jù)類型綁定(要求在自己定義的Bean對象上的某個屬性也必須是一個Bean對象)。6. 類型轉(zhuǎn)換:在SpringMVC中有兩種類型轉(zhuǎn)換的方式.1.屬性編輯器(propertyEditor),屬性編輯器是我們最傳統(tǒng)的做法。我們只需要通過一個InitBider注解來完成,方法中的參數(shù)是WebRequestDateBinder或者WebDateBinder。在這個方法中,我們可以通過重寫PropertyEditorSupport中的setAsText()來定義自己的轉(zhuǎn)換規(guī)則。2. 類型轉(zhuǎn)換器(Converter),相對于第一種屬性編輯器它的功能更大,它可以對任何類型的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。我們在編寫一個類型轉(zhuǎn)換器時,一定要去implements它的Converter接口。7. 有效性驗證:通過注解的形式來注入pattern和valid來進(jìn)行有效性驗證,這也是我們常用到的驗證注入。8. 操作業(yè)務(wù)層對象調(diào)業(yè)務(wù)方法:9. 返回:10. 在js頁面做顯示:11. 標(biāo)簽:SpringMVC自身標(biāo)簽庫,html標(biāo)簽。12. 文件上傳:(詳細(xì)做法如下:)1.導(dǎo)包2.書寫配置springMVC自己提供的文件上傳的配置。 3.寫jsp頁面,注意文件上傳的表單里面的屬性。 . 4.書寫控制器UploadController 在控制器的方法處理中,從作用域中獲取file文件,通過path路徑和文件名將文件存入到當(dāng)前工程的文件夾下。package com.lh.controller;import java.io.File;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import mons.CommonsMultipartFile;Controllerpublic class UploadController RequestMapping(/upload)public String upload(HttpServletRequest request,RequestParam(file)CommonsMultipartFile file)/從作用域中獲取文件的path路徑,通過request.getSession().getServletContext().getRealPath(upload)。String path = request.getSession().getServletContext().getRealPath(upload);/通過file來獲取文件名。String name = file.getOriginalFilename();try file.getFileItem().write(new File(path+/+name); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();return upload;return success;5.測試文件是否上傳成功。13. 攔截器:在springMVC中實現(xiàn)攔截器,調(diào)用它的3個方法。:1.書寫攔截器有兩種方式:1-1繼承HandlerInterceptorAdaptor類,代碼展示如下:package erceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class Interceptor1 extends HandlerInterceptorAdapter /在控制器傳遞到攔截器將數(shù)據(jù)交給DisPacheServlet的過程中將資源清理。 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception System.out.println(The Main of claening.); /在方法之后 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception System.out.println(The Main of after.); /在方法之前public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論