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

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

基于MVC模式的Struts框架研究與應(yīng)用

2019-11-17 06:18:42
字體:
供稿:網(wǎng)友

摘要:Struts框架具有組件的模塊化,靈活性和重用性的優(yōu)點(diǎn),同時(shí)簡(jiǎn)化了基于MVC的web應(yīng)用程序的開發(fā)。本文討論了Struts框架實(shí)現(xiàn)MVC模式的原理與方法,給出了一個(gè)具體的應(yīng)用實(shí)例。

分布式企業(yè)應(yīng)用軟件結(jié)構(gòu)復(fù)雜、涉及多種技術(shù),對(duì)設(shè)計(jì)開發(fā)人員提出了很高的要求。在此情況下,運(yùn)用設(shè)計(jì)模式――可復(fù)用的設(shè)計(jì)方案進(jìn)行軟件的設(shè)計(jì)開發(fā)十分必要。MVC模式已被證實(shí)是一種成功的軟件設(shè)計(jì)模式,本文主要討論了一種實(shí)現(xiàn)MVC模式的應(yīng)用框架――Struts,并通過一個(gè)實(shí)例展示了Struts框架實(shí)現(xiàn)MVC模式的方法。

MVC設(shè)計(jì)模式

MVC(Modle-View-Controller,模型-視圖-控制器)模式是Xerox PARC在20世紀(jì)80年代為編程語(yǔ)言Smalltalk-80所設(shè)計(jì)的一種軟件設(shè)計(jì)模式,至今已被廣泛使用,并被推薦為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式,其為開發(fā)交互式應(yīng)用系統(tǒng)提供了一個(gè)優(yōu)秀的設(shè)計(jì)模式,受到越來越多開發(fā)者的歡迎。

MVC模式主要由3個(gè)部分組成:模型、視圖和控制器,其結(jié)構(gòu)如圖1所示。

基于MVC模式的Struts框架研究與應(yīng)用(圖一)

圖1 MVC模式框架

模型表示業(yè)務(wù)邏輯和業(yè)務(wù)規(guī)則等,在MVC的三個(gè)部件中擁有最多的處理任務(wù)。它可以用javaBean和EJB等組件技術(shù)來處理數(shù)據(jù)庫(kù)的訪問。模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。

視圖是屏幕上的顯示。模型進(jìn)行操作之后,其結(jié)果就是通過視圖來顯示的。在視圖中其實(shí)沒有真正的處理發(fā)生,只是作為一種輸出數(shù)據(jù)并答應(yīng)用戶操作的方式。

控制器用于治理用戶與視圖發(fā)生的交互。一旦用戶想對(duì)模型進(jìn)行處理時(shí),它不能直接去執(zhí)行模型,而是通過控制器來間接地實(shí)現(xiàn)??刂破髂軓囊晥D中取值,然后將相應(yīng)的值傳給模型進(jìn)行處理??刂破鹘邮苡脩舻妮斎氩⒄{(diào)用模型和視圖去完成用戶的需求。

由上述可知,MVC模式的處理過程是:首先由控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來處理用戶的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖返回?cái)?shù)據(jù),并通過表達(dá)層呈現(xiàn)給用戶。

MVC本身就是一個(gè)非常復(fù)雜的系統(tǒng),所以采用MVC實(shí)現(xiàn)Web應(yīng)用時(shí),最好選一個(gè)現(xiàn)成的MVC框架,在此之下進(jìn)行開發(fā),從而取得事半功倍的效果?,F(xiàn)在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對(duì)來講比較簡(jiǎn)單,所以用它開發(fā)MVC系統(tǒng)還是比較方便地。

Struts框架

Struts是Apache組織的一個(gè)開放源碼項(xiàng)目。Struts是一個(gè)比較好的MVC框架,提供了對(duì)開發(fā)MVC系統(tǒng)的底層支持,它采用的主要技術(shù)是Servlet,jsp和Custom tag library。其基本構(gòu)成如圖2所示。

基于MVC模式的Struts框架研究與應(yīng)用(圖二)

圖2 Struts框架圖

由圖2可以看出,在Struts框架中Controller功能由ActionServlet和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類型的對(duì)象ActionServlet,它用來接受客戶端的請(qǐng)求。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Model部分中Action處理器對(duì)象之間的映射。

