锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
On Sep 7, Matt Raible uploaded a PDF to appfuse.dev.java.net contains the relevant pages from the wiki that help you develop with AppFuse 2.0.
And yesterday, Matt Raible uploaded a big package to appfuse.dev.java.net. It included all the dependencies of the appfuse2.0 RC1 needed.
ApplicationContext鎺ュ彛鐨勫疄鐜扮被鏈夊緢澶氾紝浣嗗父鐢ㄧ殑鏈?涓細
1. ClassPathXmlApplicationContext
2. FileSystemXmlApplicationContext
3. XmlWebApplicationContext
ApplicationContext鍜孊eanFactory鐨勫彟涓涓尯鍒湪浜庡singleton bean鐨勫姞杞戒笂銆侭ean Factory寤惰繜鍔犺澆鎵鏈夌殑bean鐩村埌getBean()鐨勮皟鐢紝鑰孉pplicationContext紼嶅井鏅鴻兘涓浜涳紝棰勫厛鍔犺澆鎵鏈夌殑singleton bean銆?/p>
3. 浣跨敤Maven涓嬭澆appfuse
鎴戜嬌鐢ㄧ殑鏄痵truts鎵浠ワ紝浣跨敤鐨勫懡浠ゆ槸錛?br>mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-modular-struts -DremoteRepositories=http://static.appfuse.org/repository -DarchetypeVersion=2.0-m5 -DgroupId=com.mycompany.app -DartifactId=appfuse
榪欓噷錛屾垜鎶婁笅杞界殑鐩綍鍚嶆敼涓轟簡appfuse錛屽湪appfuse.org鐨剄uick start涓槸浣跨敤myproject鐨勩?/p>
4. 榪愯鐨勮繃紼嬩腑錛屼細鍑洪敊錛屾垜鍦ㄤ袱鍙版満鍣ㄤ笂閮介亣鍒頒簡閿欒銆?br>鍏崇郴涓嶅ぇ銆傚彲浠ョ戶緇繘琛屻?/p>
5. 涓嬭澆婧愪唬鐮併?br>鎴戞槸鍦‥clipse涓嬌鐢⊿ubversion涓嬭澆鐨勶紝鍙互浣跨敤mvn appfuse:full-source錛屼絾鏄彧鑳戒笅杞藉埌web涓嬬殑浠g爜錛宻ervice, data絳夐儴鍒嗙殑浠g爜灝辨病鏈変簡銆?br>Svn鐨凴epository鐨勫湴鍧鏄細https://appfuse.dev.java.net/svn/appfuse
6. Java Source Code宸茬粡灝藉湪鎺屾彙浜嗭紝鍙槸榪樺垎甯冨湪涓嶅悓鐨勭洰褰曢噷銆?br>鍒嗗埆鏄湪錛歞ata錛宻ervice錛寃ebapp錛岄兘鍦╩ain\java鐩綍涓嬨?/p>
7. 寮濮嬭幏鍙杍sp錛岄厤緗枃浠剁瓑銆?br>棣栧厛cd ~maven\repo\org\hibernate\jtidy\r8-20060801
edit jtidy-r8-20060801.pom
鍘繪帀涓涓噸澶嶇殑 <licenses> 鏍囩.
8. 鍘繪帀mysql鐨剅oot鐢ㄦ埛鐨勫瘑鐮侊紝
update user set password=password('') where user='root'; flush privileges;
9. cd appfuse
mvn integration-test
鍦╝ppfuse-snapshot1.0鐩綍涓嬶紝鎶妀sp銆乮mage,js,css絳夊叏閮ㄥ鍒惰繃鏉?br>鍙﹀錛岃繕鏈夊緢澶氶厤緗枃浠訛紝璞pplicationContext-dao.xml絳夌瓑銆?br>榪樻湁涓涓紝灝辨槸library浜嗐傚叾涓湁涓涓娉ㄦ剰鐨勬槸ehcache闇瑕佷嬌鐢?.3.0, 濡傛灉浣跨敤1.2.X錛屼細鎶?br>javax.servlet.ServletException: Failure when attempting to set Content-Encoding: gzip
榪欎釜閿欒銆?/p>
10. 鎴戞槸浣跨敤Eclipse鐨凾omcat鎻掍歡鐨勶紝鍥犳錛屽緩绔嬩簡涓涓猅omcat project
鎶奐ava婧愭枃浠跺鍒跺埌web-inf\src涓嬶紝
org.appfuse.dao
org.appfuse.model
org.appfuse.service
org.appfuse.util
org.appfuse.webapp錛圵ebapp鐩綍涓嬶級
鍙﹀錛?br>common
decorators
images
scripts
styles
template
403.jsp
404.jsp
index.jsp.......
榪樻湁web-inf鐩綍涓嬬殑錛?br>鏁?0涓厤緗枃浠跺拰lib鐩綍涓嬫暟10涓猨ar鏂囦歡
11. 鍚姩Tomcat鎻掍歡錛屽湪嫻忚鍣ㄤ腑嫻忚錛歨ttp://localhost:8080/appfuse/index.jsp
鐢ㄦ埛:admin 瀵嗙爜錛歛dmin
OK.
涔嬫墍浠ワ紝榪欎箞楹葷儲鐨勬姌鑵撅紝涓昏鏄兂鍦╝ppfuse搴旂敤涓紝鎵撴柇鐐癸紝榪涜閫愭璺熻釜銆傚厖鍒嗕簡瑙h鐭ユ紨涔燼ppfuse鐨勭粏鑺傘?/p>
聽聽聽聽聽聽聽聽聽聽聽 <configParam name="basePackageName" value="org.appfuse"/>
聽聽聽聽聽聽聽聽聽聽聽 <!-- generate struts forms -->
聽聽聽聽聽聽聽聽聽聽聽 <actionform templateFile="${template.dir}/generic/struts_form.xdt">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <packageSubstitution packages="model" substituteWith="webapp.form"/>
聽聽聽聽聽聽聽聽聽聽聽 </actionform>
聽聽聽聽聽聽聽 </xdoclet>
2銆佸湪AppGen涓病鏈夎兘澶熺敓鎴恠truts-config.xml
鍦╣en鐨則arget涓坊鍔犵敓鎴怱truts-config.xml鐨勫瓙浠誨姟銆?br />聽聽聽聽聽聽聽 <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
聽聽聽聽聽聽聽聽聽聽聽 <classpath>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <path refid="xdoclet.classpath"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <path refid="web.libs.classpath"/>
聽聽聽聽聽聽聽聽聽聽聽 </classpath>
聽聽聽聽聽聽聽 </taskdef>
聽聽聽聽聽聽聽 <webdoclet destdir="build/gen/web/WEB-INF" force="true"
聽聽聽聽聽聽聽聽聽聽聽 mergedir="metadata/web" excludedtags="@version,@author" verbose="true">
聽聽聽聽聽聽聽聽聽聽聽 <fileset dir="${model.src.dir}"/>
聽聽聽聽聽聽聽聽聽聽聽 <strutsconfigxml validateXML="true" version="1.2"/>
聽聽聽聽聽聽聽聽聽聽聽 <strutsvalidationxml version="1.1.3"/>
聽聽聽聽聽聽聽 </webdoclet>
鍏朵腑闇瑕佹敞鎰忕殑鏄痺eb.libs.classpath錛屼竴寮濮嬫垜娌℃湁娣誨姞榪欎簺搴擄紝緇撴灉鏃犳硶姝g‘鐢熸垚閰嶇疆鏂囦歡銆?br />鍦ˋppfuse涓紝澶у鏁扮殑Action鏄戶鎵緽aseAction鐨勶紝鍙湁UploadAction鏄洿鎺ョ戶鎵縎truts鐨凙ction錛涘湪娌℃湁娣誨姞搴撴枃浠舵椂錛岀敓鎴愮殑struts-config.xml鍙寘鍚竴涓猆ploadAction鐨勬槧灝勩?br />娣誨姞瀹屾暣鐨勫簱鏂囦歡鍚庯紝鎵嶈兘鐢熸垚姝g‘鐨勯厤緗枃浠躲?br />
鏈鍚庢暣鐞嗕竴涓嬶紝浣跨敤AppGen鐢熸垚鐨勬枃浠訛細
1銆丄pplicationContext-hibernate.xml涓坊鍔爌ersonDao鐨勯厤緗紝ApplicationContext-service.xml涓坊鍔爌ersonManager鐨勯厤緗?br />2銆丳ersonDaoHibernate.java錛孭ersonManager.java錛孭ersonManagerImpl.java錛孭ersonAction.java錛孭ersonForm.java錛孭ersonAction.java
3銆丳ersonForm.jsp錛孭ersonList.jsp
4銆乻truts-config.xml瑕嗙洊
5銆乵enu-config-Person.xml鍚堝茍鍒癿enu-config.xml涓紝menu-Person.jsp娣誨姞鍒癱ommon\menu.jsp涓?br />6銆乻ample-data-Person.xml錛岀敤浜庢祴璇曠殑鏁版嵁
鐩墠鎴戠殑build.xml涓彧鍖呭惈榪欏嚑涓猼arget銆?/p>
鍙﹀錛孉ppGen鐨刡uild.xml涓紝鎴戣涓烘湁鐢ㄧ殑涔熶富瑕佹槸init鍜実en榪欎袱涓猼arget銆?br />鍏朵腑init鐢ㄤ簬浜や簰杈撳叆鍙傛暟錛岃実en鏄嬌鐢▁doclet鏍規嵁妯℃澘鐢熸垚Actions/Controllers, Action/Controller Tests, test data, i18n keys and JSPs銆?/p>
鐜板湪濡傛灉涓嶅湪applicationContext-service.xml涓坊鍔燽ean鐨勯厤緗悗錛孞Unit鎶ラ敊璇存壘涓嶅埌personManager銆傚彟澶栬繕闇瑕佹妸applicationContext-hibernate.xml鍜宎pplicationContext-resources.xml涔熸嫹璐濆埌WEB-INF/src/org/appfuse/service鐩綍涓嬶紝榪欐牱Context鎵嶈兘Load鎴愬姛銆?br />鐜板湪榪愯Test錛孏etPerson鍜孲avePerson閮芥祴璇曢氳繃錛岃孉ddAndRemovePerson鎶ヤ簡涓涓狽ullPointerExceptoin閿欒銆傚師鏉ョ己灝戜簡PersonManagerTest.properties榪欎釜鏂囦歡錛岃繖涓枃浠舵槸鐢ㄤ簬populate鍒濆鍖朠erson瀹炰緥鐨勩?/p>
鐜板湪闇瑕佷粩緇嗙爺絀朵竴涓嬭彍鍗曠殑鏄劇ず浜嗐傚彲浠ョ湅鍒板湪menuMenu.jsp鍜宭ogin.jsp涓兘娌℃湁鑿滃崟鐨勫畾涔夊拰鏄劇ず銆傚叾瀹炶彍鍗曠殑瀹氫箟鍜屾樉紺鴻繕鏄湪鍓嶉潰璇村埌鐨刣efault.jsp涓?br />default.jsp涓涓嬩竴孌典唬鐮侊細
聽聽聽聽聽聽聽聽聽聽聽 <c:set var="currentMenu" scope="request"><decorator:getProperty property="meta.menu"/></c:set>
聽聽聽聽聽聽聽聽聽聽聽 <c:if test="${currentMenu == 'AdminMenu'}">
聽聽聽聽聽聽聽聽聽聽聽 <div id="sub">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <menu:useMenuDisplayer name="Velocity" config="WEB-INF/classes/cssVerticalMenu.vm" permissions="rolesAdapter">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <menu:displayMenu name="AdminMenu"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </menu:useMenuDisplayer>
聽聽聽聽聽聽聽聽聽聽聽 </div>
聽聽聽聽聽聽聽聽聽聽聽 </c:if>
聽聽聽聽聽聽聽聽聽聽聽 <div id="nav">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <div class="wrapper">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <h2 class="accessibility">Navigation</h2>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <jsp:include page="/common/menu.jsp"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </div>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <hr />
聽聽聽聽聽聽聽聽聽聽聽 </div><!-- end nav -->
棣栧厛浠庨〉闈腑鍙栧嚭meta.menu鐨勫鹼紝榪欎釜鍊煎湪login.jsp涓槸錛?<meta name="menu" content="Login"/>
鍦╩ainMenu.jsp涓槸錛?lt;meta name="menu" content="MainMenu"/>
鎵浠ワ紝login.jsp涓?test="${currentMenu == 'AdminMenu'}" 閮戒笉閫氳繃銆傛瘡涓閮ㄥ垎鐨勫唴瀹瑰湪榪欎袱涓〉闈腑閮戒笉鏄劇ず銆?/p>
涓嬮潰鐨勪竴閮ㄥ垎鏄痗ommon/menu.jsp錛屼富瑕佹槸涓涓猰enu:useMenuDisplayer
鏄劇ず鐨勮彍鍗曠涓涓繘琛屼簡鍒ゆ柇錛?lt;c:if test="${empty pageContext.request.remoteUser}">
鏌ョ湅Jsp瀹瑰櫒涓淮鎶ょ殑璁よ瘉涓綋鍓嶇敤鎴鋒槸鍚︿負絀猴紝濡傛灉鎴愬姛鐧誨綍錛屽垯榪欎釜鍊煎嵆涓虹櫥褰曠敤鎴峰悕錛屽惁鍒欎負絀恒?br />涔熷氨鏄錛屽鏋滄病鏈夋垚鍔熺櫥褰曪紝鍒欎細鏄劇ず鐧誨綍鑿滃崟<li><a href="<c:url value="/login.jsp"/>" class="current"><fmt:message key="login.title"/></a></li>銆?br />
闄や簡鍒氭墠鐨勭涓涓櫥褰曢」浠ュ錛岃繕鏈?鏉¤彍鍗曡彍鍗曢」錛岃繖5涓彍鍗曢」浣跨敤鐨勬槸struts-menu鐨勬爣鍑嗙敤娉曪紝鑰屼笉鏄薄鍒氭墠閭f牱鐩存帴HTML鐨勮緭鍑恒?br />聽聽聽 <menu:displayMenu name="MainMenu"/>
聽聽聽 <menu:displayMenu name="UserMenu"/>
聽聽聽 <menu:displayMenu name="FileUpload"/>
聽聽聽 <menu:displayMenu name="AdminMenu"/>
聽聽聽 <menu:displayMenu name="Logout"/>
鏌ョ湅menu-config.xml錛屽彲浠ュ彂鐜幫紝鍙湁絎竴鐨勮彍鍗曢」MainMenu娌℃湁瀹氫箟瑙掕壊
鍥犳錛屽湪login.jsp欏甸潰涔熻兘鏄劇ず姝よ彍鍗曢」銆?br />鑰屽墿涓嬮渶瑕佽鑹茬殑鑿滃崟錛屽氨闇瑕佺櫥褰曞悗錛屾牴鎹鑹茬殑璁劇疆鏉ユ樉紺虹浉搴旂殑鑿滃崟浜嗐?br />
姣斿錛歮raible鐢ㄦ埛鏄痑dmin瑙掕壊錛屽彲浠ユ樉紺哄叏閮ㄨ彍鍗曘倀omcat鐢ㄦ埛鏄痷ser瑙掕壊錛屽氨鐪嬩笉鍒癆dminMenu浜嗐?/p>
聽
涓銆佽繍琛孉nt New
1. 涓嶇煡閬撲負浠涔堬紝姝ら」浠誨姟浼氬埌jre鐨刲ib鐩綍涓嬪鎵総ools.jar錛屾病鏈変粩緇嗗湴鏌ユ壘鍘熷洜錛岀畝鍗曞湴鎶妀dk\lib\tools.jar鎷瘋礉榪囨潵
2. 闇瑕佸畾涔塁ATALINA_HOME榪欎釜鐜鍙橀噺
OK, 瀹屾垚涓婅堪涓や釜姝ラ鍚庯紝Ant鍛戒護鎵ц鎴愬姛錛屽懡浠よ繃紼嬩腑鏈夋暟涓夐」鍙互閫夋嫨錛屾瘮濡傦細搴旂敤鍚嶇О錛屾暟鎹簱鍚嶇О錛孭ackage鍚嶇О錛岃繖浜涘叧緋婚兘涓嶅ぇ銆?br />鏈変竴涓夐」姣旇緝閲嶈涓浜涳紝鏄闂嬌鐢ㄤ綍縐峎eb妗嗘灦錛屾湁webwork, tapestry, spring, jsf絳夛紝鎴戜篃鏄嬌鐢ㄧ殑榛樿閫夐」錛歴truts.
浜屻佸惎鍔∕ySql鏁版嵁搴擄紝榪愯Ant setup-db
鍦ㄦ暟鎹簱涓敓鎴恗ydb鏁版嵁搴擄紝浠ュ強鏁版嵁琛?/p>
涓夈佸湪Eclipse涓緩绔婽omcat Project鍚嶅瓧涓嶢nt New涓緭鍏ョ殑搴旂敤涓鑷淬?/p>
鍥涖佸皢common, decorators, images, MATA-INF, scripts, styles榪欏嚑涓洰褰曚粠ant new鐢熸垚鐨勭洰褰曞鍒跺埌Eclipse欏圭洰鐨勭洰褰曚腑.
灝唚eb-inf\pages鐩綍涓嬬殑jsp鏂囦歡鎷瘋礉鍒癊clipse鐩稿悓鐩綍涓嬨?/p>
浜斻佽繍琛宎nt webdoclet, 鐢熸垚Form鐩綍涓嬬殑3涓狥orm鐨刯ava婧愭枃浠訛紝浠ュ強model鐩綍涓嬬殑2涓猦ibernate鐨剎ml鏄犲皠鏂囦歡
鍏佸皢org.appfuse.webapp錛宱rg.appfuse.sercies, org.appfuse.dao浠ュ強model鍜寀til鐩綍鎵鍖呭惈鐨勬墍鏈塉ava婧愭枃浠跺鍒跺埌Eclipse欏圭洰鎵鍦ㄧ殑鏂囦歡澶箇eb-inf\src涓?/p>
涓冦佸皢lib澶嶅埗鍒皐eb-inf\lib鐩綍涓?br />acegi-security-1.0.2.jar
activation.jar
antlr-2.7.6.jar
antlr.jar
asm.jar
aspectjweaver-1.5.2.jar
cglib-2.1.3.jar
clickstream-1.0.2.jar
commons-beanutils.jar
commons-codec-1.3.jar
commons-collections.jar
commons-dbcp.jar
commons-digester.jar
commons-fileupload.jar
commons-io.jar
commons-lang.jar
commons-logging-1.1.jar
commons-pool.jar
commons-validator.jar
displaytag-1.1.jar
dom4j-1.6.1.jar
dwr.jar
ehcache-1.2.3.jar
hibernate3.jar
itext-1.4.jar
jakarta-oro.jar
jstl.jar
jta.jar
log4j-1.2.11.jar
mail.jar
mysql-connector-java-5.0.3-bin.jar
oscache-2.3.2.jar
sitemesh-2.2.1.jar
spring.jar
standard.jar
struts-el.jar
struts-menu-2.4.2.jar
struts.jar
urlrewrite-3.0-beta.jar
velocity-1.4.jar
velocity-tools-view-1.1.jar
鍏佸惎鍔⊿ysdeo Tomcat, 鍦ㄦ祻瑙堝櫒涓緭鍏?a href="http://locallhost:8080/myapp">http://locallhost:8080/myapp, 鍑虹幇欏甸潰錛岃緭鍏raible/tomcat錛岀櫥褰曟垚鍔熴?/p>
涔濄佽繕鏈変竴涓棶棰樺氨鏄洰鍓嶆墍鏈夌殑欏甸潰閮芥槸涔辯爜錛屾槑澶╁啀瑙e喅浜嗭紝浠婂ぉ瑕佺潯瑙変簡銆?/p>
聽