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

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

用XSLT 和 XML改進Struts

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

  摘要
  Struts是一個優秀的java Web開發框架。Struts是Apache項目之一,現在Struts已經在Java開發團體中得到了廣泛的支持。在這篇文章中Julien Mercay 和Gilbert Bouzeid將向我們介紹Struts的處理流程、描繪Struts框架,最后提出了Model 2x。Model 2x用xml/XSLT替換掉了原來的表現層中的jsp頁面。Model 2x通過這種方式更加明晰地劃分了業務邏輯層和表現層。
  
  正文
  自從Servlet API發布以來,Java開發人員使用了不同的技術來開發Web應用程序。Web開發人員已經熟悉到了Model 2的優點。Model 2 指的是基于MVC模式的WEB開發框架。Model 2能把應用邏輯層和表現層較好地區分開來。Struts構建在Model 2 之上,它向Java開發人員提供了一個普通的控制器Servlet,還有集中式的資源配置、資源治理以及錯誤處理等功能。
  
  這篇文章中我們引入了Model 2x。Model 2x可以將邏輯層和表現層更好地分離。我們先介紹Model 1和Model 2,然后講述一下Struts是如何實現MVC架構的,最后向讀者展示一下如何通過XML、XSLT來對現存的模式加以改進。
  
  Model 1
  理解Model 1是十分重要的,假如不熟悉Model 1將很難理解我們在文章中介紹的其他幾個架構。Model 1的基礎是JSP文件。JSP從Http請求中取得參數,調用所需的業務邏輯,處理Http對話,然后生成Html頁面。
  一個完整的Model 1項目包括一組JSP文件(這些文件大部分都是彼此獨立的)、一組所需的Java類和其他組件。一些早期的Web開發技術比如asp、php都使用類似的模式來開發的。
  
  Model 1主要也許是唯一的優勢就是簡單。Model 1中業務邏輯和顯示邏輯混合在JSP頁面中沒有進行抽象和分離,所以在進行快速和小規模的應用開發時,有非常大的優勢的。但用Model 1 開發復雜的項目的開發時,將不可避免地導致項目治理的困難。
  
  Model 2, MVC, and Struts/JSP
  
 用XSLT 和 XML改進Struts(圖一)

  