Model部分由Action和ActionForm對(duì)象構(gòu)成。所有的Action處理器對(duì)象都是開發(fā)者從Struts的Action類派生的子類。Action處理器對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的View組件以產(chǎn)生響應(yīng)。Struts提供的ActionForm組件對(duì)象可以通過定義屬性描述客戶端表單數(shù)據(jù)。開發(fā)者可以從它派生子類對(duì)象,利用它和Struts提供的自定義標(biāo)記庫(kù)結(jié)合可以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持,Action處理器對(duì)象可以直接對(duì)它進(jìn)行讀寫,而不再需要和request、response對(duì)象進(jìn)行數(shù)據(jù)交互。通過ActionForm組件對(duì)象實(shí)現(xiàn)了對(duì)View和Model之間交互的支持。

View部分是通過JSP技術(shù)實(shí)現(xiàn)的。Struts提供了自定義的標(biāo)記庫(kù),通過這些自定義標(biāo)記可以非常好地和系統(tǒng)的Model部分交互,通過使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和Model部分中的ActionForm的映射,完成對(duì)用戶數(shù)據(jù)的封裝。

基于MVC模式的Struts框架的應(yīng)用

下面通過一個(gè)具體實(shí)例說明如何應(yīng)用Struts框架構(gòu)建應(yīng)用程序。該實(shí)例是一個(gè)全面預(yù)算治理系統(tǒng)中的預(yù)算資料模塊,包括資料錄入、資料查詢、資料修改和資料刪除四個(gè)功能,用于完成預(yù)算資料的錄入、查詢、修改及刪除。

具體在使用Struts框架時(shí),對(duì)應(yīng)各個(gè)部分的開發(fā)工作主要包括:

1、構(gòu)建視圖

在Struts框架中,視圖的實(shí)現(xiàn)主要采用JSP技術(shù),但與傳統(tǒng)的JSP相比有兩個(gè)顯著的不同。

首先,在Struts下使用JSP開發(fā)視圖,在頁(yè)面中沒有包含任何的腳本程序,只是單純的完成數(shù)據(jù)傳送以及接收和顯示返回的數(shù)據(jù)。對(duì)數(shù)據(jù)的處理以及頁(yè)面的跳轉(zhuǎn)都在業(yè)務(wù)層中來實(shí)現(xiàn)。這樣做實(shí)現(xiàn)了業(yè)務(wù)邏輯和表示邏輯的完全分離,提高了一個(gè)應(yīng)用程序的性能和可擴(kuò)展性,并有利于程序的復(fù)用。

第二,Struts框架提供了一組可擴(kuò)展的自定義標(biāo)記庫(kù),主要包括: Bean標(biāo)記、 Logic標(biāo)記、Html標(biāo)記和模板標(biāo)記。通過使用標(biāo)記,可以簡(jiǎn)化創(chuàng)建用戶界面的過程,并且更好地實(shí)現(xiàn)數(shù)據(jù)的封裝。通過使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和業(yè)務(wù)層中的ActionForm的映射,非常好地和系統(tǒng)的業(yè)務(wù)邏輯部分交互。

下面給出資料錄入頁(yè)面的部分實(shí)現(xiàn)代碼:

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html>
<head>
<title>

前期預(yù)備資料錄入

</title>
<link rel="stylesheet" type="text/
CSS" href="../images/mobile.css">
</head>
<body bgcolor="#ffffff">
<html:form action="/information/budgetinfoadd" enctype="mult<table width="95%" border="1" cellspacing="1" cellpadding="2" bordercolor="#CBE7F8" align="center">
<tr bgcolor="#F2F9FD">
<td width="20%">類型:</td>
<td>
<html:select property="infoType" styleClass="input2">
<html:options collection="TypeList" property="id" labelProperty="typeName"/>
</html:select>
</td>
</tr>
……
</table>
</html:form>
</body>
</html>

程序中首先引入了HTML、Bean和Logic標(biāo)記庫(kù),然后用action指出調(diào)用的Action組件的絕對(duì)路徑,標(biāo)記<html:form>和</html:form>封裝了表單數(shù)據(jù),在業(yè)務(wù)層中用相應(yīng)的ActionForm組件可以將輸入的數(shù)據(jù)全部得到。

