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

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

Struts框架及其在Web開發(fā)中的應(yīng)用

2019-11-17 04:37:43
字體:
供稿:網(wǎng)友
引言 傳統(tǒng)的Web應(yīng)用開發(fā)工具(aspjsp)將頁面顯示、商業(yè)邏輯和數(shù)據(jù)處理大部分都集中在頁面代碼中,Web應(yīng)用擴(kuò)展維護(hù)比較困難,也不利于開發(fā)人員分工協(xié)作,在大型WEB應(yīng)用開發(fā)中愈發(fā)顯得力不從心。 MVC(Model-View-Controller)設(shè)計(jì)模式將頁面顯示、商業(yè)邏輯和數(shù)據(jù)處理相分離,最大限度的降低系統(tǒng)各部分之間的耦合性,從而增強(qiáng)系統(tǒng)的可擴(kuò)展維護(hù)性,提高代碼重用率,使系統(tǒng)的層次結(jié)構(gòu)更加清楚,易于分工協(xié)作。而Struts是一個(gè)為開發(fā)基于MVC模式的應(yīng)用架構(gòu)的開源框架。 1、Struts框架的體系結(jié)構(gòu)1.1、MVC設(shè)計(jì)模式MVC設(shè)計(jì)模式是一種“分治”的思想,它使應(yīng)用程序的輸入、處理和輸出分開,把應(yīng)用程序分成三個(gè)核心模塊:模型(Model)、視圖(View)和控制器(Controller)。Model用來儲(chǔ)存應(yīng)用程序的數(shù)據(jù)以及訪問、維護(hù)這些數(shù)據(jù)的業(yè)務(wù)邏輯,View建立終端用戶的表示層,Controller是模型與視圖的接口,其作用是獲取并處理HTTP請(qǐng)求,并調(diào)用相關(guān)的業(yè)務(wù)模型中的方法對(duì)請(qǐng)求進(jìn)行處理,然后將對(duì)象模型層次處理后的結(jié)果返回到View。可見MVC設(shè)計(jì)模式的主要優(yōu)點(diǎn)是實(shí)現(xiàn)了業(yè)務(wù)邏輯和顯示邏輯的分離,提高了系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的復(fù)用性。1.2、Struts框架Struts是基于MVC的Web應(yīng)用框架,由一組相互協(xié)作的類、Serlvet以及JSP TagLib組成。在Struts框架中,模型由實(shí)現(xiàn)業(yè)務(wù)邏輯的javaBean或EJB組件構(gòu)成,控制器由ActionServlet和Action來實(shí)現(xiàn),視圖由一組JSP文件構(gòu)成。Struts框架的體系結(jié)構(gòu)如圖1所示。下面分別從模型、視圖、控制來看看struts的體系結(jié)構(gòu)。視圖:主要是通過JSP技術(shù)生成頁面完成視圖,利用Struts提供的自定義標(biāo)記庫編寫用戶界面把應(yīng)用邏輯和顯示邏輯分離。Struts框架通過這些自定義標(biāo)記建立了View和Model之間的聯(lián)系,可以實(shí)現(xiàn)和Model部分中的ActionForm的映像,完成對(duì)用戶數(shù)據(jù)的封裝。Struts框架及其在Web開發(fā)中的應(yīng)用 圖1:Struts體系結(jié)構(gòu) 控制器:作用是從客戶端接受請(qǐng)求,并選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把響應(yīng)結(jié)果送回到客戶端。在Struts中,控制器由ActionServlet和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類型的對(duì)象ActionServlet,它用來接受客戶端的請(qǐng)求并分發(fā)到相應(yīng)的動(dòng)作類(Action類的子類)。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Model部分中Action對(duì)象之間的映射。模型:在Struts中,Model可以分為系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的行為(業(yè)務(wù)邏輯)兩部分。系統(tǒng)的內(nèi)部狀態(tài)常由一組JavaBean表示,業(yè)務(wù)邏輯由Action和ActionForm的類對(duì)象處理。Action對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交給合適的View以產(chǎn)生響應(yīng)業(yè)務(wù)對(duì)象更新應(yīng)用程序的狀態(tài)。ActionForm可以派生子類對(duì)象,通過結(jié)合自定義標(biāo)記庫以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持。Action對(duì)象可以直接對(duì)ActionForm進(jìn)行讀寫,而不再需要和request,response對(duì)象進(jìn)行數(shù)據(jù)交互。通過ActionForm對(duì)象實(shí)現(xiàn)了對(duì)View和Model之間交互的支持。Struts-config.xml:用于建立Controller和Model之間的關(guān)系,將各部分緊密聯(lián)系在一起。它描述了Controller所使用的把請(qǐng)求對(duì)應(yīng)到具體處理的法則,同時(shí)它還描述了客戶提供的數(shù)據(jù)與ActionForm組件的對(duì)應(yīng)映射關(guān)系。1.3、Sturts的工作流程對(duì)于采用Struts框架的Web應(yīng)用,在Web應(yīng)用啟動(dòng)時(shí)就會(huì)加載并初始化ActionServlet,從struts-config.xml文件中讀取配置信息,把他們存放到各種配置對(duì)象中。其具體工作流程如下:⑴客戶端(Client)通過本地瀏覽器(Browser)向服務(wù)器發(fā)出一個(gè)請(qǐng)求(HTTP Request)。