圖1

  
  圖1說明的是MVC架構中的三個部分,以及它們在Struts/JSP中的實現。
  控制器(Controller):Struts的最主要的部件就是一個普通的控制器Servlet??刂破魇敲恳粋€發送到Struts的Http請求的入口點??刂破靼阉械恼埱蠼浗忉尯蠓职laction。這些action是Struts Action類的子類。由開發人員負責實現它們??刂破饕矔詣拥陌袶ttp請求中的參數加入到Form bean中。Action負責實現核心的業務邏輯,比如做EJB調用,通過Java Bean訪問模型(model)。在Struts中可以通過定義一個XML文件來描述請求URI、具體業務邏輯處理、代表客戶提供的數據的Form組件三者之間的映射關系??刂破鞯木褪峭ㄟ^這個XML文件來定義的。
  
  模型(Model):
  Java beans就是模型的代表。這些bean分成3類:
  窗體Bean(Form Bean)對象用來包裝HTML表單數據,當然也包括通過URL請求傳遞過來的數據。舉例來說,一個登陸頁面可能有兩個屬性(PRoperty)login和passWord。Form Bean由Struts的ActionForm類擴展而來。
  請求Bean(Request Bean)擁有用來生成HTML頁面的所需的信息。例如在一個表現銀行賬戶狀態的頁面中,請求Bean就應該有賬戶相關信息以及近期的交易記錄等等。
  會話Bean(session Bean)擁有同一用戶在不同Http請求間共享的對話信息。
  
  視圖(View):
  Struts控制器會把Http請求轉發到作為MVC視圖的JSP文件。這個JSP文件可以訪問窗體Bean、請求Bean、會話Bean,生成結果文檔(通常是一個HTML文檔),并發送到客戶端。Struts提供了四組JSP標志庫。
   HTML:用來生成HTML標志,非凡是用來自模型的數據填寫HTML表單。
   Bean: 操作Bean。
   Logic: 根據Bean值實現邏輯結構。
   Template:處理頁面模板
  通過Struts標志的使用,你可以避免在視圖中使用任何的Java代碼。
  
  Struts/JSP 缺點
  雖然Struts/JSP較之其他模式有許多優勢,但它也存在著一些缺點和不足:
  程序員可以把應用邏輯放入JSP。碰到問題時,開發人員可以很快地加以修改,經驗表明這實際上是陷阱。程序結構很輕易變得復雜和難于治理。
  
  JSP不能很好地支持XML,也就不能保證生成的結果文檔(XML或HTML文檔)將會是100%“格式良好”(Well-Formed)。
  
  開發人員需要學習如何使用Struts的標志庫。事實上要理解這些Struts的標志庫,非凡是Bean和HTML標志庫的確要花費比較長的時間。
  
  你不能在視圖中用JSP來實現處理管道(processing pipeline)。只能做些簡單的include和forward,這樣很明顯就會限制了視圖的靈活性。例如,對布局計和風格的分離就會比較困難。
  
  對JSP頁面的任何修改都會導致JSP的重新編譯,這樣是非常耗費時間的。
  
  上述問題的解決方法必須要具備以下要求:
  限制視圖對模式和一些定義明確的上下文環境信息的可見程度,比如項目資源的可見程度就應該受到控制。
  強制使用格式良好的XML和HTML
  能夠對在現存的語言或API起到杠桿作用
  降低對視圖不同部分分離的難度,比如布局和風格的分離。
  縮短開發周期
  我們相信我們接下來討論的這個基于未加修改的Struts和XSLT的輕型框架可以滿足上述的要求。我們把這個新的架構叫做Model 2x
  
  Model 2x架構概觀
  Model 2x是 Struts和XSLT結合的產物。Model 2x基在視圖部分用XSLT和最后會被串行化成XML文件的Bean替代了原來Struts視圖部分的JSP文件,但原封不動地保留Struts的Controller和Model部分。
  
  XSLT定義
  作為一種W3C的正式標準,XSLT是用來對XML文檔進行轉化的一種語言。它是XSL(可擴展樣式表語言)的一部分。XPath是用作對XML文檔各部分進行定位的語言。在XSL樣式中,我們可以利用XPath表達式以一種緊湊而高效的形式選取XML文檔的一部分進行處理。
  
  XSL/FO也是XSL的規范的一部分,用來描述顯示給讀者的頁面外觀。XSL/FO主要的一個應用就是生成PDF文檔。
  
  XSLT和Struts的合成
  把Struts和XSLT結合在一起的方法一是在JSP頁面中執行XSLT轉換。我們可以用標志庫來實現這一功能,比如你可以使用Jakarta項目中的一個XSL標志庫項目來實現。假如使用這種方式,那么在JSP頁面中生成的是應該是XML而不是原來的HTML。借助XSLT樣式表,XML轉化成HTML或其他格式。然而這種方式需要對Struts本身加以修改。
  
  生成HTML最通常的方式是由Struts的HTML標簽庫來生成,但這類標志庫與XML并不兼容,也就不能和XSLT結合起來使用。當然可以對HTML標志庫加以修改讓其輸出XHTML,這并不困難,但這就要修改現有的Struts 1.0 代碼。
  此外,這一解決方案需要在四個不同的地方開發:Action 類(控制器)、模型Bean、JSP頁面、XSLT樣式表(視圖)。JSP與標簽庫的作用也只限于把模式Bean轉化成一個XML文檔。
  
  第二種方法就是我們提出的Model 2x。這種方法會自動執行這一任務,而且把JSP頁面從我們的解決方案中刪除了。圖2向我們很好地展示了Model 2x設計的核心構成。
  
 用XSLT 和 XML改進Struts(圖二)

  
