Java項(xiàng)目開發(fā)平臺開發(fā)規(guī)范方案_第1頁
Java項(xiàng)目開發(fā)平臺開發(fā)規(guī)范方案_第2頁
Java項(xiàng)目開發(fā)平臺開發(fā)規(guī)范方案_第3頁
Java項(xiàng)目開發(fā)平臺開發(fā)規(guī)范方案_第4頁
Java項(xiàng)目開發(fā)平臺開發(fā)規(guī)范方案_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Java工程開發(fā)平臺開發(fā)標(biāo)準(zhǔn)

北京東方國信電子CRM事業(yè)部

時(shí)間:2003-8-27

目錄Java工程開發(fā)平臺開發(fā)標(biāo)準(zhǔn)1

一、開發(fā)平臺概述2

二、技術(shù)綜述2

1、Struts框架技術(shù)2

2、Hibernate數(shù)據(jù)持久化技術(shù)4

3、動態(tài)bean技術(shù)9

三、在BONC-JONE平臺上進(jìn)展開發(fā)12

1、BONC-JONE平臺目錄說明12

2、如何使用BONC-JONE運(yùn)行起來13

3、開發(fā)有關(guān)標(biāo)準(zhǔn)性要求及典型步驟13

四、主要函數(shù)及使用技術(shù)方法說明36

如何使用自定義標(biāo)簽犀?36

如何使用日志類寫日志?38

如何進(jìn)展資源注冊?41

如何進(jìn)展登陸權(quán)限驗(yàn)證?41

如何進(jìn)展字符轉(zhuǎn)換?41

如何對資源文件進(jìn)展字符轉(zhuǎn)換?41

如何配置、讀取應(yīng)用配置信息?41

如何打包boncpersistenceobj.jar文件?41

數(shù)據(jù)操作方法的原理是怎樣的?41

如何將任意文件上傳到數(shù)據(jù)庫中,義如何下載?41

如何保證在頁面清空的字段能正確提交到數(shù)據(jù)庫?41

如何使用日期控件?42

如何使用DBQuery類進(jìn)展數(shù)據(jù)查詢?42

如何白動生成Hibernate持久化beans及map文件?42

如何使用分頁技術(shù)?44

附錄:45

附A:Struts學(xué)習(xí)精要參考45

附B:Hibernate學(xué)習(xí)精要■參考45

附C:技術(shù)備忘45

定義了五種屬性訪問策略,使得屬性的訪問代碼像腳本一樣在運(yùn)行時(shí)決定,另外一個(gè)進(jìn)

步就是它支持List和Map屬性的元素屬性,也就是擴(kuò)展javaBean屬性機(jī)制它不把一個(gè)Bean的某

個(gè)List和Map成員看成一個(gè)整體屬性,而是動態(tài)地把這個(gè)List和Map成員的元素看成屬性,這

樣無疑提供了一種無限擴(kuò)展Bean屬性的能力。

Common-beanutiIs1.6中的propertyUtiIs實(shí)用類使用Java語言的內(nèi)省反射功能實(shí)現(xiàn)擴(kuò)展

屬性的設(shè)置器和獲取器。propeiyUtiIs定義了引用一個(gè)特定Javabean屬性的五種格式:

■簡單屬性,格式beanName.propNpName標(biāo)識了JavaBeanbeanName的,個(gè)屬性,

這個(gè)屬性的獲取器和設(shè)置器的方法是通過JavaBean的標(biāo)準(zhǔn)內(nèi)省功能決定的。如果要

改變簡單屬性的值,必須要有設(shè)置器操作,可以想象成類似調(diào)用beanName.

