• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Struts2模型驅(qū)動開發(fā)方法研究

      2018-12-29 10:01王先國何忠禮王玉娟

      王先國 何忠禮 王玉娟

      摘要:本文詳細展示了基于Struts2的體系結(jié)構(gòu)、模型驅(qū)動工作原理、程序交互流程,同時,用一個完整的實例再現(xiàn)了程序開發(fā)的每個環(huán)節(jié)、步驟與規(guī)范,為開發(fā)人員提供了一個基于Struts2的模型驅(qū)動開發(fā)示范。

      關(guān)鍵詞:Struts2;模型驅(qū)動;攔截器;Action

      引言

      目前,基于Struts2的模型驅(qū)動開發(fā)方法十分流行,但很多開發(fā)人員對其開發(fā)規(guī)范、工作原理、核心攔截器的組成和攔截機制知之甚少,這就導(dǎo)致開發(fā)效率低,且開發(fā)出的軟件質(zhì)量差?;诖?,本文詳細描述了Struts2的模型驅(qū)動工作原理,通過實例演示了基于Struts2的模型驅(qū)動的開發(fā)步驟,為開發(fā)人員提供一個模型驅(qū)動的開發(fā)示范。

      一、 Struts2工作原理

      1.Struts2體系結(jié)構(gòu)

      Struts2是一個標(biāo)準(zhǔn)的MVC框架,它簡化了Web程序的開發(fā)過程,并且降低了程序的耦合度。Struts2體系結(jié)構(gòu)如圖1所示。

      StrutsPrepareAndExcuteFilter(Struts2核心控制器):它是Struts2的調(diào)度中心,由它決定是否處理客戶的Action請求。

      Interceptor(攔截器):攔截器是Stuts2 的基石,它是一些無狀態(tài)的類,攔截器可以自動攔截客戶發(fā)送的Action請求??蛻舻乃蠥ction請求,在到達Action之前,首先要執(zhí)行一序列攔截器,在圖1中,客戶的Action請求到達Action以前,先要執(zhí)行攔截器1、攔截器2、攔截器3。

      Action(控制器):在圖1中,客戶的請求經(jīng)過攔截器1、攔截器2、攔截器3后,才到達Action控制器。Action是程序員編寫的控制器,用來處理客戶的Action請求。

      Resul(結(jié)果)t:Action控制器執(zhí)行完后,返回一個字符串,這個字符串就是邏輯視圖。Result根據(jù)邏輯視圖的值,去調(diào)用相應(yīng)的物理視圖。Struts2中支持多種視圖類型,比如Java Server Pages(JSP)、FreeMarker等[1]。

      2.Struts2執(zhí)行流程

      Struts2的模型驅(qū)動工作流程如圖2所示。

      客戶端向Struts2控制器發(fā)送一個Action請求,比如,表單提交;Struts2控制器調(diào)用屬性攔截器(params),屬性攔截器獲取表單請求參數(shù),并將表單參數(shù)封裝為Model(一個普通的Bean);當(dāng)執(zhí)行流程到達Action時,Struts2控制器調(diào)用模型攔截器(ModelDriven),模型攔截器獲取模型對象,并將模型對象壓入值棧的棧頂;Struts2控制器根據(jù)Action執(zhí)行后返回的結(jié)果值(邏輯視圖),調(diào)用相應(yīng)的JSP頁面;JSP頁面將結(jié)果返回(response)給客戶[2]。

      二、模型驅(qū)動開發(fā)示范

      1.定義模型

      這里的模型就是一個普通的Bean(People對象),在模型中必須定義setter和getter方法。下面是People類的源代碼:

      package wang;

      public class People{

      String name;//本類中的屬性名必須與表單中的屬性name的值一致

      int age; //本類中的屬性名必須與表單中的屬性name的值一致

      public String getName() {

      return name;

      }

      public void setName(String name) {

      this.name = name;

      }

      public int getAge() {

      return age;

      }

      public void setAge(int age) {

      this.age = age;

      }

      }

      2.定義Action

      使用模型驅(qū)動時,繼承ActionSupport類或者實現(xiàn)接口Action時,必須實現(xiàn)模型驅(qū)動接口ModelDriven。在控制器中,必須重寫execute()方法和getModel()方法[3]。下面是PeopleAction的源代碼。

      package wang.action;

      import wang.People;

      import com.opensymphony.xwork2.ActionSupport;

      import com.opensymphony.xwork2.ModelDriven;

      public class PeopleAction extends ActionSupport implements ModelDriven {

      People people = new People();//必須初始化

      public String execute() throws Exception {

      return SUCCESS; //此方法必須重寫

      }

      public Object getModel() { //此方法必須重寫

      return people;

      }

      }

      3.建立請求Action的表單

      建立一個向Action提交請求的表單頁面,下面是請求頁面(addPeople.jsp)的源代碼。

      <%@ taglib prefix="s" uri="/struts-tags" %>

      交城县| 遂昌县| 南乐县| 精河县| 会宁县| 鄢陵县| 长宁区| 额敏县| 东山县| 南安市| 聂荣县| 油尖旺区| 古丈县| 盖州市| 札达县| 白城市| 库尔勒市| 利川市| 武定县| 永清县| 哈巴河县| 西城区| 彭山县| 高州市| 祁门县| 固阳县| 通江县| 沭阳县| 保德县| 修文县| 巨鹿县| 辽阳市| 吉木萨尔县| 连江县| 乡宁县| 花垣县| 怀远县| 中阳县| 边坝县| 天柱县| 固安县|