圖2

  
  我們從圖2中可以看出來,Model 2x處理流程的最初部分和Struts的類似。請求被發送到Struts的控制器,然后又被分派給各自的業務邏輯處理單元(Action類的子類)??刂破鲃摻ˋctionForm對象。請求的參數都保存到這個ActionForm對象中。Action類的子類生成結果Bean(Result Bean),然后把這些Bean交給視圖來顯示。
  
  Model 2x和Struts處理流程不同的地方在于:Model 2x中用一個XSL Servlet配合XSLT樣式表實現了原來在Struts中由JSP實現的視圖部分。這個XSL Servlet首先根據Bean和上下文環境生成XML文檔,然后調用XSLT進行轉換。接下來我們會具體地講述這個過程。由于我們可以把一個請求提交給任何一個已經在Struts配置文件中注冊的URL,所以在這個過程中不用對Struts做任何的修改。
  
  XML文檔的生成
  把一個對象轉換到一個Stream的過程我們稱之為串行化。在Java 1.1中引入了java.io.Serializable接口和相關的API。二進制串行化可以把一個Java對象轉化到二進制流,在網絡上傳輸或是保存到文件中。相比之下,XML串行化是把一個Java對象樹轉化到文本型的XML流中。
  
  許多開放源代碼的軟件包,譬如Castor都可以用來執行XML串行化。在我們文章中提到的Model 2x案例中我們自行設計了一個簡單的XML串行化方案。這個方案中假設Bean的所有屬性是Java的基本類型或者java.util.Colleciton的子類。
  
  這個方案會遞歸地對窗體Bean(Form Bean)、請求Bean(Request Bean)和Session bean進行自省,創建一個DOM樹。同時,也串行化了資源和Struts配置數據也就是上下文環境信息。圖3說明了這個過程
  
