国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

用Struts框架開(kāi)發(fā)Java應(yīng)用

2019-11-18 15:56:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  Struts開(kāi)始于2000年3月,是采用java Servlet/JavaServer Pages技術(shù),開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的框架。當(dāng)前最新的正式版本是1.0.2,本文內(nèi)容就是針對(duì)這個(gè)版本的。采用Struts能開(kāi)發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的Java Web前端應(yīng)用。通常MVC設(shè)計(jì)模式把一個(gè)系統(tǒng)劃分為相互協(xié)作的三個(gè)部分:
  1. Model(模型),模型用于封裝系統(tǒng)的狀態(tài),比如業(yè)務(wù)數(shù)據(jù);
  2. View(視圖),視圖是模型的表示,提供用戶(hù)交互界面。當(dāng)模型狀態(tài)發(fā)生變化時(shí),視圖應(yīng)該得到通知,以便更新模型的變化;
  3. Controller(控制器),接受來(lái)自視圖的請(qǐng)求,修改模型的狀態(tài);
  但是,在基于jsp/Servlet的Web應(yīng)用中要使用MVC模式,需要解決這樣一個(gè)問(wèn)題,就是HTTP的底層是TCP/ip協(xié)議,而TCP/IP是一種無(wú)狀態(tài)連接的協(xié)議,假如我們的模型發(fā)生了變化,就無(wú)從通知視圖。而Struts采用了在“JSP規(guī)范v0.92”中就提出的MVC Model 2,這是對(duì)MVC在Web上應(yīng)用的修訂版,它可以解決這個(gè)問(wèn)題,見(jiàn)圖1。
   用Struts框架開(kāi)發(fā)Java應(yīng)用(圖一)
  圖1 MVC Model2(FromMalcolm Davis)
   用Struts框架開(kāi)發(fā)Java應(yīng)用(圖二)
  圖2 Sturts工作機(jī)理(From Malcolm Davis)
  Struts應(yīng)用有3個(gè)主要部件:一個(gè)是使用Servlet實(shí)現(xiàn)的中心控制器(Controller Servlet,由Struts提供的org.apache.action. ActionServlet類(lèi)實(shí)現(xiàn))及負(fù)責(zé)具體業(yè)務(wù)邏輯處理的Action(org.apache.action.Action的子類(lèi));一個(gè)是用于顯示的JSP頁(yè)面(viewer);另一個(gè)是用于封裝系統(tǒng)狀態(tài)的業(yè)務(wù)邏輯元件(Model)。Struts 的中心控制器接受所有來(lái)自客戶(hù)端的請(qǐng)求,并根據(jù)系統(tǒng)的配置(struts-config.xml)路由HTTP請(qǐng)求到其它Action對(duì)象(開(kāi)發(fā)者實(shí)現(xiàn)的org.apache.struts. action.Action的子類(lèi))。在這些Action對(duì)象中會(huì)完成所有的業(yè)務(wù)操作,比如插入一條訂單、修改一條記錄等。處理完畢,由Struts的Controller Servlet根據(jù)配置轉(zhuǎn)向到適當(dāng)?shù)腏SP頁(yè)面,將處理結(jié)果顯示給用戶(hù)。從這里可以看出,在Struts中Controller Servlet擔(dān)任了重要的角色,它控制所有的程序流轉(zhuǎn),使MVC三個(gè)相對(duì)獨(dú)立的部分協(xié)調(diào)工作,從而使系統(tǒng)的功能更加完善。從圖1可見(jiàn)Struts是MVC Model 2的一個(gè)典型應(yīng)用。
  安裝
  你可以從http://jakarta.apache.org/builds/jakarta-struts/release/下載Struts最新的二進(jìn)制版本和源碼。首先進(jìn)入v1.0.2下載頁(yè)面,下載jakarta-struts-1.0.2.zip(3.4MB),然后將jakarta-struts-1.0.2.zip解壓。其中包含lib和webapps兩個(gè)子目錄。lib子目錄中是使用Struts需要的Jar文件、標(biāo)簽庫(kù)定義文件(.tld),以及對(duì)一個(gè)Struts Web應(yīng)用的web.xml和struts-config.xml配置文件的DTD定義(.dtd)。webapps子目錄中包含了幾個(gè)Struts的示例應(yīng)用,都已打包為.war格式,這里主要介紹其中三個(gè):
  
  1. struts-example.war,一個(gè)采用Struts框架的簡(jiǎn)單的示例程序Controller;
  
  2. struts-documentation.war,Struts文檔的war包;
  
  3. struts-blank.war,一個(gè)空白的Struts的應(yīng)用,可以方便地修改,并且配置自己的應(yīng)用。
  
  下面運(yùn)行struts-example這個(gè)示例程序。因?yàn)镾truts是一個(gè)Web應(yīng)用,所以要運(yùn)行這個(gè)示例需要一個(gè)兼容Servlet 2.2、JSP 1.1以上規(guī)范的Web容器。本文以Tomcat 3.3a(對(duì)Tomcat 4.0也適用)為例進(jìn)行介紹。首先保證Tomcat可以正常運(yùn)行。而運(yùn)行struts example不需要其它非凡配置的,只要把struts-example.war拷入Tomcat下的webapps目錄,Tomcat在啟動(dòng)時(shí)就會(huì)自動(dòng)解壓了。然后啟動(dòng)Tomcat,在瀏覽器中輸入http://localhost:8080/struts-example,假如能看到如圖3頁(yè)面,就說(shuō)明已經(jīng)運(yùn)行成功。
  
  在圖3中你可以點(diǎn)擊“Register with the MailReader Demonstration application”注冊(cè)一個(gè)MailReader用戶(hù),或直接點(diǎn)擊“Log on to the MailReader Demonstration Application”,輸入用戶(hù)名和密碼(示例程序已經(jīng)預(yù)置了一個(gè)用戶(hù)user/pass,配置在struts-example下的WEB-INF/database.xml文件中)登入。
  分析
  web.xml
  在圖3所示的頁(yè)面中,點(diǎn)擊“Log on to the MailReader Demonstration Application”鏈接,進(jìn)入/logon.jsp頁(yè)面,輸入預(yù)定義的用戶(hù)名為user、密碼為pass,然后提交就進(jìn)入了圖4的用戶(hù)主頁(yè)面。
   用Struts框架開(kāi)發(fā)Java應(yīng)用(圖三)
  圖3 struts example主頁(yè)面
   用Struts框架開(kāi)發(fā)Java應(yīng)用(圖四)
  圖4 用戶(hù)主頁(yè)面
  大家可能已經(jīng)注重到了,這里的URL的后綴是.do。那么它有什么意義?服務(wù)器又是怎樣處理這樣的請(qǐng)求呢?下面我們看看{TOMCAT}/WEB-INF/web.xml文件,就會(huì)非常清楚。在web.xml中,你可以找到如下配置片斷:
  
  
  
  action
  *.do
  

  從上面配置代碼中可以知道,以.do結(jié)尾的請(qǐng)求URL是由一個(gè)名為action的Servlet處理,實(shí)際上可以為應(yīng)用取另一個(gè)后綴,只要修改就行了。但下面所有的討論都以.do為例。我們?cè)倏匆幌逻@個(gè)Servlet的配置:
  
  
  
  action
  org.apache.struts.action.ActionServlet
  
  application
  
  org.apache.struts.webapp.example.ApplicationResources
  

  

  
  config
  /WEB-INF/struts-config.xml
  

  ……
  2
  

  由此可見(jiàn),action對(duì)應(yīng)的類(lèi)是org.apache.struts.action.ActionServlet。這是一個(gè)Struts提供的處于中心控制地位的Servlet,即圖2中的Controller Servlet,正是用它監(jiān)聽(tīng)所有的來(lái)自于用戶(hù)的以.do為后綴的請(qǐng)求。在上面的配置中,為ActionServlet配置了一個(gè)名為config的初始化參數(shù),值為 /WEB-INF/struts-config.xml,struts-config.xml是一個(gè)基于Struts應(yīng)用的最重要的配置文件,其中包含了所有的Action請(qǐng)求(指以.do結(jié)尾的請(qǐng)求)、相應(yīng)的Action處理類(lèi)、Form Bean,以及頁(yè)面的轉(zhuǎn)向等信息的配置。struts-config.xml在應(yīng)用啟動(dòng)時(shí)讀入,然后根據(jù)這些配置進(jìn)行響應(yīng)。下面以示例程序中的LogonAction的配置為例,對(duì)struts-config.xml進(jìn)行分析。
  
  struts-config.xml
  
  下面是struts-config.xml中對(duì)LogonAction進(jìn)行配置的部分代碼:
     path="/logon"
   type="org.apache.struts.webapp.example.LogonAction"
   name="logonForm"
   scope="request"
   input="/logon.jsp">
  
  從上面可以看出,MailReader應(yīng)用中對(duì)/logon.do的請(qǐng)求是由org.apache.struts.webapp.example. LogonAction類(lèi)進(jìn)行處理的,name屬性指定的是這個(gè)請(qǐng)求對(duì)應(yīng)的表單。
  logonForm也是在struts-config.xml中配置的,配置代碼為:
  .
  LogonForm類(lèi)是一個(gè)普通的JavaBean,其中定義了幾個(gè)屬性及屬性的讀寫(xiě)方法,而且這些屬性的名字要和頁(yè)面表單中的輸入域?qū)?yīng)。比如LogonForm中定義了兩個(gè)屬性,代碼如下:
  
  PRivate String username = null;
  private String passWord = null;
  這兩個(gè)屬性分別對(duì)應(yīng)于logon.jsp表單中的兩個(gè)輸入域,代碼如下:
  
  
  
  

  注重,LogonForm中的屬性名一定要和logon.jsp中的表單域名完全對(duì)應(yīng)起來(lái)。Struts就是由此從瀏覽器端抓取提交的數(shù)據(jù),并填充到LogonForm對(duì)象中,再傳送給LogonAction類(lèi)進(jìn)行處理的。Struts實(shí)現(xiàn)的表單驗(yàn)證和重填技術(shù)也是這樣實(shí)現(xiàn)的。注重,在上面的頁(yè)面代碼中我們使用了Struts的HTML定制標(biāo)簽庫(kù),也可以直接使用類(lèi)似的HTML代碼,但這樣就失去了自動(dòng)回填的支持。
  
  Action
  
  現(xiàn)在我們已經(jīng)對(duì)Struts前端應(yīng)用框架的整體結(jié)構(gòu)、數(shù)據(jù)流轉(zhuǎn)有了一定的熟悉。也知道了Struts是怎樣從配置文件中獲取配置信息的,即先啟動(dòng),然后等待請(qǐng)求,再?gòu)那芭_(tái)抓取數(shù)據(jù),根據(jù)配置信息調(diào)用(或生成)Action類(lèi)進(jìn)行處理,最后根據(jù)處理的結(jié)果轉(zhuǎn)向到對(duì)應(yīng)的頁(yè)面響應(yīng)用戶(hù)。那么,現(xiàn)在就讓我們看看LogonAction是怎樣進(jìn)行業(yè)務(wù)處理,并將處理結(jié)果顯示給用戶(hù)的。代碼如下:
  
  package org.apache.struts.webapp.example;
  import org.apache.struts.action.Action;
  ......
  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();
  ......
  // 進(jìn)行用戶(hù)驗(yàn)證
  // 假如不存在此用戶(hù),或密碼錯(cuò)誤,則將錯(cuò)誤添加到errors中

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汽车| 西乡县| 广西| 崇左市| 商水县| 哈巴河县| 吉木萨尔县| 安多县| 淮滨县| 彭泽县| 雅安市| 从江县| 彩票| 平陆县| 闸北区| 孟州市| 万盛区| 即墨市| 长汀县| 高淳县| 玉树县| 察隅县| 阜城县| 蒲城县| 嘉禾县| 清河县| 易门县| 泰州市| 大港区| 崇文区| 香港 | 邻水| 察雅县| 拜城县| 中西区| 木兰县| 上饶县| 延寿县| 乃东县| 石狮市| 元氏县|