熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

用Struts框架開發Java應用

2013-11-23 20:33:13  來源: Java開源技術 

  Struts開始於是采用Java Servlet/JavaServer Pages技術開發Web應用程序的開放源碼的框架當前最新的正式版本是本文內容就是針對這個版本的采用Struts能開發出基於MVC(ModelViewController)設計模式的Java Web前端應用通常MVC設計模式把一個系統劃分為相互協作的三個部分
   Model(模型)模型用於封裝系統的狀態比如業務數據
   View(視圖)視圖是模型的表示提供用戶交互界面當模型狀態發生變化時視圖應該得到通知以便更新模型的變化
   Controller(控制器)接受來自視圖的請求修改模型的狀態
  但是在基於JSP/Servlet的Web應用中要使用MVC模式需要解決這樣一個問題就是HTTP的底層是TCP/IP協議而TCP/IP是一種無狀態連接的協議如果我們的模型發生了變化就無從通知視圖而Struts采用了在JSP規范v中就提出的MVC Model 這是對MVC在Web上應用的修訂版它可以解決這個問題見圖
   
  圖 MVC Model(FromMalcolm Davis)
   
  圖 Sturts工作機理(From Malcolm Davis)
  Struts應用有個主要部件一個是使用Servlet實現的中心控制器(Controller Servlet由Struts提供的orgapacheaction ActionServlet類實現)及負責具體業務邏輯處理的Action(orgapacheactionAction的子類)一個是用於顯示的JSP頁面(viewer)另一個是用於封裝系統狀態的業務邏輯元件(Model)Struts 的中心控制器接受所有來自客戶端的請求並根據系統的配置(strutsconfigxml)路由HTTP請求到其它Action對象(開發者實現的orgapachestruts actionAction的子類)在這些Action對象中會完成所有的業務操作比如插入一條訂單修改一條記錄等處理完畢由Struts的Controller Servlet根據配置轉向到適當的JSP頁面將處理結果顯示給用戶從這裡可以看出在Struts中Controller Servlet擔任了重要的角色它控制所有的程序流轉使MVC三個相對獨立的部分協調工作從而使系統的功能更加完善從圖可見Struts是MVC Model 的一個典型應用
  安裝
  你可以從struts/release/下載Struts最新的二進制版本和源碼首先進入v下載頁面下載jakartastrutszip(MB)然後將jakartastrutszip解壓其中包含lib和webapps兩個子目錄lib子目錄中是使用Struts需要的Jar文件標簽庫定義文件(tld)以及對一個Struts Web應用的webxml和strutsconfigxml配置文件的DTD定義(dtd)webapps子目錄中包含了幾個Struts的示例應用都已打包為war格式這裡主要介紹其中三個
  
   strutsexamplewar一個采用Struts框架的簡單的示例程序Controller
  
   strutsdocumentationwarStruts文檔的war包
  
   strutsblankwar一個空白的Struts的應用可以方便地修改並且配置自己的應用
  
  下面運行strutsexample這個示例程序因為Struts是一個Web應用所以要運行這個示例需要一個兼容Servlet JSP 以上規范的Web容器本文以Tomcat a(對Tomcat 也適用)為例進行介紹首先保證Tomcat可以正常運行而運行struts example不需要其它特殊配置的只要把strutsexamplewar拷入Tomcat下的webapps目錄Tomcat在啟動時就會自動解壓了然後啟動Tomcat在浏覽器中輸//localhost:/strutsexample如果能看到如圖頁面就說明已經運行成功
  
  在圖中你可以點擊Register with the MailReader Demonstration Application注冊一個MailReader用戶或直接點擊Log on to the MailReader Demonstration Application輸入用戶名和密碼(示例程序已經預置了一個用戶user/pass配置在strutsexample下的WEBINF\databasexml文件中)登入
  分析
  webxml
  在圖所示的頁面中點擊Log on to the MailReader Demonstration Application鏈接進入/logonjsp頁面輸入預定義的用戶名為user密碼為pass然後提交就進入了圖的用戶主頁面
   
  圖 struts example主頁面
   
  圖 用戶主頁面
  大家可能已經注意到了這裡的URL的後綴是do那麼它有什麼意義?服務器又是怎樣處理這樣的請求呢?下面我們看看{TOMCAT}\WEBINF\webxml文件就會非常清楚在webxml中你可以找到如下配置片斷
  
  
  
  action
  *do
  

  從上面配置代碼中可以知道do結尾的請求URL是由一個名為action的Servlet處理實際上可以為應用取另一個後綴只要修改就行了但下面所有的討論都以do為例我們再看一下這個Servlet的配置
  
  
  
  action
  orgapachestrutsactionActionServlet
  
  

  application


  

  orgapachestrutswebappexampleApplicationResources
  


  

  
  

  config


  

  /WEBINF/strutsconfigxml


  

  ……
  
  

  由此可見action對應的類是orgapachestrutsactionActionServlet這是一個Struts提供的處於中心控制地位的Servlet即圖中的Controller Servlet正是用它監聽所有的來自於用戶的以do為後綴的請求在上面的配置中為ActionServlet配置了一個名為config的初始化參數值為 /WEBINF/strutsconfigxmlstrutsconfigxml是一個基於Struts應用的最重要的配置文件其中包含了所有的Action請求(指以do結尾的請求)相應的Action處理類Form Bean以及頁面的轉向等信息的配置strutsconfigxml在應用啟動時讀入然後根據這些配置進行響應下面以示例程序中的LogonAction的配置為例對strutsconfigxml進行分析
  
  strutsconfigxml
  
  下面是strutsconfigxml中對LogonAction進行配置的部分代碼
     path=/logon
   type=orgapachestrutswebappexampleLogonAction
   name=logonForm
   scope=request
   input=/logonjsp>
  
  從上面可以看出MailReader應用中對/logondo的請求是由orgapachestrutswebappexample LogonAction類進行處理的name屬性指定的是這個請求對應的表單
  logonForm也是在strutsconfigxml中配置的配置代碼為:
  bean name=logonForm type=orgapachestrutswebapp exampleLogonForm/>
  LogonForm類是一個普通的JavaBean其中定義了幾個屬性及屬性的讀寫方法而且這些屬性的名字要和頁面表單中的輸入域對應比如LogonForm中定義了兩個屬性代碼如下
  
  private String username = null;
  private String password = null;
  這兩個屬性分別對應於logonjsp表單中的兩個輸入域代碼如下
  /logon focus=username>
  username />
  password redisplay=false/>
  

  注意LogonForm中的屬性名一定要和logonjsp中的表單域名完全對應起來Struts就是由此從浏覽器端抓取提交的數據並填充到LogonForm對象中再傳送給LogonAction類進行處理的Struts實現的表單驗證和重填技術也是這樣實現的注意在上面的頁面代碼中我們使用了Struts的HTML定制標簽庫也可以直接使用類似text name=username />的HTML代碼但這樣就失去了自動回填的支持
  
  Action
  
  現在我們已經對Struts前端應用框架的整體結構數據流轉有了一定的認識也知道了Struts是怎樣從配置文件中獲取配置信息的即先啟動然後等待請求再從前台抓取數據根據配置信息調用(或生成)Action類進行處理最後根據處理的結果轉向到對應的頁面響應用戶那麼現在就讓我們看看LogonAction是怎樣進行業務處理並將處理結果顯示給用戶的代碼如下
  
  package orgapachestrutswebappexample;
  import orgapachestrutsactionAction;
  
  public final class LogonAction extends Action {
   public ActionForward perform(ActionMapping mapping
   ActionForm form
   HttpServletRequest request
   HttpServletResponse response)
  throws IOException ServletException {
  
  ActionErrors errors = new ActionErrors();
  String username = ((LogonForm) form)getUsername();
  String password = ((LogonForm) form)getPassword();
  
  // 進行用戶驗證
  // 如果不存在此用戶或密碼錯誤則將錯誤添加到errors中

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28655.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.