大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 小白自學Java框架,框架的全面解析總結

小白自學Java框架,框架的全面解析總結

更新時間:2019-09-26 09:17:01 來源:動力節(jié)點 瀏覽2904次



  springmvc工作機制(原理)


  DispatcherServlet主要用作職責調度工作,本身主要用于控制流程

image.png

  1、springmvc將所有的請求都提交給DispatcherServlet,它會委托應用系統(tǒng)的其他模塊負責對請求進行真正的處理工作;


  2、DispatcherServlet查詢一個或多個


  HandlerMapping,找到處理請求的Controller;


  3、DispatcherServlet將請求提交到目標Controller;


  4、Controller進行業(yè)務邏輯處理后,會返回一個ModelAndView;


  5、DispathcherServlet查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象;


  6、視圖負責將結果顯示到客戶端;視圖對象負責渲染返回給客戶端。


  DispatcherServlet:前端控制器;(相當于一個轉發(fā)器,中央處理器,調度)


  ModelAndView:模型和視圖的結合體;(Springmvc的底層對象)


  HandlerMapping:處理器映射器


  springmvc運行原理


  1、客戶端請求提交到DispatcherServlet;


  2、由DispatcherServlet控制器查詢一個或多HandlerMapping,找到處理請求的Controller;


  3、DispatcherServlet將請求提交到Controller;


  4、Controller調用業(yè)務邏輯處理后,返回ModelAndView;


  5、DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖;


  6、視圖負責將結果顯示到客戶端。


  DispatcherServlet是整個SpringMVC的核心。它負責接收HTTP請求組織協(xié)調SpringMVC的各個組成部分。其主要工作有以下三項:


  1、截獲符合特定格式的URL請求;


  2、初始化DispatcherServlet上下文對應的WebApplicationContext,并將其與業(yè)務層、持久化層的WebApplicationContext建立關聯(lián);


  3、初始化SpringMVC的各個組成組件,并裝配到DispatcherServlet中。


  Hibernate工作原理及為什么要用?


  原理:


  1、讀取并解析配置文件


  2、讀取并解析映射信息,創(chuàng)建SessionFactory


  3、打開Sesssion


  4、創(chuàng)建事務Transation


  5、持久化操作


  6、提交事務


  7、關閉Session


  8、關閉SesstionFactory


  為什么要用:


  1、對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼;


  2、Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作;


  3、hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性;


  4、hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。


  Struts工作機制?為什么要使用Struts?


  工作機制:


  Struts的工作流程:


  在web應用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象。


  當ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程.


  (1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;


  (2)如果ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中;


  (3)根據(jù)配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法;


  (4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象,就表示表單驗證成功;


  (5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉發(fā)給哪個Action,如果相應的Action實例不存在,就先創(chuàng)建這個實例,然后調用Action的execute()方法;


  (6)Action的execute()方法返回一個ActionForward對,象,ActionServlet在把客戶請求轉發(fā)給ActionForward對象指向的JSP組件;


  (7)ActionForward對象指向JSP組件生成動態(tài)網頁,返回給客戶。


  為什么要用:


  JSP、Servlet,JavaBean技術的出現(xiàn)給我們構建強大的企業(yè)應用系統(tǒng)提供了可能。但用這些技術構建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術組織起來的規(guī)則,這就是框架,Struts便應運而生。


  基于Struts開發(fā)的應用由3類組件構成:控制器組件、模型組件、視圖組件


  如何優(yōu)化Hibernate?


  1、使用雙向一對多關聯(lián),不使用單向一對多


  2、靈活使用單向一對多關聯(lián);


  3、不用一對一,用多對一取代;


  4、配置對象緩存,不使用集合緩存;


  5、一對多集合使用Bag,多對多集合使用Set;


  6、繼承類使用顯式多態(tài);


  7、表字段要少,表關聯(lián)不要怕多,有二級緩存撐腰。


  Spring工作原理


  Spring已經用過一段時間了,感覺Spring是個很不錯的框架。內部最核心的就是IOC了,動態(tài)注入,讓一個對象的創(chuàng)建不用new了,可以自動的生產,這其實就是利用java里的反射,反射其實就是在運行時動態(tài)的去創(chuàng)建、調用對象,Spring就是在運行時,跟xmlSpring的配置文件來動態(tài)的創(chuàng)建對象,和調用對象里的方法的。


  Spring還有一個核心就是AOP這個就是面向切面編程,可以為某一類對象進行監(jiān)督和控制(也就是在調用這類對象的具體方法的前后去調用你指定的模塊)從而達到對一個模塊擴充的功能。這些都是通過配置類達到的。


  Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯(lián),都是通過配置類說明管理的(Spring根據(jù)這些配置內部通過反射去動態(tài)的組裝對象)


  Struts2框架本身大致可以分為3個部分:


  核心控制器FilterDispatcher、業(yè)務控制器Action和用戶實現(xiàn)的企業(yè)業(yè)務邏輯組件。


  核心控制器FilterDispatcher是Struts2框架的基礎,包含了框架內部的控制流程和處理機制。


  業(yè)務控制器Action和業(yè)務邏輯組件是需要用戶來自己實現(xiàn)的。


  用戶在開發(fā)Action和業(yè)務邏輯組件的同時,還需要編寫相關的配置文件,供核心控制器FilterDispatcher來使用。


  Struts2的工作流程相對于Struts1要簡單,與WebWork框架基本相同,所以說Struts2是WebWork的升級版本。


  基本簡要流程如下:


  1、客戶端初始化一個指向Servlet容器的請求;


  2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh?Plugin)


  3、接著FilterDispatcher被調用,


  FilterDispatcher詢問ActionMapper來決定這個請求是否需要調用某個Action;


  4、如果ActionMapper決定需要調用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy;


  5、ActionProxy通過ConfigurationManager(配置管理器)詢問框架的配置文件,找到需要調用的Action類;


  6、ActionProxy創(chuàng)建一個ActionInvocation的實例;


  7、ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用;


  8、一旦Action執(zhí)行完畢,ActionInvocation負責根據(jù)struts.xml中的配置找到對應的返回結果。


  返回結果通常是(但不總是,也可?能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。


  在表示的過程中可以使用Struts2?框架中繼承的標簽。在這個過程中需要涉及到ActionMapper;


  9.響應的返回是通過我們在web.xml中配置的過濾器;


  10、如果ActionContextCleanUp是當前使用的,則FilterDispatecher將不會清理sreadlocal?ActionContext;


  如果ActionContextCleanUp不使用,則將會去清理。


  說下Struts的設計模式


  MVC模式:web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設置決定是否需要表單驗證,如果需要就調用ActionForm的Validate()驗證后選擇將請求發(fā)送到哪個Action,如果Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調用Action的execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網頁,返回給客戶。


  攔截器和過濾器的區(qū)別


  1、攔截器是基于java反射機制的,而過濾器是基于函數(shù)回調的。


  2、攔截器不依賴于servlet容器,過濾器依賴于servlet容器。


  3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。


  4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。


  5、在Action的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。


  struts1于struts2的比較


  1、Action類:


  Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類編程而不是接口。


  Struts2Action類可以實現(xiàn)一個Action接口,也可實現(xiàn)其他接口,使可選和定制的服務成為可能。


  Struts2提供一個ActionSupport基類去實現(xiàn)常用的接口。Action接口不是必須的,任何有execute標識的POJO對象都可以用作Struts2的Action對象。


  2、線程模式:


  Struts1Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。


  單例策略限制了Struts1Action能作的事,并且要在開發(fā)時特別小心。Action資源必須是線程安全的或同步的。


  Struts2Action對象為每一個請求產生一個實例,因此沒有線程安全問題。(實際上,


  servlet容器給每個請求產生許多可丟棄的對象,并且不會導致性能和垃圾回收問題)


  3、Servlet依賴:


  Struts1Action依賴于ServletAPI,因為當一個Action被調用時HttpServletRequest和HttpServletResponse被傳遞給execute方法。


  Struts2Action不依賴于容器,允許Action脫離容器單獨被測試。如果需要,Struts2Action仍然可以訪問初始的request和response。


  但是,其他的元素減少或者消除了直接訪問HttpServetRequest和HttpServletResponse的必要性。


  4、可測性:


  測試Struts1?Action的一個主要問題是execute方法暴露了servlet?API(這使得測試要依賴于容器)。


  一個第三方擴展--StrutsTestCase--提供了一套Struts1的模擬對象(來進行測試)


  Struts2Action可以通過初始化、設置屬性、調用方法來測試,“依賴注入”支持也使測試更容易。


  5、捕獲輸入:


  Struts1使用ActionForm對象捕獲輸入。所有的ActionForm必須繼承一個基類。因為其他JavaBean不能用作ActionForm,開發(fā)者經常創(chuàng)建多余的類捕獲輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經存在的JavaBean(仍然會導致有冗余的javabean)。


  Struts2直接使用Action屬性作為輸入屬性,消除了對第二個輸入對象的需求。輸入屬性可能是有自己(子)屬性的rich對象類型。


  Action屬性能夠通過web頁面上的taglibs訪問。Struts2也支持ActionForm模式。rich對象類型,包括業(yè)務對象,能夠用作輸入/輸出對象。


  這種ModelDriven特性簡化了taglib對POJO輸入對象的引用。


  6、表達式語言:


  Struts1整合了JSTL,因此使用JSTLEL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。


  Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達式語言--"ObjectGraphNotationLanguage"(OGNL).


  7、綁定值到頁面(view):


  Struts1使用標準JSP機制把對象綁定到頁面中來訪問。


  Struts2使用"ValueStack"技術,使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。


  ValueStack策略允許通過一系列名稱相同但類型不同的屬性重用頁面(view)。


  8、類型轉換:


  Struts1ActionForm屬性通常都是String類型。Struts1使用Commons-Beanutils進行類型轉換。每個類一個轉換器,對每一個實例來說是不可配置的。


  Struts2使用OGNL進行類型轉換。提供基本和常用對象的轉換器。


  9、校驗:


  Struts1支持在ActionForm的validate方法中手動校驗,或者通過CommonsValidator的擴展來校驗。


  同一個類可以有不同的校驗內容,但不能校驗子對象。


  Struts2支持通過validate方法和XWork校驗框架來進行校驗。XWork校驗框架使用為屬性類類型定義的校驗和內容校驗,來支持chain校驗子屬性.


  10、Action執(zhí)行的控制:


  Struts1支持每一個模塊有單獨的RequestProcessors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。


  Struts2支持通過攔截器堆棧(InterceptorStacks)為每一個Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。


  為什么要使用Struts2


  Struts2是一個相當強大的JavaWeb開源框架,是一個基于POJO的Action的MVCWeb框架。它基于當年的Webwork和XWork框架,繼承其優(yōu)點,同時做了相當?shù)母倪M。


  1、Struts2基于MVC架構,框架結構清晰,開發(fā)流程一目了然,開發(fā)人員可以很好的掌控開發(fā)的過程。


  2、使用OGNL進行參數(shù)傳遞。


  OGNL提供了在Struts2里訪問各種作用域中的數(shù)據(jù)的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的數(shù)據(jù)。大大簡化了開發(fā)人員在獲取這些數(shù)據(jù)時的代碼量。


  (OGNL是Object-GraphNavigationLanguage的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現(xiàn)字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。)


  3、強大的攔截器。


  Struts2的攔截器是一個Action級別的AOP,Struts2中的許多特性都是通過攔截器來實現(xiàn)的,例如異常處理,文件上傳,驗證等。攔截器是可配置與重用的,可以將一些通用的功能如:登錄驗證,權限驗證等置于攔截器中。


  以完成一些Java?Web項目中比較通用的功能。在我實現(xiàn)的的一Web項目中,就是使用Struts2的攔截器來完成了系統(tǒng)中的權限驗證功能。


  4.易于測試。


  Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了5JavaWeb項目的測試。


  5、易于擴展的插件機制在Struts2添加擴展是一件愉快而輕松的事情,只需要將所需要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡單的設置就可以實現(xiàn)擴展。


  6.模塊化管理。


  Struts2已經把模塊化作為了體系架構中的基本思想,可以通過三種方法來將應用程序模塊化:將配置信息拆分成多個文件把自包含的應用模塊創(chuàng)建為插件創(chuàng)建新的框架特性,即將與特定應用無關的新功能組織成插件,以添加到多個應用中去。


  7.全局結果與聲明式異常。


  為應用程序添加全局的Result,和在配置文件中對異常進行處理,這樣當處理過程中出現(xiàn)指定異常時,可以跳轉到特定頁面。


  他的如此之多的優(yōu)點,是很多人比較的青睞,與spring,Hibernate進行結合,組成了現(xiàn)在比較流行的ssh框架。


  struts2有哪些優(yōu)點


  1、在軟件設計上Struts2的應用可以不依賴于ServletAPI和strutsAPI。Struts2的這種設計屬于無侵入式設計;


  2、攔截器,實現(xiàn)如參數(shù)攔截注入等功能;


  3、類型轉換器,可以把特殊的請求參數(shù)轉換成需要的類型;


  4、多種表現(xiàn)層技術,如:JSP、freeMarker、Velocity等;


  5、Struts2的輸入校驗可以對指定某個方法進行校驗;


  6、提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現(xiàn)。


  struts2是如何啟動的?


  struts2框架是通過Filter啟動的,即StrutsPrepareAndExecuteFilter,此過濾器為struts2的核心過濾器;


  StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操作。


  struts2讀取到struts.xml的內容后,是將內容封裝進javabean對象然后存放在內存中,以后用戶的每次請求處理將使用內存中的數(shù)據(jù),而不是每次請求都讀取struts.xml文件。


  struts2框架的核心控制器是什么?


  它有什么作用?


  1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。


  2)作用:負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。


  默認情況下,如果用戶請求的路徑不帶后綴或者后綴以.action結尾,這時請求將被轉入struts2框架處理。


  否則struts2框架將略過該請求的處理??梢酝ㄟ^常量"struts.action.extension"修改action的后綴。


  如:<constantname="struts.action.extension"value="do"/>


  如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開。


  <constantname="struts.action.extension"value="do,go"/>


  struts2配置文件的加載順序:


  struts.xml——>struts.properties常量可以在struts.xml或struts.properties中配置,如果在多個文件中配置了同一個常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值。


  struts.xml文件的作用:通知Struts2框架加載對應的Action資源。


  struts2是如何管理action的?


  這種管理方式有什么好處?


  struts2框架中使用包來管理Action,包的作用和java中的類包是非常類似的。


  主要用于管理一組業(yè)務功能相關的action。在實際應用中,我們應該把一組業(yè)務功能相關的Action放在同一個包下。


  struts2默認能解決get和post提交方式的亂碼問題嗎?


  不能。struts.i18n.encoding=UTF-8屬性值只能解析POST提交下的亂碼問題。


  ActionContext、ServletContext、pageContext的區(qū)別?


  1)ActionContext是當前的Action的上下文環(huán)境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用;


  2)ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;


  3)pageContext是JSP中的最重要的一個內置對象,可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用范圍只針對當前頁面,當前頁面結束時,pageContext銷毀,生命周期是JSP四個域對象中最小的。


  以上就是動力節(jié)點java培訓機構小編介紹的“小白自學Java框架,框架的全面解析總結”的內容,希望對大家有幫助,更多java最新資訊請繼續(xù)關注動力節(jié)點java培訓機構官網,每天會有精彩內容分享與你。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎影视永久费观看在线 | 玖玖在线播放 | 香港aa三级久久三级老师 | 久久综合伊人 | 久久男人资源站 | 成人在线精品视频 | 九九影音 | 青青热久久国产久精品秒播 | 四虎永久地址4hu2019 | 日日夜夜精品免费视频 | 久久91亚洲精品中文字幕 | 999久久久免费精品国产牛牛 | 特级毛片免费观看视频 | 亚洲国产日韩欧美综合久久 | 天天干天天曰 | 高清国产性色视频在线 | 手机国产日韩高清免费看片 | 日韩欧美黄色片 | 成人国产在线观看 | 国产亚洲欧美精品久久久 | 成人精品网 | 久久综合给合久久狠狠狠色97 | 亚洲高清国产一区二区三区 | 欧美亚洲国产日韩综合在线播放 | 韩日免费视频 | 亚洲一区视频 | 一级片免 | 女性特黄一级毛片 | 特级全黄一级毛片免费 | 国产福利影院 | 亚洲高清视频一区 | 日本色色网 | 国产精品久久免费 | 50-60岁老妇女一级毛片 | 久热在线 | 成人免费黄网站 | 久久精品久久精品久久精品 | 国产亚洲精品线观看77 | www久久久 | 精品无人区乱码一区二区 | 国产成人免费不卡在线观看 |