可以看出在視圖中沒有進(jìn)行任何的業(yè)務(wù)邏輯的處理,其主要作用是給出客戶端顯示的信息和處理結(jié)果,以及請(qǐng)求的轉(zhuǎn)發(fā),它是和用戶交互的接口。

2、構(gòu)建模型

模型采用JavaBean和EJB組件,設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。根據(jù)不同的請(qǐng)求從Action派生具體Action處理對(duì)象,完成“做什么”的任務(wù)來調(diào)用由Bean構(gòu)成的業(yè)務(wù)組件,創(chuàng)建由ActionForm 的派生類實(shí)現(xiàn)對(duì)客戶端表單數(shù)據(jù)的封裝。

下面以BudgetInfoAddForm這個(gè)ActionForm Bean進(jìn)行說明:

……

public final class BudgetInfoAddForm extends ActionForm {
private String infoType;
private String title;
private String content;
private FormFile infoFile;

這里表示BudgetInfoAddForm繼續(xù)于ActionForm,在這個(gè)Bean中定義了視圖中所要顯示數(shù)據(jù)信息的參數(shù),包括infoType,資料分類;title,資料標(biāo)題;content,資料內(nèi)容;infoFile, 資料文件。同時(shí)在BudgetInfoAddForm中提供了設(shè)定和訪問這些參數(shù)的方法:

public String getInfoType()
public void setInfoType(String infoType)
public String getTitle()
public void setTitle(String title)
public String getContent()
public void setContent(String content)
public FormFile getInfoFile()
public void setInfoFile(FormFile infoFile)
public void reset(ActionMapping mapping, HttpServletRequest request) {
title = null;
content = null;
infoFile = null;
}

3、構(gòu)建控制器

在Struts應(yīng)用框架中,中心控制器(ActionServlet)是由Struts框架本身所提供,開發(fā)人員一般無須對(duì)該ActionServlet進(jìn)行再次開發(fā);負(fù)責(zé)具體業(yè)務(wù)處理的Action類則是開發(fā)者開發(fā)實(shí)現(xiàn)的重點(diǎn),在這些Action對(duì)象中會(huì)進(jìn)行所有的業(yè)務(wù)操作,處理完畢,由Struts的ActionServlet轉(zhuǎn)向到j(luò)sp頁(yè)面,將處理結(jié)果返回給客戶端。

在預(yù)算資料模塊中,實(shí)現(xiàn)了四個(gè)Action:BudgetInfoAddAction,用于資料錄入; BudgetInfoContentAction,用于資料查詢; BudgetInfoUpdateAction,用于資料修改;BudgetInfoDelAction,用于資料刪除。

4、建立配置文件

Struts框架中有兩個(gè)配置文件web.xml和struts-config.xml,用于配置Struts系統(tǒng)中的各個(gè)模塊之間的交互。通過對(duì)這兩個(gè)配置文件的配置,把Struts框架中MVC的各個(gè)部分聯(lián)系起來,實(shí)現(xiàn)了一個(gè)真正的MVC系統(tǒng)。

結(jié)束語(yǔ)

Struts是一種基于MVC設(shè)計(jì)模式的企業(yè)級(jí)Web應(yīng)用開發(fā)框架,它的設(shè)計(jì)目的是從整體上減輕構(gòu)造企業(yè)Web應(yīng)用的負(fù)擔(dān)。其自帶的標(biāo)記庫(kù),能大大提高開發(fā)效率,同時(shí)提高了系統(tǒng)的可維護(hù)性和可擴(kuò)充性。本文在總結(jié)Struts框架技術(shù)及其工作原理的基礎(chǔ)上給出了一個(gè)應(yīng)用實(shí)例,為今后更好的應(yīng)用Struts框架開發(fā)Web應(yīng)用程序提供了參考。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永丰县| 徐闻县| 松桃| 曲沃县| 额敏县| 泸溪县| 七台河市| 宝兴县| 鲁山县| 铜山县| 安徽省| 禹城市| 武平县| 汪清县| 绥棱县| 明水县| 修文县| 平谷区| 隆昌县| 东丰县| 乐都县| 邵武市| 岐山县| 平遥县| 兰溪市| 保德县| 无极县| 永宁县| 福泉市| 乐东| 克什克腾旗| 慈利县| 连州市| 平阴县| 宁陕县| 改则县| 蛟河市| 乐都县| 西吉县| 增城市| 扎兰屯市|