freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于j2ee平臺的高校學(xué)籍管理系統(tǒng)(編輯修改稿)

2025-07-20 07:08 本頁面
 

【文章內(nèi)容簡介】 軟件抽象。它可以代表業(yè)務(wù)領(lǐng)域中的人、地點、事物或概念。業(yè)務(wù)對象包括狀態(tài)和行為。業(yè)務(wù)對象可分為三種類型:實體業(yè)務(wù)對象,過程業(yè)務(wù)對象和事件業(yè)務(wù)對象在應(yīng)用中使用業(yè)務(wù)對象有許多好處,最重要的一點就是業(yè)務(wù)對象提供了通用的術(shù)語和概念,不管是技術(shù)人員還是非技術(shù)人員都可以共享并理解它們。它們可以直接地代表真實世界中的概念,開發(fā)小組的所有成員都能理解它們,如果針對同一個業(yè)務(wù)領(lǐng)域需要開發(fā)出多個應(yīng)用,那么這些應(yīng)用可以共享這些業(yè)務(wù)對象。業(yè)務(wù)對象的可重用特性可以提高應(yīng)用開發(fā)速度,減少冗余。此外,業(yè)務(wù)對象可以隱藏實現(xiàn)細節(jié),對外只暴露接口。當(dāng)應(yīng)用中的業(yè)務(wù)對象在內(nèi)存中創(chuàng)建后,它們不可能永遠存在。最后,它們要么從內(nèi)在中清除,要么被持久化到數(shù)據(jù)存儲庫中。內(nèi)存無法永久保佑數(shù)據(jù),因此必須對業(yè)務(wù)對象進行持久化。否則,如果對象沒有被持久化,用戶在應(yīng)用運行時發(fā)出的訂單信息將在應(yīng)用結(jié)束后隨之消失。一旦數(shù)據(jù)被持久化,它們可以在應(yīng)用運行時被重新講稿到內(nèi)存中,并重新構(gòu)造出業(yè)務(wù)對象。業(yè)務(wù)對象的持久化過程如圖5所示。圖5 業(yè)務(wù)對象的持久化關(guān)系型數(shù)據(jù)庫被廣泛用來存儲數(shù)據(jù)。關(guān)系型數(shù)據(jù)庫中存放的是關(guān)系型數(shù)據(jù),它是非面向?qū)ο蟮摹0褬I(yè)務(wù)對象映射到非面向?qū)ο蟮臄?shù)據(jù)庫中,存在著阻抗不匹配(impedance mismatch),因為對象由狀態(tài)和行為組成,而關(guān)系型數(shù)據(jù)庫則由表組成,對象之間的各種關(guān)系和關(guān)系型數(shù)據(jù)庫中表之間的關(guān)系并不一一對應(yīng)。例如對象之間的繼承關(guān)系就不能直接映射到關(guān)系型數(shù)據(jù)庫中。 Struts控制器組件Struts控制器組件負責(zé)接收用戶請求、更新模型、以及選擇合適的視圖組件返回給用戶。控制器組件有助于將模型層和視圖層分離,有了這種分離,就可以在同一個模型的基礎(chǔ)上得心應(yīng)手地開發(fā)多種類型的視圖。Struts控制器組件主要包括:a)ActionServlet組件:充當(dāng)Struts框架的中央控制器。b)RequestProcessor組件:充當(dāng)每個子應(yīng)用模塊的請求處理器。c)Action組件:負責(zé)處理一項具體的業(yè)務(wù)。Struts框架采用控制器組件來預(yù)處理所有的客戶請求,這種集中控制方式可以滿足MVC設(shè)計模式的兩大需求:首先,控制器在用戶輸入數(shù)據(jù)和模型之間充當(dāng)媒介/翻譯者的角色,提供一些通用功能,如安全、登入和其他針對具體用戶請求的重要服務(wù),當(dāng)系統(tǒng)的這些通用功能出現(xiàn)需求變更時,不需要修改整個應(yīng)用,只需要修改局部的控制器組件即可。其次,由于所有的請求都經(jīng)過控制器過濾,因此可以降低視圖組件之間,以及視圖組件和模型組件之間的相互依賴關(guān)系,提高每個組件的相對獨立性。由控制器組件來決定把合適的視圖組件返回給用戶,這可以減少視圖組件之間直接的、錯綜復(fù)雜的鏈接關(guān)系,使應(yīng)用更加靈活,便于維護。Strtus框架采用ActionServlet和RequestProcessor組件進行集中控制,并采用Action組件來處理單項業(yè)務(wù)。Struts的控制器組件主要完成以下任務(wù):1)接收用戶請求。2)根據(jù)用戶請求,調(diào)用合適的模型組件來執(zhí)行相應(yīng)的業(yè)務(wù)邏輯輯。3)獲取業(yè)務(wù)邏輯執(zhí)行結(jié)果。4)根據(jù)當(dāng)前狀態(tài)以及業(yè)務(wù)邏輯執(zhí)行結(jié)果,選擇合適的視圖組件返回給用戶。1.ActionServlet類,所有的用戶請求都先由ActionServlet來處理,然后再由ActionServlet把請求轉(zhuǎn)發(fā)給其他組件。Struts框架只允許在一個應(yīng)用中配置一個ActionServlet類,在應(yīng)用的生命周期中,僅創(chuàng)建ActionServlet類的一個實例,這個ActionServlet實例可以同時響應(yīng)多個用戶請求。Servlet容器在啟動時,或者用戶首次請求ActionServlet時加載ActionServlet類。在這兩種情況下,Servlet容器都會在ActionServlet被加載后立即執(zhí)行它的init()方法,這可以保證當(dāng)ActionServlet處理用戶請求時已經(jīng)被初始化。以下是ActionServlet的init()方法完成的初始化流程。1)調(diào)用initInternal()方法,初始化Struts框架內(nèi)在的消息資源,如與系統(tǒng)日志相關(guān)的通知、警告和錯誤消息。2)調(diào)用initOther()方法,如config參數(shù)。3)調(diào)用initServlet()方法。4)調(diào)用initModuleConfig()方法,加載并解析默認子應(yīng)用模塊的Struts配置文件;創(chuàng)建ModuleConfig對象,把它存儲在ServletContext()中。5)調(diào)用initModuleMessageResources()方法,加載并初始化默認子應(yīng)用模塊的消息資源;創(chuàng)建MessageResources對象,把它存儲在ServletContext中。6)調(diào)用initModuleDataSources()方法,加載并初始化默認子應(yīng)用模塊的數(shù)據(jù)源。如果在Struts配置文件中沒有定義datasources元素,就忽略這一流程。7)調(diào)用initModulePlugins()方法,加載并初始化默認子應(yīng)用模塊的所有插件。8)當(dāng)默認子應(yīng)用模塊被成功地初始化后,如果還包括其他子應(yīng)用模塊,將重復(fù)流程(4)~(7),分別對其他子應(yīng)用模塊進行初始化。2. ActionServlet的process()方法當(dāng)ActionServlet實例接收到HTTP請求后,在doGet()或doPost()方法中都會調(diào)用process()方法來處理請求。以下是ActionServlet的process()方法的源代碼:Protected void process(HttpServletRequest request,HttpServletResponse response)throws { ().selectModule(request, getServletContext())。 getRequestProcessor(getModuleConfig(request)).process(request,response)。}Process()方法本身看上去并不復(fù)雜,但是它所調(diào)用的其他方法的實現(xiàn)比較復(fù)雜。在process()方法中,()類的selectModule()方法,這個方法選擇負責(zé)處理當(dāng)前請求的子應(yīng)用模塊,然后把與子應(yīng)用模塊相關(guān)的MouduleConfig和MessageResources對象存儲到request范圍中,這使得框架的其余組件可以方便地從request范圍中讀取這些對象,從而獲取應(yīng)用配置信息和消息資源。Process()方法的第二步操作為獲得RequestProcessor類的實例,然后調(diào)用RequestProcessor類的process()方法,來完成實際的預(yù)處理請求操作??梢詣?chuàng)建ActionServlet類的子類,同時我們也可以擴展ActionServlet類以達到需要的目的。3. RequestProcessor類對于多應(yīng)用模塊的Struts應(yīng)用,每個子應(yīng)用模塊都有各自的RequestProcessor實例。在ActionServlet的process()方法中,一旦選擇了正確的子應(yīng)用模塊,就會調(diào)用子應(yīng)用模塊的RequestProcessor實例的process()方法來處理請求。在ActionServlet調(diào)用這個方法時,會把當(dāng)前的request和response對象傳給它。Struts框架只允許應(yīng)用中存在一個ActionServlet類,蛤是可以存在多個客戶化的RequestProcessor類,每個子應(yīng)用模塊都擁有單獨的RequestProcessor類。如果想RequestProcessor想類的一些默認功能,可以覆蓋RequestProcessor類中的相關(guān)方法。RequestProcessor類的process()方法負責(zé)實際的預(yù)處理請求操作,該方法依次執(zhí)行以下流程。1)調(diào)用processMultipart()方法。如果HTTP請求方式來POST,并且請求的contentType屬性以“multipart/formdata”開頭,標(biāo)準(zhǔn)的HttpServletRequest對象將被重新包裝,以方便處理“multipart”類型的HTTP請求。如果請求方式為GET,或者contentType屬性不是“multipart”,就直接返回原始的HttpServletRequest對象。2)調(diào)用processPath()方法,獲得請求URL的路徑,這一信息可用于選擇合適的Struts Action組件。3)調(diào)用processContent()方法,當(dāng)ControllerConfig對象的locale屬性為true,將讀取用戶請求中包含的Locale信息,然后把Locale實例保存在session范圍內(nèi)。4)調(diào)用processContent()方法,讀取ControllerConfig對象的contentType屬性, (contentType)方法,設(shè)置響應(yīng)結(jié)果的文檔類型和字符編碼。processContent()方法的代碼如下:Protected void processContent(HttpServletRequest request,HttpServletResponse response){String contentType=().getContentType()。If(contentType!=null){ (contentType)。}}5)調(diào)用processNoCache()方法,讀取ControllerConfig對象的nocache屬性,如果nocache屬性為true,在響應(yīng)結(jié)果中將加入特定的頭參數(shù):Pragma、CacheControl和Expires,防止頁面存儲在客戶瀏覽器的緩存中。processNoCache()方法的代碼如下: Protected void processNoCache(HttpServletRequest request,HttpServletResponse response){if(().getNocache()){(“progma”, “Nocache”)。(“CacheControl”, “Nocache”)。(“Expires”, 1)。}}6)調(diào)用processPreprocess()方法。該方法不執(zhí)行任何操作,執(zhí)行客戶化的預(yù)處理請求操作。7)調(diào)用processMapping()方法,尋找和用戶請求的URI匹配的ActionMapping,如果不存在這樣的ActionMapping,則向用戶返回恰當(dāng)?shù)腻e誤消息。8)調(diào)用processRoles()方法,先判斷是否為Action配置了安全角色,如果配置了安全角色,就調(diào)用isUserInRole()方法判斷當(dāng)前用戶是否具備必需的角色;如果不具備,就結(jié)束請求處理流程,向用戶返回恰當(dāng)?shù)腻e誤消息。9)調(diào)用processActionForm()方法,先判斷是否為ActionMapping配置了ActionForm,如果配置了ActionForm,就先從ActionForm的存在范圍內(nèi)尋找該ActionForm實例;如果不存在,就創(chuàng)建一個實例。接下來把它保存在合適的范圍中,保存時使用的屬性key為ActionMapping的name屬性。10)調(diào)用processPopulate()方法。如果為ActionMapping配置了ActionForm,就先調(diào)用ActionForm的reset()方法,再把請求中的表單數(shù)據(jù)組裝到ActionForm中。11)調(diào)用processValidate()方法,如果為ActionMapping配置了ActionForm,并且ActionMapping的validate屬性為true,就調(diào)用ActionForm的validate()方法。如果validate()方法返回的ActionErrors對象中包含ActionMessage對象,說明表單驗證失敗,就把ActionErrors對象存儲在request范圍內(nèi),再把請求轉(zhuǎn)發(fā)到ActionMapping的input屬性指定的Web組件。如果ActionForm的validate()方法執(zhí)行表單驗證成功,就繼續(xù)執(zhí)行下一步請求處理流程。12)調(diào)用processInclude()方法,判斷是否在ActionMapping中配置了include屬性。如果配置了這個屬性,就調(diào)用RequestDispatcher的include()方法,請求處理流程結(jié)束,否則繼續(xù)下一步。14)調(diào)用processActionCreate()方法,先判斷是否在Action緩存中存在這個Action實例,如果不存在,就創(chuàng)建一個Action實例,把它保存在Action緩存中。15)調(diào)用processActionPerform()方法,該方法再調(diào)用Action實例的execute()方法。Execute()方法位于try/catch代碼中,以便捕獲異常。16)調(diào)用processActionForward()方法,把Action的execute(
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1