亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts控制器組件簡單介紹

2019-11-18 12:54:25
字體:
來源:轉載
供稿:網友

  Struts控制器組件負責接受用戶請求、更新模型,以及選擇合適的視圖組件返回給用戶??刂破鹘M件有助于將模型層和視圖層分離,有了這種分離,就可以在同一個模型的基礎上得心應手地開發多種類型的視圖。Struts控制器組建主要包括:
  
  ·ActionServlet組件:充當Struts框架的中心控制器。
  
  ·RequestPRocessor組件:充當每個子應用模塊的請求處理器。
  
  ·Action組件:負責處理一項具體的業務。
  
  Struts框架采用控制器組件來預處理所有的客戶請求,這種集中控制方式可以滿足MVC設計模式的兩大需求:
  
  ·首先,控制器在用戶輸入數據和模型之間充當媒介 / 翻譯者的角色,提供一些通用功能,如安全、登入和其他針對具體用戶請求的重要服務,當系統的這些通用功能出現需求變更時,部需要修改整個應用,只需要修改局部的控制器組件即可。
  
  ·其次,由于所有的請求都經過控制器過濾,因此可以降低視圖組件之間,以及視圖組件和模型組件之間的相互依靠關系,提高每個組件的相對獨立性。由控制器組件來決定把合適的視圖組件返回給用用戶,這可以減少視圖組件之間直接的,錯綜復雜的連接關系,使應用更加靈活,便于維護。
  
  Struts框架采用ActionServlet和RequestProcessor組件進行集中控制,并采用Action組件來處理單項業務。
  
  一 控制器組件的控制機制
  
  Struts的控制器組件主要完成以下任務:
  
  ·接受用戶請求
  
  ·根據用戶請求,調用合適的模型組件來執行相應的業務邏輯。
  
  ·獲取業務邏輯執行結果。
  
  ·根據當前狀態以及業務邏輯執行結果,選擇合適的視圖組件返回給用戶。
  
  1 Action類
  
  org.apache.struts.action.ActionServlet類是Struts框架的核心控制器組件,所有的用戶請求都先有ActionServlet來處理,然后再由ActionServlet把請求轉發給其他組件。Struts框架只答應在一個應用中配置一個ActionServlet類,在應用的生命周期中,僅創建ActionServlet類的一個實例,這個ActionServlet實例可以同時響應多個用戶請求。
  
  (a)  Struts框架初始化過程
  
  (1)  調用initInternal()方法,初始化Struts框架內在的消息資源,如與系統日志相關的同志、警告和錯誤消息。
  
  (2)  調用initOther()方法,從web.xml文件中加載ActionServlet的初始化參數,如config參數。
  
  (3)  調用initServlet()方法,從web.xml文件中加載ActionServlet的URL映射信息。此外還會注冊web.xml和Struts配置文件所使用的DTD文件,這些DTD文件用來驗證web.xml和Struts配置文件的語法。
  
  (4)  調用initModuleConfig()方法,加載并解析子應用模塊的Struts配置文件;創建ModuleConfig對象,把它存儲在ServletContext中。
  
  (5)  調用initModuleMessageResources()方法,加載并初始化默認子應用模塊的消息資源:創建MessageResources對象,把它存儲在ServletContext中。
  
  (6)  調用initModuleDataSources()方法,加載并初始化默認子應用模塊的數據源。假如在Struts配置文件中沒有定義元素,就忽略這一流程。
  
  (7)  調用InitModulePlugins()方法,加載并初始化默認子應用模塊的所有插件。
  
  (8)  當默認子應用模塊被成功地初始化后,假如還包括其他子應用模塊,將重復流程(4)~(7),分別對其他子應用模塊進行初始化。
  
  (b)  ActionServlet的process()方法
  
  當ActionServlet實例接受到HTTP請求之后,在doGet()或doPost()方法都會調用process()方法來處理請求。一下是ActionServlet的process()方法的源代碼:
  
  protected void process (HttpServletRequest request, HttpServletResponse response)
  
  throw IOException, ServletException {
  
  ModuleUtils.getInstance().selectModule(request, getServletContext());
  
  getRequestProcessor(getModuleConfig(request)).process(request, response);
  
  }
  
  在process()方法中,首先調用org.apache.struts.util.ModuleUtils類的selectModule()方法,這個方法選擇負責處理當前請求的子應用模塊,然后把與子應用模塊相關的ModuleConfig和MessageResources對象存儲倒request范圍中,這使得框架的其余組件可以方便地從request范圍中讀取這些對象,從而獲取應用配置信息和消息資源。
  
  process()方法的第二步操作為獲得RequestProcessor類的實例,然后調用RequestProcessor類的process()方法,來完成十幾的預處理請求操作。
  
  (c)  擴展ActionServlet類
  
  在Sturts 1.1 之前的版本中,ActionServlet類本身包含了很多處理請求的代碼。從Struts 1.1 開始,多數功能被移到 org.apache.struts.action.RequestProcessor 類中,以便減輕ActionServlet類的控制負擔。
  
  盡管新版本的Struts框架答應在應用中創建礦展ActionServlet類的子類,但是這在多數情況下沒有必要,因為控制器的多數控制功能位于RequestProcessor類中。
  
  假如實際應用確實需要創建自己的ActionServlet類,則可以創建一個ActionServlet的子類,然后在web.xml文件中配置這個客戶化ActionServlet類。
  
  假如覆蓋了init()方法,應該確保首先調用super.init(),它保證ActionServlet的默認初始化操作被執行。除了覆蓋init()方法外,事實上,還可以根據十幾需要覆蓋ActionServlet的任何其他方法。
  
  2 RequestProcessor類
  
  對于多應用模塊的Struts應用,每個子應用模塊都有各自的RequestProcessor實例。在ActionServlet的process()方法中,一旦選擇了正確的子應用模塊,就會調用子應用模塊的RequestProcessor實例的process()方法來處理請求。在ActionServlet調用這個方法時,會把當前的request和response對象傳給它。
  
  Struts框架只答應應用中存在一個ActionServlet類,但是可以存在多個客戶化的RequestProcessor類,每個子應用模塊都可以擁有單獨的RequestProcessor類。假如想修改RequestProcessor類的一些默認功能,可以覆蓋RequestProcessor基類中的相關方法。
  
  (a)  RequestProcessor類的process()方法
  
  RequestProcessor類的process()方法負責實際的預處理請求操作。
  
  RequestProcessor類的process()方法一次執行一下流程:
  
  (1) 調用processMultipart()方法。假如HTTP請求方式為POST,并且請求的contentType屬性以“multipart/form-data”開頭,標準的HttpServletRequest對象將被重新包裝,以方便處理“multipart”類型的HTTP請求。假如請求方式為GET,或者contentType屬性不是“multipart”,就直接返回原始的HttpServletRequest對象。
  
  (2) 調用processPath()方法,獲得請求URI的路徑,這一信息可用于選擇合適的Struts Action組件。
  
  (3) 調用processLocale()方法,當ControllerConfig對象的locale屬性為true,將讀取用戶請求中包含的Locale信息,然后把Locale實例保存在session范圍內。
  
  (4) 調用processContent()方法,讀取ControllerConfig對象的contentType屬性,然后調用response.setContentType(contentType)方法,設置響應結果的文檔類型和字符編碼。
  
  (5) 調用processNoCache()方法,讀取ControllerConfig對象的nocache屬性,假如nocache屬性為true,在響應結果中將加入特定的頭參數:Pragma、Cache-Control和EXPires,防止頁面被存儲在客戶瀏覽器的緩存中。
  
  (6) 調用processPreprocess()方法。該方法不執行任何操作,直接返回true。子類可以覆蓋這個方法,執行客戶化的預處理請求操作。
  
  (7) 調用processMapping()方法,尋找和用戶請求的URI匹配的ActionMapping。假如不存在這樣的ActionMapping,則向用戶返回恰當的錯誤消息。
  
  (8) 調用processRoles()方法,先判定是否為Action配置了安全角色,假如配置了安全角色,就調用isUserRole()方法判定當前用戶是否具備必需的角色;假如不具備,就結束請求處理流程,向用戶返回恰當的錯誤消息。
  
  (9) 調用processActionForm()方法,先判定是否為ActionMapping配置了ActionForm,假如配置了ActionForm,就先從ActionForm的存在范圍內尋找該ActionForm實例;假如不存在,就創建一個實例。接下來把它保存在合適的范圍中,保存時使用的屬性key為ActionMapping的name屬性。
  
  (10) 調用processActionForm()方法。假如為ActionMapping配置了ActionForm,就先調用ActionForm的reset()方法,再把請求中的表單數據組裝到ActionForm中。
  
  (11) 調用processValidate()方法,假如為ActionMapping配置了ActionForm,并且ActionMapping的validate屬性為true,就調用ActionForm的validate()方法。假如validate()方法返回的ActionErrors對象中包

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女视频网站| 国产精品黄页免费高清在线观看| 日本成人黄色片| 亚洲精品98久久久久久中文字幕| 精品人伦一区二区三区蜜桃免费| 久久欧美在线电影| 精品国产乱码久久久久久婷婷| 久久成人精品一区二区三区| 大荫蒂欧美视频另类xxxx| 国产97在线亚洲| 久久久黄色av| 日韩中文字幕在线播放| 综合网中文字幕| 狠狠色狠狠色综合日日小说| 国产精品久久国产精品99gif| 九九精品在线播放| 欧美成人精品在线视频| 精品福利在线观看| 亚洲理论在线a中文字幕| 久久久久久久999精品视频| 日本三级久久久| 国产精品久久久久久久天堂| 国产精品夫妻激情| 国产成人亚洲综合91精品| 激情成人在线视频| 九色成人免费视频| 国产成人精品免高潮费视频| 永久免费看mv网站入口亚洲| 国产精品中文字幕久久久| 国外日韩电影在线观看| 久久久久北条麻妃免费看| 亚洲在线观看视频网站| 91综合免费在线| 日韩欧美精品网站| 国产69久久精品成人| 日韩精品www| 日韩欧美在线网址| 欧美多人爱爱视频网站| 欧美在线视频免费| 欧美壮男野外gaytube| 91精品中文在线| 在线观看91久久久久久| 成人激情黄色网| 久久成人免费视频| 亚洲午夜av电影| 亚洲欧洲日产国产网站| 亚洲电影免费观看高清完整版| 中国china体内裑精亚洲片| 国产91在线播放精品91| 欧美成人sm免费视频| 日韩av大片在线| 精品国产一区二区三区在线观看| 久久久久久久999精品视频| 在线丨暗呦小u女国产精品| 色视频www在线播放国产成人| 欧美综合激情网| 北条麻妃久久精品| 狠狠做深爱婷婷久久综合一区| 福利视频一区二区| 国产精品久久久久7777婷婷| 国产精品福利网| 久久久999国产| 一道本无吗dⅴd在线播放一区| 中文字幕欧美日韩精品| 国产精品久久久久久久久久尿| 在线不卡国产精品| 欧美高清在线视频观看不卡| 亚洲精选一区二区| 97视频在线观看免费| 国产精品99导航| 国内精品免费午夜毛片| 日韩精品电影网| 51精品国产黑色丝袜高跟鞋| 欧美性少妇18aaaa视频| 亚洲精品久久久久国产| 欧美成年人网站| 国产亚洲欧美视频| 欧美成在线视频| 日韩av免费看网站| 色妞一区二区三区| 性色av一区二区三区红粉影视| 国产精品自产拍高潮在线观看| 精品综合久久久久久97| 日韩大陆欧美高清视频区| 欧美日韩国产综合视频在线观看中文| 中国人与牲禽动交精品| 国产精品爱久久久久久久| 久久av在线播放| 亚洲精品自拍视频| 中文字幕亚洲一区在线观看| 91欧美日韩一区| 91国在线精品国内播放| 91精品国产91久久久| 亚洲国产精品热久久| 日韩视频免费在线| 欧美日韩激情视频| 成人写真视频福利网| 岛国av一区二区| 欧美老女人bb| 最近2019年日本中文免费字幕| 亚洲摸下面视频| 亚洲第一视频在线观看| 日韩女优人人人人射在线视频| 久久久免费电影| 91国产精品视频在线| 96精品久久久久中文字幕| 日韩电影中文字幕一区| 亚洲精品久久久久久久久久久久久| 伊人成人开心激情综合网| 日韩av网址在线观看| 亚洲天堂网站在线观看视频| 国产美女直播视频一区| 7m第一福利500精品视频| 亚洲欧美日韩中文在线制服| 91亚洲国产成人精品性色| 国产精品入口免费视频一| 亚洲视频在线观看| 午夜剧场成人观在线视频免费观看| 亚洲第一区中文字幕| 日韩经典中文字幕在线观看| 亚洲自拍欧美色图| 一区二区三区 在线观看视| 这里只有精品在线观看| 91精品国产电影| 一区二区三区www| 精品中文字幕在线2019| 欧美剧在线观看| 亚洲天堂网站在线观看视频| 亚洲精品av在线播放| 欧美影院成年免费版| 中文字幕欧美日韩精品| 国产日韩欧美成人| 久久久亚洲国产| 538国产精品一区二区免费视频| 日韩av网址在线观看| 国产欧美日韩亚洲精品| 久久影视电视剧凤归四时歌| 在线观看久久久久久| 丝袜亚洲欧美日韩综合| 久久综合电影一区| 成人国产精品一区| 久久久久久亚洲精品中文字幕| 国产欧美韩国高清| 国模吧一区二区三区| 欧洲美女免费图片一区| 色偷偷88888欧美精品久久久| 久久的精品视频| 69久久夜色精品国产69乱青草| 91欧美激情另类亚洲| 国产视频久久久久| 国产精品99久久99久久久二8| 欧美日韩中国免费专区在线看| 欧美第一淫aaasss性| 欧美日韩免费区域视频在线观看| 正在播放国产一区| 日韩中文在线中文网三级| 国产成人午夜视频网址| 久久久精品一区二区三区| 国外成人在线播放| 韩剧1988在线观看免费完整版| 欧美大胆a视频| 亚洲2020天天堂在线观看| 亚洲人成在线观| 国产日韩精品在线观看|