聲明:非本人作品,純屬個(gè)人愛(ài)好收藏,原文來(lái)至http://www.easyjf.com/bbs.ejf?cmd=appShow&id=4653081 作者:天一
EasyJWeb支持零配置,同時(shí)用戶也可以通過(guò)配置文件來(lái)定義EasyJWeb中的各個(gè)部件,從而實(shí)現(xiàn)更加靈活的功能。一個(gè)完整的easyjf-web.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?> <easyjf-web xmlns="http://www.easyjf.com/schema/easyjf/web" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.easyjf.com/schema/easyjf/web http://www.easyjf.com/schema/easyjf/web/easyjf-web-0.0.1.xsd "> <!—框架基本參數(shù)配置—> <framework-setting> <template-base>/WEB-INF/views/</template-base> <property name="com.easyjweb.debug">true</property> <init-app> <app-class init-method="start" destroy-method="stop">com.easyjf.blog.logic.AutoHtmlGenerater</app-class> </init-app> <!—攔截器—> <interceptorsp> <app-class name="before" method="">com.easyjf.intercept.CommInterceptor</app-class> </interceptorsp> <!—錯(cuò)誤處理器—> <error-handler> <app-class exception="" path="">com.easyjf.intercept.CommInterceptor</app-class> </error-handler> </framework-setting> <!—導(dǎo)入其它配置文件—> <import resource="mvc-bbs.xml" /> <!—模塊Action配置—> <modules inject="byType"> <module path="/user" action="com.easyjf.action.UserAction" validate="true" view="" inject="byType" autoToken="true" alias="account" form="userForm" defaultPage="/user/user.xml" scope=""> <page name="user" url="/user/user.html" type="template" contentType="" /> </module> </modules> <!—全面頁(yè)面模板配置—> <pages> <page name="user" url="/user/user.html" type="template" contentType="" /> </pages> <!—表單配置—> <forms> <form name="userForm" serverValidate="" alertType="" bean="" clientValidate="" event=""> <property name="" initial="" notNull="" size="" type="" event=""> </form> </forms> <!—業(yè)務(wù)組件配置—> <beans> <bean name="springContainer" class="org.springframework.web.context.support.XmlWebApplicationContext"> <property name="configLocations"> <list> <value>WEB-INF/classes/application.xml</value> </list> </property> </bean> <bean name="innerSpringContainer" class="com.easyjf.container.impl.SpringContainer"> <property name="factory" ref="springContainer" /> </bean> </beans> <!—ajax參數(shù)配置—> <ajax> <services allowName=”” denyName=””> <service name=”” > < include method=””/> < exclude method=””/> </service> </services> <convert name=””> < include property=””/> < exclude property=””/> </convert> </ajax> </easyjf-web>
EasyJWeb框架的默認(rèn)配置文件是easyjf-web.xml文件,easyjf-web.xml的根節(jié)點(diǎn)是easyjf-web,它有framework-setting、modules、pages、beans、import*、ajax等幾個(gè)子節(jié)點(diǎn)。
framework-setting
framework-setting節(jié)點(diǎn)主要是包含框架初始化時(shí)需要加載的變量、線程、攔截器、以及模板路徑和需要引入的其它配置文件等。它有init-app、interceptorsp、error-handler、template-base、property等子節(jié)點(diǎn)。
init-app子節(jié)點(diǎn)包含框架初始化程序的配置信息。該節(jié)點(diǎn)包含多個(gè)app-class子節(jié)點(diǎn),每個(gè)代表一個(gè)初始化程序。app-class節(jié)點(diǎn)的init-method屬性定義程序的初始化方法,destroy-method屬性定義程序的銷(xiāo)毀方法。該節(jié)點(diǎn)的文本是初始化程序的包路徑。
interceptorsp節(jié)點(diǎn)包含的是攔截器配置信息。該節(jié)點(diǎn)同樣包含多個(gè)app-class子節(jié)點(diǎn),每個(gè)app-class代表一個(gè)攔截器。app-class節(jié)點(diǎn)的name屬性是攔截器的名字,method是調(diào)用攔截器的方法。
error-handler節(jié)點(diǎn)包含錯(cuò)誤處的配置信息,它以攔截器為基礎(chǔ),若配置了error-handler,則必須配置相應(yīng)的攔截器。
template-base配置的是程序的模板文件放置的路徑,該節(jié)點(diǎn)只能有一個(gè)。
property節(jié)點(diǎn)定義了EasyJWeb框架初始化時(shí)加載的變量,如文件上傳的大小限制,該節(jié)點(diǎn)可以有多個(gè)。
property節(jié)點(diǎn)的各元素值如下所示:
com.easyjweb.debug:定義EasyJWeb的工作模式,true或false。
com.easyjweb.maxUploadFileSize:定義上傳文件的最大值,以k為單位。
com.easyjweb.uploadSizeThreshold:定義上傳文件緩沖值,以k為單位。
com.easyjweb.maxDirectJumpToActionTimes:定義EasyJWeb的全局跳轉(zhuǎn)次數(shù)。
com.easyjweb.defaultActionPackages:定義EasyJWeb自動(dòng)掃描的包,多個(gè)包之前以逗號(hào)(“,”)分隔。
示例,在某電子商務(wù)網(wǎng)站,開(kāi)發(fā)環(huán)境中的EasyJWeb配置。
<framework-setting> <property name="com.easyjweb.debug">true</property><!--調(diào)試模式,每次加載都會(huì)重新初始化EasyJWeb--> <property name="com.easyjweb.maxUploadFileSize">51200</property><!--最大上傳文件為51200kb--> <property name="com.easyjweb.uploadSizeThreshold">512</property><!--上傳文件緩存值--> <property name="com.easyjweb.defaultActionPackages"><!--設(shè)置自加Action掃描的路徑--> com.easyjf.core,com.easyjf.security,com.easyjf.necton,com.baijiahui.mvc </property> </framework-setting>
import元素
import元素用來(lái)導(dǎo)入另外一個(gè)EasyJWeb配置文件,一個(gè)配置文件中可以導(dǎo)入多個(gè)其它配置文件。該元素包含一個(gè)屬性:resource,屬性值為WEB-INF下的文件名或者以classpath開(kāi)頭的一個(gè)資源名。如下面的示例:
<import resource="mvc-bbs.xml" /><!--表示導(dǎo)入mvc-bbs.xml這個(gè)文件,等價(jià)于--> <import resource="WEB-INF/mvc-bbs.xml" /> <import resource="classpath:/com/easyjf/core/easyjweb-mvc.xml"/><!--表示導(dǎo)入com.easyjf.core包下面的easyjweb-mvc.xml文件-->
modules
modules節(jié)點(diǎn)是最重要的部分,包含了所有的訪問(wèn)模塊。它的子節(jié)點(diǎn)module配置了訪問(wèn)模塊,對(duì)應(yīng)EasyJWeb的Module類(lèi)。modules節(jié)點(diǎn)的屬性inject定義了全局的注入方式。
module節(jié)點(diǎn)有path、action、validate、view、inject、autoToken、alias、form、defaultPage、scope等屬性。path是該模塊的訪問(wèn)路徑,如/hello.ejf對(duì)應(yīng)的module的path是hello;action配置的是該模塊的處理類(lèi),如com.easyjf.action.HelloAction;validate屬性定義該module是否需要做數(shù)據(jù)驗(yàn)證,值為true或false;view配置的是模板路徑前綴;inject配置的是該模塊的注入方式,如byType等;autoToken定義了該模塊是否需要自動(dòng)加入防重復(fù)提交驗(yàn)證,值為true或false;alias是該模塊的別名,多個(gè)別名使用逗號(hào)”,”作分隔,除了通過(guò)path來(lái)訪問(wèn)也可以通過(guò)alias定義的名字來(lái)訪問(wèn);form是該模塊對(duì)應(yīng)的form,該屬性值對(duì)應(yīng)forms中的某一個(gè)form對(duì)應(yīng);defaultPage定義了該module的默認(rèn)page名,即在不指定page時(shí)使用defaultPage配置的page;scope配置模板的初始化方式,也即生命周期,可以是request、session、prototype、singleton等幾個(gè)值,轉(zhuǎn)認(rèn)為request。
示例:
A、EasyJWeb內(nèi)置的easywidget模塊,提供一些實(shí)用功能
<module path="/easywidget" action="com.easyjf.web.tools.widget.WidgetAction"> <page name="calendar" url="classpath:com/easyjf/web/tools/widget/calendar.html" type="template" /> </module>
B、一個(gè)OA系統(tǒng)中的帳戶模塊
<module name="account" path="/account" scope="request" action="com.easyjf.oa.mvc.AccountAction" detaulsPage="list" inject="byType"> <page name="list" url="/oa/accountList.html" type="template" /> <page name="edit" url="/oa/accountEdit.html" type="template" /> </module>
pages
pages節(jié)點(diǎn)配置了全局的page對(duì)象。pages節(jié)點(diǎn)包含多個(gè)page節(jié)點(diǎn)。page節(jié)點(diǎn)有name、type、url、contentType這幾個(gè)屬性。name屬性定義了該page的名字,可通過(guò)這個(gè)名字來(lái)查找該page;type定義了page的類(lèi)型,可以是"html“、"template"、"action"等;url屬性指定了該page對(duì)應(yīng)的模板文件的路徑;contentType定義該模板頁(yè)的contentType。
在EasyJWeb-1.0m1版本中未實(shí)現(xiàn)對(duì)全局Page的支持。
forms
forms節(jié)點(diǎn)包含多個(gè)form節(jié)點(diǎn),每個(gè)form定義一個(gè)表單。form節(jié)點(diǎn)有name、Initial、notNull、Size、Type、event這幾個(gè)屬性。
該元素在EasyJWeb1.0m2中未使用。
前面1-5個(gè)部件的元素解析是通過(guò)com.easyjf.web.config. XMLConfigFactory來(lái)完成的。
beans
beans節(jié)點(diǎn)配置了需要加載的業(yè)務(wù)組件,類(lèi)似spring里邊的bean。這些bean會(huì)被加載到EasyJWeb的IOC容器中,供Action或其它Bean調(diào)用。beans節(jié)點(diǎn)下面包含多個(gè)bean節(jié)點(diǎn),每個(gè)bean節(jié)點(diǎn)配置一個(gè)業(yè)務(wù)組件。
對(duì)于Bean的解析是通過(guò)com.easyjf.web.config. BeanConfigReader這個(gè)類(lèi)來(lái)完成的。
該節(jié)點(diǎn)中的<bean>標(biāo)簽用來(lái)定義一個(gè)業(yè)務(wù)組件,<bean>元素的結(jié)構(gòu)如下:
<bean name=" " class=" " [scope=" " factory-method="" inject=""] > <!—構(gòu)造子注入—> <constructor-arg index="" type="" [value|ref=""]> [<value></value>|<ref></ref>|<list></list>] </ constructor-arg > <!—設(shè)值方法注入—> <property name ="" [value|ref=""]> [<value></value>|<ref></ref>|<list></list>] </property> </bean>
value節(jié)點(diǎn)或?qū)傩灾械闹禐樽址珽asyJWeb在處理的時(shí)候會(huì)把其轉(zhuǎn)換指定屬性類(lèi)型的值。
ref節(jié)點(diǎn)或?qū)傩灾械闹凳侨萜髦心骋粋€(gè)業(yè)務(wù)組件的名稱(chēng)或id。所引用的業(yè)務(wù)組件可以在本配置文件中定義,也可以其它配置文件中定義,可以是EasyJWeb IOC容器中配置的Bean,也可以是Spring、Guice或EJB容器中定義的業(yè)務(wù)組件。
inject屬性用來(lái)指定業(yè)務(wù)組件的自動(dòng)注入方式,其值如下:
none:不自動(dòng)注入,默認(rèn)值;
bytype:按類(lèi)型自動(dòng)注入;
byname:按名稱(chēng)自動(dòng)注入;
auto:自動(dòng)按名稱(chēng)或類(lèi)型自動(dòng)注入。
scope屬性用來(lái)指定業(yè)務(wù)組件的初始化方式及生命周期,其值如下:
singleton:整個(gè)容器中只創(chuàng)建一次這個(gè)Bean,這個(gè)是默認(rèn)值。
prototype:每次都創(chuàng)建一個(gè)全新的Bean;
request:在Web應(yīng)用環(huán)境下,每一次用戶請(qǐng)求創(chuàng)建一次Bean;
session:在Web應(yīng)用環(huán)境下,每一個(gè)用戶會(huì)話創(chuàng)建一次Bean。
示例:
A、配置一個(gè)Spring容器
<bean name="springContainer" class="org.springframework.web.context.support.XmlWebApplicationContext"> <property name="configLocations"> <list> <value>WEB-INF/classes/application.xml</value> </list> </property> </bean>
B、把Spring容器加入到EasyJWeb超容器中
<bean name="innerSpringContainer" class="com.easyjf.container.impl.SpringContainer"> <property name="factory" ref="springContainer"/> </bean>
ajax
ajax節(jié)點(diǎn)用來(lái)定義EasyJWeb的ajax屬性。EasyJWeb中內(nèi)置了一個(gè)把業(yè)務(wù)組件發(fā)布成遠(yuǎn)程Javascript腳本對(duì)象的遠(yuǎn)程Web調(diào)用支持引擎,在使用到該功能的時(shí)候,可以通過(guò)EasyJWeb配置文件中的ajax節(jié)點(diǎn)來(lái)定制相關(guān)的屬性。Ajax節(jié)點(diǎn)下包括一個(gè)<services>節(jié)點(diǎn)及多個(gè)convert節(jié)點(diǎn),<services>節(jié)點(diǎn)中定義允許發(fā)布的業(yè)務(wù)組件,而<convert>用來(lái)指定POJO轉(zhuǎn)換成Json對(duì)象時(shí)的屬性。Ajax節(jié)點(diǎn)部分的的大致結(jié)構(gòu)如下:
<ajax> <services allowName=”” denyName=””> <service name=”” > < include method=””/> < exclude method=””/> </service> </services> <convert name=””> < include property=””/> < exclude property=””/> </conv>rt> </ajax>
allowName用來(lái)定義允許對(duì)暴露的所有Bean名稱(chēng),denyName用來(lái)定義不允許對(duì)外暴露的所有Bean名稱(chēng)。Include用來(lái)定義某一個(gè)業(yè)務(wù)組件中允許對(duì)外暴露的方法名稱(chēng),而exclude用來(lái)定義某一個(gè)業(yè)務(wù)組件中不允許對(duì)外暴露的方法名稱(chēng)。
對(duì)于ajax節(jié)點(diǎn)的解析是通過(guò)com.easyjf.web.ajax. AjaxConfigManager這個(gè)類(lèi)來(lái)完成的。
EasyJWeb配置文件詳解同時(shí)在EasyJF的wiki發(fā)布,并且會(huì)不斷更新,如果需要查看最新版本,請(qǐng)到:http://wiki.easyjf.com/pages/viewpage.action?pageId=7110664