用XSLT 和 XML改進Struts(圖三)

  
圖3 XML/XSL 工作流程

  
  XSLT處理
  在這個Model 2x案例中,XSLT轉換只限于樣式表對XML流的轉換。為了提高性能XSLServlet會對這個樣式表進行了緩存處理。XML流著由Struts的處理流程生成。你可以通過提供連續轉化或者使用更高級的配置來改進這個簡單的架構。Cocoon中你就可以看到這兩種方式的使用。Cocoon框架使用XML和XSLT構建服務器端的應用程序。Cocoon基于管道(Pipeline)的架構使其能夠更輕易對內容和邏輯的加以分離、與大量不同的數據源交互也很方便。通過XSLT,Cocoon的輸出可以與不同的設備兼容,比如HTML、WAP等等。
  圖3顯示的是XSLT的處理流程。下面

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费观看| 91在线色戒在线| 久久躁日日躁aaaaxxxx| 欧美日韩亚洲成人| 国产一区香蕉久久| 亚洲欧美国产日韩中文字幕| 国产精品免费一区| 最近中文字幕日韩精品| 中国china体内裑精亚洲片| 国产精品日韩专区| 久久免费少妇高潮久久精品99| 91麻豆国产语对白在线观看| 亚洲欧洲日韩国产| 国产精品揄拍一区二区| 日韩在线中文字| 欧美性少妇18aaaa视频| 亚洲综合社区网| 亚洲最大的av网站| 欧美电影免费观看| 国产精品久久久久久婷婷天堂| 国产精品1区2区在线观看| 91深夜福利视频| 欧美日韩视频在线| 精品国产乱码久久久久久婷婷| 欧美精品aaa| 国产色婷婷国产综合在线理论片a| 国产精品久久久久久久久久久不卡| 91在线视频精品| 久久精品99无色码中文字幕| 久久久免费电影| 国产精品成熟老女人| 日韩电影免费在线观看中文字幕| 日本高清不卡的在线| 欧美高清视频在线播放| 精品国产福利视频| 57pao成人国产永久免费| 亚洲伦理中文字幕| 欧美黄色性视频| 深夜福利日韩在线看| 欧美精品video| 国产一区二区动漫| 国产在线拍揄自揄视频不卡99| 国产免费一区二区三区香蕉精| 大荫蒂欧美视频另类xxxx| 日韩成人激情影院| 精品少妇一区二区30p| 亚洲一区二区国产| 成人在线视频网| 国产主播欧美精品| 久久久久久久久久久免费| 亚洲色图第三页| 亚洲丁香久久久| 日韩av免费看网站| 成人看片人aa| 国产精品视频一区二区高潮| 久久99热精品这里久久精品| 欧美日韩中文在线观看| 精品中文字幕在线观看| 欧美精品videosex牲欧美| 欧美精品videossex性护士| 91久久久久久久久久久久久| 精品日本高清在线播放| 久久亚洲精品国产亚洲老地址| 在线日韩欧美视频| 久久精品视频播放| 亚洲色图50p| 国产精品久久久久久婷婷天堂| 成人黄色激情网| 国产精品午夜国产小视频| 大荫蒂欧美视频另类xxxx| 亚洲香蕉成人av网站在线观看| 国产精品爽爽ⅴa在线观看| 久久亚洲精品一区| 亚洲尤物视频网| 欧美老女人www| 国产欧美日韩中文| 日韩中文字幕在线视频播放| 欧美视频在线免费看| 亚洲精品国产美女| 国产精品视频一区二区高潮| 亚洲韩国欧洲国产日产av| 国产美女精品视频| 永久555www成人免费| 78色国产精品| 欧美成人免费播放| 亚洲无限乱码一二三四麻| 日韩精品在线免费观看视频| 欧美理论电影在线播放| 国产精品入口日韩视频大尺度| 国产精品亚洲片夜色在线| 日韩av一卡二卡| 超碰97人人做人人爱少妇| 亚洲精品videossex少妇| 国产日韩中文字幕| 成人av电影天堂| 国产日韩专区在线| 国产精品女人网站| 国产69精品99久久久久久宅男| 国产免费一区视频观看免费| 国产成人在线亚洲欧美| 久久亚洲精品一区二区| 欧美激情亚洲激情| 亚洲一区二区久久| 欧美国产精品人人做人人爱| 国产欧美一区二区三区四区| 一区二区三区天堂av| 国产精品久久久久久久9999| 国产成人福利网站| 亚洲午夜av电影| 国产日韩欧美在线看| 国产99久久精品一区二区| 欧美成人第一页| zzjj国产精品一区二区| 欧美日韩亚洲国产一区| 亚洲女人初尝黑人巨大| 亚洲韩国欧洲国产日产av| 欧美亚洲成人精品| 最近更新的2019中文字幕| 高清日韩电视剧大全免费播放在线观看| 91国产美女视频| 国产免费久久av| 国产综合视频在线观看| 丝袜亚洲另类欧美重口| 97高清免费视频| 在线电影中文日韩| 欧美激情欧美激情在线五月| 日韩国产精品一区| 亚洲国产成人爱av在线播放| 另类少妇人与禽zozz0性伦| 亚洲欧美另类中文字幕| 亚洲欧美日韩中文在线制服| 欧美乱妇高清无乱码| 国产精品第三页| 亚洲一二三在线| 77777少妇光屁股久久一区| 日韩人体视频一二区| 黄色91在线观看| 这里只有精品久久| www.久久色.com| 亚洲aa在线观看| 国内精品视频在线| 精品视频久久久久久久| 亚洲精品永久免费精品| 国产一区二区三区18| 96精品视频在线| 亚洲国产精品成人一区二区| 国产精品a久久久久久| 欧美另类交人妖| 国产精品av电影| 亚洲视频电影图片偷拍一区| 国产精品日韩欧美| 亚洲欧美中文日韩v在线观看| 久久久91精品| 亚洲字幕一区二区| 懂色av中文一区二区三区天美| 国产欧美日韩中文| 欧美日韩一区免费| 精品久久久久久中文字幕一区奶水| 久久久久五月天| 国产主播喷水一区二区| 亚洲国产成人爱av在线播放| 国内精品400部情侣激情| 久久久中精品2020中文| 韩国日本不卡在线|