999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

王先國 何忠禮 王玉娟

摘要:本文詳細(xì)展示了基于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ī)范、工作原理、核心攔截器的組成和攔截機(jī)制知之甚少,這就導(dǎo)致開發(fā)效率低,且開發(fā)出的軟件質(zhì)量差。基于此,本文詳細(xì)描述了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請求。客戶的所有Action請求,在到達(dá)Action之前,首先要執(zhí)行一序列攔截器,在圖1中,客戶的Action請求到達(dá)Action以前,先要執(zhí)行攔截器1、攔截器2、攔截器3。

Action(控制器):在圖1中,客戶的請求經(jīng)過攔截器1、攔截器2、攔截器3后,才到達(dá)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í)行流程到達(dá)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" %>

主站蜘蛛池模板: 亚洲国产天堂久久综合| 国产午夜精品鲁丝片| 亚洲综合网在线观看| 综合人妻久久一区二区精品| 91成人免费观看| 欧美啪啪网| 国产成人夜色91| 久久美女精品国产精品亚洲| 国内精品久久久久鸭| 欧美精品一二三区| 一级不卡毛片| 67194成是人免费无码| 天天躁日日躁狠狠躁中文字幕| 国产一区二区免费播放| 91精品国产一区自在线拍| 91视频99| 国产精品冒白浆免费视频| 色综合手机在线| 日韩欧美国产成人| 91福利免费| 亚洲第一黄片大全| 国产亚洲精久久久久久久91| 国产成人综合久久精品尤物| 精品国产欧美精品v| 波多野结衣久久精品| 欧美日韩国产综合视频在线观看| 久久黄色一级片| 麻豆精品视频在线原创| 青青久视频| 无码一区二区波多野结衣播放搜索| 99热这里只有精品免费| 国产农村精品一级毛片视频| 99伊人精品| 中文字幕啪啪| 重口调教一区二区视频| 99久久99这里只有免费的精品| 日韩性网站| 日韩精品久久无码中文字幕色欲| 国产第一色| 色综合久久88| 午夜福利在线观看成人| 亚洲综合18p| 手机精品福利在线观看| 亚洲午夜福利精品无码| 婷婷六月综合网| 在线视频一区二区三区不卡| 久久青草视频| 国产无人区一区二区三区| 伊人久久大香线蕉影院| 国产浮力第一页永久地址 | 丝袜国产一区| 欧美成人h精品网站| 波多野结衣无码视频在线观看| 国产成人精品一区二区秒拍1o| 亚洲日韩国产精品综合在线观看| 欧美激情综合| 老司机精品99在线播放| 亚洲av日韩av制服丝袜| 国产00高中生在线播放| 亚洲AV无码精品无码久久蜜桃| 国产在线啪| 日韩欧美中文| 最新亚洲av女人的天堂| 亚洲一区无码在线| 日韩无码精品人妻| 色国产视频| 人与鲁专区| 最新国产午夜精品视频成人| 国产成人1024精品| 国产91精选在线观看| 黄色网页在线播放| 亚洲日韩久久综合中文字幕| 99久久性生片| 综1合AV在线播放| 精品欧美视频| 久久婷婷五月综合色一区二区| 高潮毛片无遮挡高清视频播放| 成年人午夜免费视频| 高清久久精品亚洲日韩Av| 五月天综合婷婷| 久久精品亚洲中文字幕乱码| 日本亚洲最大的色成网站www|