[getpropName0IsetpropName(vaIue)l:嵌套屬'性,格式beanName.propNameI.propName2.

propName3o像簡單屬性一樣,第一個(gè)propNameI元素被用來選擇一個(gè)屬性獲取器方法,

在這個(gè)方法退回的對象上使用propName2的獲取器方法返回下一個(gè)對象,最后這個(gè)對

象的屬性propName3被訪問或設(shè)置,可以想象成類似調(diào)用

beanName.getpropNameI().getpropName?().[getpropName3()|setpropName3(vaIue)]索

引屬性,格式beanName.propName[index]o屬性propNameI可以是一■個(gè)數(shù)組,java,uti

I.List或者JavaBeanbeanName有索引屬性獲取器和設(shè)置器操作。

bean只需propNane的獲取器方法,可以想象成類似調(diào)用beanName.[getpropName

(index)|setpropName(index.vaIue)]:

■映射屬性,格式beanName.propName(key)opropName是一個(gè)java.util.Map實(shí)現(xiàn)。bean

只需propName的萩取器方法,可以想象成類似調(diào)用beanName.getpropNameO.

[get("key")|set("key",value);

■組合屬性,格式beanName.propNameI.propName2[index].propName3(key)o,動態(tài)bean:

動態(tài)bean具有動態(tài)屬性,也就是說可以由程序運(yùn)行時(shí)構(gòu)造bean的屬性,而不是像標(biāo)準(zhǔn)的

javaBean在編譯時(shí)決定一個(gè)bean的屬性。

定義和訪問一個(gè)動態(tài)bean的步驟如下:

■定義一個(gè)動態(tài)屬性Dynaproperty數(shù)組,動態(tài)屬性Dynaproperty定義了一個(gè)屬性的名字

和對象類型;

■用定義好的動態(tài)屬性數(shù)組實(shí)例化?個(gè)動態(tài)類;

■由動態(tài)類返回一個(gè)動態(tài)bean;

■可以用propertyUtiIs訪問和設(shè)置動態(tài)bean的屬性。

下面是定義和訪問動態(tài)bean的代碼:

//TestDynaBean.javaimportorg.apachemons.beanutiIs.*;

importjava.utiI.

pubIicclassTestDynaBean{

pubIicstaticvoidmain(String[]args){TestBeanbean=newTestBean();

Objectvalue=nulI;try(

Dynaproperty[]px=(newDynaproperty("subordinate",bean.getClass()),

newDynaproperty("firstName",Class,forName("java.lang.String")),

newDynaproperty("IastName",Class.forNams("java.lang.String"))

};DynaClassdynaClass=newBasicDynaCIass("employee",null,px);

DynaBeanemployee=dynaClass.newInstance();propertyIItiIs.setproperty(emp

Ioyee,"subcrdinate",bean);

propertyIItiIs.setproperty(empIoyee,"subordinate.IistIndexed[0]"dybean

set");propertyIItiIs.setproperty(empIoyee."firstNams","Fred");

propertyIItiIs.setproperty(empIoyee,"IastName","Flintstone");

System,out.println("subordinate.IistIndexed[0]:;System,out.printIn

(propertyIItiIs.getproperty(empIoyee,"subordinate.IistIndexed[0]"));

System,out.println("firstName:"+propsrtylItiIs.getproperty(empIoyee,"f

irstName"));

System,out.println("lastName:"+propertyIItiIs.getproperty(empIoyee,"

IastName"));

)catch(Exceptione)(System,out.printIn(e.toString());

)

))

從配置文件配置動態(tài)bean的動態(tài)屬性好處在于既能固定乂能更改動態(tài)Bean的屬

性,這些屬性是這個(gè)動態(tài)Bean對外界的宣布的〃訪問協(xié)議〃。動態(tài)屬性Dynaproperty的

主要構(gòu)造函數(shù)承受兩個(gè)參數(shù):第一個(gè)為屬性名稱,為字符串性,第二個(gè)為屬性的類型,為

Class類型。從配置文件讀取的資料普通為字符串型,我們可以用ClassLoader把配置文件中字符串

型的屬性類型轉(zhuǎn)化成Class類型的屬性類型。

下面struts1.1中struts-example.war的formbeans,xml中的片斷表達(dá)了如何

在配置文件中定一個(gè)動態(tài)bean的動態(tài)屬性:

〈form-beanname="IogonForm"type="org.apache,struts,vaIidator.DynaVaIidatorForm">

〈form-propertyname="username"type="java.lang.String"/><form-propertyname二"pass胃ord"type="java.

lang.String'7></form-bean>

下面RequestUtils的代料片斷表達(dá)了如何從字符串表示的屬性類型轉(zhuǎn)化成Class型

的屬性類型:

pubIicstaticClassappIicationCIass(StringcIassName)throwsCIassNotFoundException{

//LookuptheclassloadertobeusedCIassLoaderclassLoader=

Thread.currentThread().getContextCIassLoader();if(classLoader-null)(

cIassLoader=RequestUtiIs.cIass.getCIassLoader();

)

處理:或者由Action類更改或填充其中的數(shù)據(jù),然后將其傳給view層來顯示。

■Action類:Action類主要完成三方而的功能,其一是做登陸及權(quán)限驗(yàn)證,其二是做數(shù)

據(jù)校驗(yàn),其三(也是最主要的)員責(zé)完成與控制有關(guān)的功能。需要注意的是盡可能不

要此類中包含業(yè)務(wù)處理功能。

■業(yè)務(wù)管理接口類:該類是對業(yè)務(wù)對象進(jìn)展操作的抽象,是一個(gè)接口,對該業(yè)務(wù)對象

的操作均應(yīng)通過它來進(jìn)展。

■業(yè)務(wù)管理抽象類:這種類實(shí)現(xiàn)或局部實(shí)現(xiàn)業(yè)務(wù)管理接口中定義的方法,業(yè)務(wù)操作的

大局部代碼均應(yīng)該寫在這個(gè)類中。由于這個(gè)類是個(gè)抽象類,所以它不能夠被實(shí)例化。

■業(yè)務(wù)管理實(shí)現(xiàn)類:這種類是業(yè)務(wù)管理抽象類的繼承類,通常情況下其中無實(shí)際代

碼。

應(yīng)用開發(fā)中關(guān)鍵的配置文件的意義及功能

■web.xml文件:是Web應(yīng)用最根本的部署描述配置文件。

部署Web應(yīng)用首先要配置web.xml文件。開發(fā)人員需要在Web.xml部署描述文件中配置:

有效的部署描述文件必須包含DTD聲明:

<!D0CTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDV/ebApplication

2.2//EN""://java,sun/j2ee/dtds/web-app_2_2.dtd">web-app標(biāo)記是部署描述文件的根兀素,

它的子元素包括:

元素描述

icon

此元素指定在GUI工具中表示此Web應(yīng)用的大圖標(biāo)和小圖標(biāo),包

含一個(gè)sma1l-icon和一個(gè)large-icon元素,可使用GIF或JPEG

格式的圖像

disp1ay-name此元素提供在GUI工具中此模塊的短名字

description此元素提供關(guān)于父元素的描述性文本

distributable如果在Web應(yīng)用部署描述中使用該元素,就表示該Web應(yīng)用可

以部署到分布式Servlet容器

context-param此元素包含Web應(yīng)用的Servlet環(huán)境的初始參數(shù)

servlet包含一個(gè)servlet的聲明性數(shù)據(jù)

servlet-mapping在servleL和ur1模式間進(jìn)展映射

session-config聲明此Web應(yīng)用的Session參數(shù)

mime-mapping定義擴(kuò)展名和mimetype間的映射

v/e1come-fi1e_1ist包出we1come-fi1e子兒系,的順序列表

error包含一個(gè)錯誤代碼或違例類型與web應(yīng)用中資源的映射

tagIib用于描述一個(gè)JSP標(biāo)記庫

resource-ref包含一個(gè)對外部資源的引用聲明

security-constraint用于為一個(gè)或多個(gè)Web資源集合指定相應(yīng)的平安約束

1ogin-config用于配理身份筌定的方法,此應(yīng)用使用域名,以及通過表單登

錄機(jī)制那么需要設(shè)置此屬性

security-role包含使用于web應(yīng)用中<security-constriant>元素的平安角色

的聲明

env-entry包含應(yīng)用環(huán)境變量的聲明

ejb-ref用于聲明對EJB的引用

ServletContext初始化參數(shù):

context-param標(biāo)記的子兀索包括:param-name:參數(shù)名param-vaIue:參數(shù)值

description:參數(shù)的描述信息例如:

"(contextparamXparamnamc>my_contcxt_param_namc</param~namc>

<param-vaIue>ContextParamVaIue</param-vaIueXdescription>paramdescript

ior)</description>

</context-param>

Session配置

session-config標(biāo)記的子兀素包括:

session-timeout:session超時(shí)時(shí)間

例如:

<session-configXsession?timeout>

30</session?timeout>

</session-config>

Servlet/JSP定義

servlet標(biāo)記的子元素包括:

icon:在GUIX具中的顯不圖標(biāo)

servlet-name:servlet名稱

dispIay-name:在GUIX具中的顯不名稱

description:描述信息

servlet-class|jsp-fiIe:servlet類名稱;jsp文件的完全路徑

init-param:初始化參數(shù)列表

load-on-startup:web應(yīng)用啟動時(shí)裝載

security-role-ref:定義平安引用角色

servlet-mapping標(biāo)記的子元素包括:

servlet-name:servlet名稱

例如:

<servlet><icon>

<small-icon>smalI.gif</sma11-icon><large-icon>largeI.gif</1arge-icon>

</iconXservIet-name>my_servIet</servIet-name>

<dispIay-name>my_servIet</dispIay-name><description>my_servIet</description>

<servIet~cIass>coni.apusic.test.MyServIet</servIet~cIass><init-param>

<param-name>my_irit_param</param-nameXoaram-vaIue>InitParamVaIue</param-vaIue>

<description>paramdescripton</description>

</init-param><load-on-startup>1</Ioad-on~startup>

<security-role?refXdescription>roledescription</description>

<roIe_name>my_security_roIe_name</roIe-nams><roIe_1ink>SecurityRoIeLi

nk</roleTink>

</security-role-ref>

</servlet>

ServIet/JSP映射

urI-pattern:servlet映射的URL模板

<servlet-mappingXservIet-name>my_servIet</servletname>

<urI-pattern>/my_urI_pottcrn</url-pattcrn>

</servlet-mapping>

MIME類型映射

mime-mapping的子兀素包括:

extension:擴(kuò)展名

mime-type:MIME類型

例如:

<mime-mappingXextension>txt</extension>

<mime_type>text/pIain</mime?type)

</mime-mapping>

歡送文件列表

weIcome-fiIe-1ist標(biāo)記的子兀素包括:

weIcome-fiIe:作為塊省的歡送文件名

例如:

<weIcome-file~listXv/eIcome-file>

index.jsp</weIcome-file>

<v/eIcome-fiIe>index,html

</weIcome-fiIeXweIcome-fiIe>

index,htm</weIcome-fiIe>

</weIcome-fiIe?Iist>

錯誤頁面

error-page標(biāo)記的了,元素包括:

error-code|exception-type:的錯誤代碼;異常類型

location:資源在Web應(yīng)用中的位置

例如:

<error-pageXerror-code>404</error-code>

<location>ErrorPage.jsp</location>

</error-page>

<error><exception-t/pe>ExceptionType</exception?type)

<location>ErrorPage.jsp</location>

</error-page>

平安

security-constraint標(biāo)記的子兀素包拈:

web-resource-collection:用于區(qū)分資源子集和web應(yīng)用內(nèi)使用平安約束的這類資源的方法。

如方法未被指定,平安約束將適用于所有

的方法。

auth-constraint:指定允許訪問此資源集合的用戶角色。在此處使用的角色必須在<secur

ity-role7ef>元素中進(jìn)展走義

user-data-constraint:于指出客戶端和容器間的數(shù)據(jù)交換的保護(hù)方式

login-config標(biāo)記的子元素包括:

auth-method:用于為Web應(yīng)用配置身份鑒定機(jī)制。作為對使用身份簽定約束保護(hù)的任何

Web資源取得訪問的先決條件,用戶必須使用已配置的身份鑒定機(jī)制進(jìn)展鑒定。此元

素的合法值為“BASIC"、“DIGEST”、“FORM”或“CLENT-CERT'

realm-name:指定在根底授權(quán)中的域名form-login-config:定義Web應(yīng)用中使用的登陸頁

面可被找到的位置

security-role標(biāo)記的子元素包括:

description:描述信息role-name:平安角色的名字

例如:

<security-constraint><web-resource-coIlection>

<web"resource-name>Name</web-resource-name>

<description>descript</descripticn>一、開發(fā)平臺概述

BONC-JONE開發(fā)平臺是北京東方國信電子技術(shù)遵循“簡單、有效、先進(jìn)、可擴(kuò)〃的原那么,通

過整合Struts1.1與Hibernate2.1等優(yōu)秀的開源技術(shù)設(shè)計(jì)并實(shí)現(xiàn)的一個(gè)J2EE開發(fā)平臺。

其架構(gòu)圖如下:

這個(gè)體系架構(gòu)的主體是MVC架構(gòu)。MVC是Model/Vie,v/Con:rol的縮寫。

ModeI/View/ControI是軟件設(shè)計(jì)的典型構(gòu)造。在這種設(shè)計(jì)構(gòu)造下,一個(gè)應(yīng)用被分為三個(gè)局部:

Model、View和Controller,每個(gè)局部負(fù)責(zé)不同的功能。Model是指對業(yè)務(wù)數(shù)據(jù)/信息的處理模塊,包

括對業(yè)務(wù)數(shù)據(jù)的存取、加工、綜合等;View是指用戶界面,也就是面向用戶的數(shù)據(jù)表示:

Controller那么負(fù)貢View和Model之間的流程控制,也就是完成兩個(gè)方向的動作:1.將用戶界面

(View)的操作映射到具體的Model,以完成具體的業(yè)務(wù)邏輯;2.將通過Model處理完的業(yè)務(wù)數(shù)據(jù)及時(shí)反

響到用戶界而(View)上。

其系統(tǒng)組成構(gòu)造圖如下:

平臺輔助API

皿多層

業(yè)務(wù)Beans技術(shù)

JDBC

連接池技術(shù)

數(shù)據(jù)座~DataBase

BONC-JONE開X。分層的概念起源

于操作系統(tǒng)及網(wǎng)絡(luò)fZ用系統(tǒng)中相當(dāng)流行

To

BONC-JONE開發(fā)平臺主要層次分為:表示層丈一些各層公用的工

其英庫。

分層的系統(tǒng)設(shè)計(jì)思想的重點(diǎn)在于:

?一個(gè)分層的系統(tǒng)在各相關(guān)層的實(shí)現(xiàn)代碼J多一個(gè)層的實(shí)現(xiàn)代碼

的變化不會影響到其它的層。

?分層系統(tǒng)構(gòu)造還限制隔層依賴的發(fā)生,各層的通訊是由頂向下管理的。某一層僅依賴于直

接位于它下面的那一層。每一層對其他層的存在都是不知道的,除非那一層緊鄰其下。

即使是對緊鄰其下的層它也僅需要知道如何使用接口與其通訊就可以了,而無需知道其

實(shí)現(xiàn)細(xì)節(jié)。

B0NC-J0NE開發(fā)平臺通過Struts+Tiles技術(shù)實(shí)現(xiàn)了MVC模式中的表示層和控制層,通過Hibernate

技術(shù)結(jié)合動態(tài)Bean技術(shù)融合成獨(dú)特的業(yè)務(wù)Beans技術(shù)構(gòu)建了數(shù)據(jù)層。

二、技術(shù)綜述

1、Struts框架技術(shù)Struts是一個(gè)基于J2EE的MVC框架。

J2EE體系包括JSP、Servlet、EJB、WEBSERVICE等多項(xiàng)技術(shù)。這些技術(shù)的出現(xiàn)給電子商務(wù)時(shí)代的WEB

應(yīng)用開發(fā)提供了一個(gè)非常有競爭力的選擇。但怎樣把這些技術(shù)組合起來,形成一Qrl-pattern〉

/secjrity/*</urI-'pattern)

(/web-resource-coIlection)<auth?constraint>

<rolename>dsfau11</rolenameX/auth-constraint>

</security-constraint>

<login-config><auth-method>BASIC</auth-method>

<reaIm~name>DefabIt</reaIm-name>

</Iogin-config>

<security-role><description>roledesc</description>

<roIe^name>default</roIe?name)

</security-role>

標(biāo)簽庫配置:

Taglib標(biāo)記的子元素包括:

tagIib-uri:統(tǒng)一資源標(biāo)識符(URI)參數(shù),可以自由命名。

tagIib-location:標(biāo)簽庫描述文件的實(shí)際位置。

例如:

<taglibXtaglib-uri>/WEB-1NF/BoncTagLib.11d</taglib"uri>

<taglib^locatior>/WEB-1NF/BoncTagLib.11d</taglib-locationX/taglib><taglib>

<taglib?uri>/WEB-1NF/struts-bean.11d</taglib?uri>

<tagliIocation>/WEB-1NF/struts-bean.11d</taglib-locationX/taglib>

<taglibXtaglib-uri>/WEB-1NF/struts-htmI.tld</taglib?uri>

<taglib_1ocation>/WEB-1NF/struts-htm1.11d</taglib-locationX/taglib>

<taglibXtaglib?uri>/WEB-1NF/struts-logic.11d</taglib-uri>

<taglib_1ocation>/WEB-1NF/struts-logic,11d</tagIib-1ocationX/tagIib>

<taglibXtaglib-uri>/WEB-lNF/struts-tiles.11d</taglib-uri>

<taglib-1ocation>/WEB-1NF/struts-tiles.11d</tagIib-1ocationX/tagIib>

</v/eb?app>看來v/eb.xml的配置是很多的,但在開發(fā)中我們需要進(jìn)展的配置并不多。在

bonc-jone開發(fā)平臺的web.xml中根本不需要開發(fā)人員變動已有的配置。唯一需要由開發(fā)人員進(jìn)展

的配置是增加各模塊的struts配置文件路徑,例如:

<v/eb~app><servlet>

<servIet~name>action</servIet""name><servIet~cIass>org.apache,struts,tiles.Acti

onComponentServIet</servIet""class>

<init-paramXparam*name>config</param-name>

<param*vaIue>/WEB-1NF/struts-config.xml,

/WEB-1NF/struts-config-yourmodueI.xml,/WEBTNF/struts-config-other.xml</pararri-

value>

</init-param>

???

</servlet>

???

</web^app>BStruts配置文件:是Struts柜架的中心配置文件,通俗地說是Struts應(yīng)用的地

圖。

以下是Struts配置文件的根本構(gòu)造:

<?xmlversion=,1.0"encoding="ISO-8859-1"?><!—StrutsConfigXML-SampIeStrutsApp—>

<!—==============================—X!—AutoGencratedfrom:

c:\dev\javaworld\app\sample.vsd—>

<!—AutoGeneratedon:02-18-200323:05:47—X!—AutoGeneratedby:StrutsGUIv2.

11(c)2002Alien-Factory—>

<!—:See'://alien-factory.co.uk'fordetaiIs—>

<!—(SETYOURSTICKYFINGERSOFF!i.e.Donotedit.—><!DOCTYPEstruts-configPUBLIC

//ApacheSoftwareFoundation//DTDStrutsConfiguration

1.0//EN""://Jakarta,apache,org/struts/dtds/struts-confi<struts~config>

<!——===============FormBeanDefinitions===========—>

<form~beans>

<form-beanname="testForm"

type="org.apache,struts,action.DynaActionForm"dynamic="true")<form-property

name="testproperyt"type—Mjava.lang.String"/></form-bean></form-beans>

<!—========GlobaIForv/ardDefinitions============—XglobaI-

forwards>

</gIobaI-forwardsX!—=============ActionDefinitions==============

―Xaction-mappings>

<actionpath='7Login"type="com.agiIques*,onboard,presentation.actions.Logi

nAction"name="testForm"validate="true"

scope="request"Xdescription>Authenticatesandauthorizesauser.</descr

iption>

〈forwardname="success"path="tiIe.loginPage'7X/action>

</action-mappings></struts-config>

開發(fā)人員進(jìn)展開發(fā)時(shí)主要是配置form-beans中的form-bean及action-mappings

中的actiono注意:在bonc-jone開發(fā)平臺中,V/EB-1NF目錄下的struts-config.xml配置

文件是不允許開發(fā)人員更改的。開發(fā)人員應(yīng)該將自己開發(fā)的模塊獨(dú)立形成一個(gè)struts配置文件,

按照struts-config-模塊名稱.xml的方式來命名,并將其參加web.xml的配置中,具體方法見web.xml

的配置。

■tiles-defs.xml配置文件:是使用tiles框架及其標(biāo)簽庫技術(shù)需要配置的文件。

以下是tiles-defs.xml配置文件的根本構(gòu)造:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEtiles?definitionsPUBLIC"-//Apache

SoftwareFoundation//DTDTilesConfiguration1.1//EN"

://Jakarta,apache,org/struts/dtds/1iles-config_1_1.dtd"><!-DefinitionsforTiles

—>

<!-ThisfiIecontainsdefinitionscommontoaIIstrutsmodule.

Inparticular,itcontainsthemainlayoutandthecommonmenus.

ThereisaIsothemainpageasaportaI.

—><tiIes-definitions>

<!—===============================—X!—Masterdefinitions一一〉

<!—===============================—X!-PagelayoutusedasrootforaI

Ipages.—>

<definitionname="rootLayout"path="/1ayouts/rootLayout.jsp"Xputname="checkMessage"

vaIue="/do/checkMessagenews"/>

<putname'titleString"vaIue="CHANGE-ME"/><putnane="topBanner'

vaIue="/app/menu/topbar.jsp"/Xputname-"firstMenus"

vaIue="/do/queryMenus?seIfAction二queryFirstMenus"/Xputname="secondMenus"

vaIue="/do/queryMenus?seIfAction=querySecondMenus"/Xputname="main"vaIue="CHANGE-ME"/>

<putname="footer,'vaIue="/app/menu/footer,isp"/X/definition>

<!-====================================================—><i—Page

definitions>

<!——^definition

name=z,tile.SearchVip*extends二"rootLayout”〉

<putname="ti11eString"vaIue="大客戶查詢name="main”

vaIue="/app/1nfoManager/VIPInfo/searchvipForm.jso"/></definition>

</tiles-definitions>

當(dāng)開發(fā)人員完成一個(gè)主要的功能頁面后,想將其按照應(yīng)用的布局嵌入到工作區(qū)中時(shí),使

用上述的定義方法即可達(dá)成目的。tiIe.SearchVip相當(dāng)于是一個(gè)應(yīng)用了tiles模板的一

個(gè)jsp,但與真正的jsp不同的是必須使用findrorward方法來定向到它。

Ibonc-cofig.xml配近文件:是應(yīng)用使用的參-數(shù).、業(yè)務(wù)對象等的真正屬于bone-jone平

臺本身的配置文件。

定義屬性名稱格式為:prop.name.is.blah=value

在這個(gè)文件中應(yīng)存為:

<prop><name>

<isXbIah>vaIue</blah>

</is></name>

</prop>

其所有的屬性必須在"bone"元素下。這個(gè)文件要在bonjinit.properties文件所定義的

boncHome目錄下。boneinit.properties文件要在應(yīng)用的classpath中。

開發(fā)人員需要在這個(gè)文件中做的主要配置舉例如下:

定義業(yè)務(wù)管理接口的實(shí)現(xiàn)類

<BusinessManagerXVIPInfoManager>

com.bone,exampIe.module.Infomanager.vipinfo.businessmanager.impI.

VIPInfoManager_cnc</VIPlnfoManager>

</BusinessManager>

定義業(yè)務(wù)對象

<BusinessObj>

<VIPInfo_inx><bean-property-hibernatename="bm_inx_vip"

type="com.bone,hibernate,persistenceokj.BmInxVip"/X/VIPInfo_inx>

<VIPInfo><bean-property-hibernatename="bm_info_vip"

type="com.bone,hibernate,persistenceobj.BmInfoVip'7><bean-property-nesting

name="inx"

type="InfoManager.VIPInfo.BusinessObj.VIPInfo_inx"/>

<bean-propertyname="cust_new_name"type="java,langString"initiaI=""/X/VIPInfo>

</BusinessObj>

應(yīng)用開發(fā)中的典型步驟、本卷須知及要求

以下我們通過一個(gè)例子來說明應(yīng)用開發(fā)中典型步驟、本卷須知及要求。

■假設(shè)數(shù)據(jù)庫中已建好一張這樣的數(shù)據(jù)表:

表名:bm_lnfo_Tes:有三個(gè)字段:編碼id(varchar)、姓名name(varchar)>年毋age

(number(2,0))

■我們可以使用Hibernate的工具自動生成(生成方法見第四章)

BmlnfoTest.java文件及BmlnfoTest.hbm.xml文件。注意包路徑必須為:com.bone,

hibernate,persistenceobjo

■首先我們要做一個(gè)入口頁面,這個(gè)頁面要求使用者輸入age值,也即數(shù)據(jù)庫表

bm_lnfo_Test的age的值。輸入項(xiàng)不可以為空。如不為空,就根據(jù)這個(gè)條件查出所有

大于等于輸入值的記錄;如為空,就在這個(gè)頁而上顯示要求使用者輸入條件的提示

信息。

在struts-cofig-test,xml文件中,我們定義一個(gè)動態(tài)formbean(注意bean的動態(tài)屬

性必須全部使用小寫字母,要與BmlnfoTest.java文件及BmlnfoTest.hbm.xml文件取

名完全一致):

\form-beanname="ageForm"type="org.apache,struts,action.DynaActionForm"

dynamic="true">(form-propertyname="age"type="java.Iang.String"/>

</form-bean>

我們在app/test目錄卜新建一個(gè)JSP文件,起名為testTableSearch,jsp.代碼如卜(注

意html:text的Property應(yīng)該與formbean中定義的屬性名稱保持一,致):

<html:formaction="/1nputAgeToSearch"method="post"Xtable>

<trXtd>請輸入年紀(jì):</td><td><html:textProperty="age"/X/td>

<td><html:submitProperty="submit"value:“查詢"X/tdX/tr>

</tableX/html:form>

在tiles-defs.xml中做如下配置:

<definitionname="app.test,inputTestSearchCondition"extends="rootLayout"Xput

name="ti11eString'vaIue="輸入查詢條件”/>

<putname="main"vaIue="/app/test/testTatIeSearch,jsp"/></definition>

我們新建一個(gè)action類,放在com.bone.erm.moduIe.action包中,起名為

TestTestAction。暫不參加任何代碼,先讓我們配置一卜struts-config-test.xml中的

actionmapping:

<actionpath=,71nputAgeToSearch"type="combone.erm.module.action.

TestTestAction"name="ageForm"vaIidate="true"scope=,request"Xdescription>執(zhí)

行轉(zhuǎn)到輸入查洵條件頁面</description>

<forwardname="success"path="app.test,inputTestSearchCondition"/>

</action>

現(xiàn)在我們在其execute方法中參加如下的代碼片段,使當(dāng)對InputAgeToSearch發(fā)出請求

時(shí)轉(zhuǎn)到我們的輸入查詢條件頁面:

if(mapping.getPaThQ.endsWithCInputAgeToSearch"))(returnmapping,findForward

(MsuccessIIX);

1returnnull;如果此時(shí)運(yùn)行應(yīng)用訪問:localhost:8080/CRM/do/InputAgsToSearch就

會出現(xiàn)我們的輸入查詢條件的頁面。

好,現(xiàn)在我們暫停一下,詳細(xì)解釋一下以上代碼是如何起作用的。

當(dāng)客戶端發(fā)出:IocaIhost:8080/CRM/do/1nputAgeToSearch這樣一個(gè)請求后,由

于在web.xml中定義了名為action的servlet,它會把所有與/do/*相匹配的請求發(fā)到

ActionServlet,ActionServlet在系統(tǒng)啟動時(shí)從Struts的配置文件中已經(jīng)讀取了所有

配置信息,它從actionmapping的配置中找到相應(yīng)的action類,在我們的例子中

/do/InputAgeToSearchcM應(yīng)是com.bone.erm.module,action.TestTestAction類,同

時(shí)查找在定義的scope范圍內(nèi)是否TJ對應(yīng)formbean,如沒彳]就初始化在actionmapping

中name屬性定義的formbean,在我們的例『中是ageForm。然后將控制權(quán)轉(zhuǎn)給com.

bone.erm.module,action.TestTestAction,此時(shí)我們寫在這個(gè)action類中的代碼就發(fā)

揮控制作用了。下面解釋一下這段代碼:

它判斷請求是否以InputAgeToSearch這樣一個(gè)字符串結(jié)尾,如

果是的話,它使用千indForward方法將請求轉(zhuǎn)向在我們的Struts配置支件的acti

onmapping中的forward元素的name屬性為success對應(yīng)的path屬性定義的頁面,即

app.test,inputTes

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論