⑵控制器(Controller)接收請(qǐng)求,即ActionServlet實(shí)現(xiàn)控制工作。它在struts-config.xml文件中尋找請(qǐng)求的URL,找到對(duì)應(yīng)的Action。

⑶Action類執(zhí)行建立在模型組件基礎(chǔ)上的業(yè)務(wù)邏輯,模型組件是和應(yīng)用程序關(guān)聯(lián)的。

⑷一旦Action類處理完業(yè)務(wù)邏輯,它把控制權(quán)返回給ActionServlet,Action類提供一個(gè)鍵值作為返回的一部分,它指明了處理的結(jié)果AcLionServlet使用這個(gè)鍵值來決定在什么視圖中顯示Action的類處理結(jié)果。

⑸當(dāng)ActionServlet把Action類的處理結(jié)果傳送到指定的視圖中,請(qǐng)求的過程也就完成了。2、Web開發(fā)中的應(yīng)用以一個(gè)Web考試系統(tǒng)中的考生注冊(cè)子系統(tǒng)為例,說明Struts在Web程序開發(fā)中的應(yīng)用。考生在注冊(cè)頁面上輸入考生名、密碼等相關(guān)信息,若注冊(cè)成功,控制將轉(zhuǎn)向一個(gè)顯示注冊(cè)成功的頁面,否則控制將轉(zhuǎn)向一個(gè)顯示失敗的頁面。⑴項(xiàng)目建立struts可運(yùn)行在多種Web服務(wù)器上,這里使用同樣出自Jakarta項(xiàng)目的Web服務(wù)器Tomcat。首先展開struts的壓縮文件到Tomcat的主目錄webapps下,接著在目錄webapps下新建目錄testWeb,將webapps/Struts-example下的WEB-INF目錄拷貝到test目錄下,然后將test/WEB-INF下的src和classes目錄以及struts-coufig.xml文件中內(nèi)容清空。開發(fā)時(shí),將JSP文件放在testWeb目錄下,Java源文件放在testWeb/WEB-INF/src下,編譯后的類文件放在testWeb/WEB-INF/classes下。⑵實(shí)現(xiàn)視圖功能的用戶界面的設(shè)計(jì)    JSP具有定制標(biāo)記和包含Web組件的能力,可以實(shí)現(xiàn)定制的組件、容器和布局治理器,從而實(shí)現(xiàn)可擴(kuò)展的、可重用的和可維護(hù)的Web應(yīng)用界面。Struts中,JSP頁面中利用Struts框架提供的taglib標(biāo)記庫的標(biāo)記(如Struts bean,Html,logic,template標(biāo)記),能夠大大提高開發(fā)效率。在該系統(tǒng)中,其注冊(cè)頁面reguserinfo.jsp概要如下:<%@page contentType=”text/html;charset=UTF-8” language=”java”%>


<%@ taglib uri="/WEB-INF/struts-bean.tld"
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix

="html"%> //引用Struts html標(biāo)記

<html:html locale="true">

<head><title>RegisterUser</title></ head>

<body bgcolor="#FFFF"><html:errors/>

<html:form action="reguser.do" focus="userID" >

<table border="0" width="100%">

<tr> <th align="right" >UserName:</th>

<td align="left"><html: text property="userID"

size="20" maxlength="20"/> </td></tr>

<tr> <th align="right" >Pass
Word:</th>

<td align="left"><html: password maxlength="20" size="20" property="password" /></td></tr>

<tr> ……</tr>

<tr> <td align="right" > <html: submit property=

"submit" value="submit" /></td>

<td algin="left"><html: reset /> </td></tr>

</table></html:form></body></html:html>
⑶實(shí)現(xiàn)模型功能的組件設(shè)計(jì) 構(gòu)建模型部分的組件是工作重點(diǎn),它包含了整個(gè)應(yīng)用程序的業(yè)務(wù)邏輯。此系統(tǒng)設(shè)計(jì)的組件為:①系統(tǒng)狀態(tài)組件(FormBean),即實(shí)體模型類,它繼續(xù)自ActionForm類,用來存放表單數(shù)據(jù),與注冊(cè)頁面的表單對(duì)應(yīng)的數(shù)據(jù)bean為:import org.apache.struts.action.*;//引用Struts類包

public class UserForm extends ActionForm{

private String userID= null;

private String password= null;

……

public String getUserID(){return userID;}

public void setUserID(String userID)

{this.userld= userID;}

public String getPassword(){return password;}

public void setPassword(String password)

{this. password=password;}

……}②指令類組件(ActionBean),它擴(kuò)展了Action類,主要是用來控制應(yīng)用程序的流程,當(dāng)注冊(cè)考生按“submit”按鈕后,來自用戶的請(qǐng)求被Servlet(Controller)送到指令類組件RegUserAction,指令類調(diào)用相應(yīng)的業(yè)務(wù)邏輯進(jìn)行處理,然后把請(qǐng)求轉(zhuǎn)發(fā)給相關(guān)的JSP,其程序概要為:……;

import org.apache.struts.action.*;

public class RegUserAction extends Action

{

public ActionForward perform(ActionMapping

mapping, ActionForm form, HttpServletRequest

req, HttpServletResponse response) {

boolean flag;

String username=req.getParameter(“UserID”);

String password=req.getParameter(“password”);

…… //獲取其他注冊(cè)信息,并根據(jù)注冊(cè)信息,做相應(yīng)的數(shù)據(jù)庫操作,返回是否注冊(cè)成功標(biāo)志flag

if (flag){

try{

UserDirectory.getInstance().setUser(UserID,

password);

return mapping.findForward(“sUCcess”);

}catch(UserDirectoryException e) {

return mapping.findForward(“failure”);}

}

return mapping.findForward(“failure”); //注冊(cè)成功后轉(zhuǎn)發(fā)給相應(yīng)的jsp文件


}其中UserDirectory是一個(gè)helper類,記錄UserID和password 到一個(gè)標(biāo)準(zhǔn)的屬性文件之中。⑷ 實(shí)現(xiàn)控制器功能的指令Struts框架的核心是控制器類ActionServlet,不需要重新設(shè)計(jì)而直接使用。ActionServlet的核心是struts-config.xml配置文件,它包含了應(yīng)用程序的整個(gè)邏輯流程。在考生注冊(cè)信息過程中,用reguserinfo.jsp實(shí)現(xiàn)注冊(cè)頁面;用UserForm(擴(kuò)展了ActionForm)封裝了表單數(shù)據(jù);用RegUserAction(擴(kuò)展了Action)實(shí)現(xiàn)了考生注冊(cè)信息(業(yè)務(wù)邏輯)并控制了應(yīng)用程序流程;而在struts-config.xml配置文件里實(shí)現(xiàn)了注冊(cè)頁面(reguserinfo.jsp)、數(shù)據(jù)bean(UserForm)、邏輯bean (RegUserAction)之間的聯(lián)系,其配置信息為:……;

<struts-config>

<form-beans>

<form-bean name="userForm" type=" UserForm"/>

</form-beans> ……

<action-mappings>

<action path="/reguser" type="RegUserAction"

input="/reguserinfo.jsp" name="userForm"

scope="request">

<forward name="success" path="/regsucess.jsp"/>

<forward name="failure" path="/regfailure.jsp"/>

</action>

</action-mappings></struts-config>當(dāng)在注冊(cè)頁面上單擊“submit”按鈕時(shí),考生請(qǐng)求被提交給ActionServlet, ActionServlet根據(jù)struts-config.xml中的配置信息,把/reguser.do的URL映射到RegUserAction,把考生注冊(cè)信息封裝到UserForm,由RegUserAction完成注冊(cè)操作,然后轉(zhuǎn)發(fā)給"/regsuccess.jsp”。由此可見,控制器通過配置文件struts-config.xml把視圖和模型聯(lián)系在一起,struts-config.xml集中了應(yīng)用程序的整個(gè)邏輯流程,此文件無論對(duì)于前期的開發(fā)還是后期的維護(hù)和升級(jí)都是非常重要的。⑸ 系統(tǒng)運(yùn)行  啟動(dòng)Tomcat服務(wù)器,在瀏覽器中訪問http:// localhost:8080/testWeb/reguser.jsp,就可以運(yùn)行該系統(tǒng)了。3、結(jié)束語Struts是一種基于MVC設(shè)計(jì)模式的Java Web框架,它使系統(tǒng)開發(fā)過程各個(gè)模塊更加細(xì)化。利用taglib獲得可重用的代碼;利用ActionServlet配合struts-config.xml實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)導(dǎo)航,增強(qiáng)了開發(fā)人員對(duì)系統(tǒng)的整體把握;用戶界面、業(yè)務(wù)邏輯和業(yè)務(wù)控制的分離,使系統(tǒng)的層次結(jié)構(gòu)更加清楚,易于分工協(xié)作,同時(shí)增強(qiáng)系統(tǒng)的可擴(kuò)展性、維護(hù)性。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 林州市| 富平县| 金湖县| 台南县| 天水市| 紫云| 宝山区| 潞城市| 闽侯县| 阳山县| 金阳县| 韩城市| 宁南县| 漳浦县| 尼勒克县| 灵山县| 象山县| 阳原县| 牟定县| 娄烦县| 巩义市| 汉中市| 武清区| 莒南县| 宁陵县| 桃源县| 沁阳市| 临泽县| 哈尔滨市| 神农架林区| 蒙阴县| 满城县| 安化县| 玛多县| 双柏县| 鄯善县| 格尔木市| 鄯善县| 朝阳县| 多伦县| 金秀|