練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

Wicket入門: 一個Wicket+Spring+Hibernate的快速雛形Qwicket RSS feed
討論區首頁 » 網頁程式設計 Web Development
發表人 內容
andowson

七段學員
[Avatar]

註冊時間: 2007/1/2
文章: 711
來自: 台北
離線
最近想改用符合 MVC 的 Web Framework 來開發網頁應用程式,經過一番尋找後,發現前端用Wicket是個不錯的選擇,可以將HTML和Java完全分開,只要後端再整合Spring,然後透過Spring再去整合Hibernate,就可以存取資料庫。如此一來就變成了Wicket+Spring+Hibernate的架構,只是這樣子一來要學的東西一下子變多了,在看完了Wicket的Hello World範例後,心中的想法是趕快弄個Wicket+Spring+Hibernate三合一的範例來跑跑看,如果不是很複雜,才能繼續花時間下去。

經過一番搜尋後,找到了一個Qwicket的範例,下載並解壓縮後直接用ant去編譯跟執行,卻發現不太會動,原來是build.xml裡面的maven-ant-task的版本比較舊,要更新到2.0.9才行。經過一番修正後,把一些版本都更新到最新版,再去執行,發現也不太work,原來跟maven repository上面的目錄名稱有點關係,例如hibernate的目錄名稱到了3.3.1.GA之後要改成大寫的GA,而有些軟體雖然在自己的網站上已經推出了較新的版本,但在maven repository上則沒有收錄到,就得先到maven repository上面去查一下,再回來修改。
修改完成的build.xml內容大致如下:

<project name="Qwicket" default="war" xmlns:artifact="urn:maven-artifact-ant">

<property name="version" value="1.0"/>
<property name="dist.file" value="Qwicket-${version}"/>

<property file="build.properties"/>
<property file="build.default.properties"/>

<property name="maven.version" value="2.0.9"/>
<property name="maven.ant.file" location="${user.home}/.m2/maven-ant-tasks-${maven.version}.jar"/>
<available file="${maven.ant.file}" property="maven.ant.available"/>
<property name="jetty.version" value="6.1.14"/>
<property name="wicket.version" value="1.3.5"/>
<property name="build.dir" value="build"/>
<property name="src.conf.dir" value="src/conf"/>
<property name="src.java.dir" value="src/java"/>
<property name="src.test.dir" value="src/test"/>
<property name="src.web.dir" value="src/web"/>
<property name="logging.directory" value="/tmp"/>
<property name="report.build.dir" value="${build.dir}/reports"/>
<property name="war.build.dir" value="${build.dir}/war"/>
<property name="javadoc.dir" value="javadoc"/>

<target name="init" depends="deps">
<path id="project.class.path">
<pathelement location="${war.build.dir}/WEB-INF/classes"/>
<pathelement location="${build.dir}/test"/>
<path refid="base.class.path"/>
<path refid="build.class.path"/>
</path>
</target>

<target name="build" depends="init" description="Compiles the source files.">
<mkdir dir="${war.build.dir}/WEB-INF/classes"/>
<mkdir dir="${build.dir}/test"/>
<javac srcdir="${src.java.dir}" classpathref="project.class.path" destdir="${war.build.dir}/WEB-INF/classes" debug="true"/>
</target>

<target name="clean">
<delete dir="${build.dir}"/>
</target>

<target name="build-war-structure" depends="build">
<filter filtersfile="build.default.properties"/>
<filter filtersfile="build.properties"/>
<copy todir="${war.build.dir}">
<fileset dir="src/web"/>
</copy>
<copy todir="${war.build.dir}/WEB-INF/classes" filtering="true" overwrite="true">
<fileset dir="src/web/WEB-INF/classes"/>
</copy>
<copy todir="${war.build.dir}/WEB-INF/classes">
<fileset dir="src/java">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy todir="${war.build.dir}/WEB-INF/lib" flatten="true">
<fileset refid="runtime.fileset"/>
</copy>
<delete dir="${war.build.dir}/WEB-INF/lib">
<include name="servlet*"/>
</delete>
<copy todir="${war.build.dir}">
<fileset dir="src/web" includes="**/**"/>
</copy>
</target>

<target name="war" depends="build-war-structure">
<jar destfile="${build.dir}/${dist.file}.war" basedir="${war.build.dir}"/>
</target>

<target name="report-init">
<mkdir dir="${report.build.dir}"/>
<mkdir dir="${report.build.dir}/pmd"/>
</target>

<target name="pmd" depends="report-init">
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="project.class.path"/>
<pmd rulesetfiles="imports,unusedcode,optimizations,basic,design,strictexception,strings,codesize,braces">
<formatter type="html" toFile="${report.build.dir}/pmd/pmd.html"/>
<fileset dir="${src.java.dir}">
<include name="**/*.java"/>
</fileset>
</pmd>
</target>

<target name="javadoc" depends="init" description="Creates Javadoc.">
<delete dir="${javadoc.dir}"/>
<mkdir dir="${javadoc.dir}"/>
<javadoc sourcepath="${src.java.dir}" destdir="${javadoc.dir}"
noqualifier="all" author="true" private="true" version="true"
classpathref="project.class.path">
<packageset dir="${src.java.dir}">
<include name="**/**"/>
</packageset>
</javadoc>
</target>

<target name="reports" depends="build, report-init, pmd, javadoc"/>

<target name="jetty" depends="build-war-structure">
<java classname="qwicket.myapp.util.Start" classpathref="project.class.path" fork="yes" failonerror="yes"/>
</target>

<target name="maven-ant" unless="maven.ant.available">
<get src="http://apache.ntu.edu.tw/maven/binaries/maven-ant-tasks-${maven.version}.jar"
dest="${maven.ant.file}"/>
</target>

<target name="deps" depends="maven-ant">
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant">
<classpath>
<pathelement location="${maven.ant.file}"/>
</classpath>
</typedef>

<artifact:remoteRepository id="main" url="http://repo1.maven.org/maven2/"/>
<artifact:remoteRepository id="java.net.repository"
url="https://maven-repository.dev.java.net/nonav/repository/" layout="legacy"/>
<artifact:remoteRepository id="jboss.repository" url="http://repository.jboss.com/maven2/"/>

<artifact:dependencies pathId="build.class.path" filesetId="build.fileset">
<remoteRepository refid="jboss.repository"/>
<remoteRepository refid="java.net.repository"/>
<remoteRepository refid="main"/>

<dependency groupId="org.mortbay.jetty" artifactId="jetty" version="${jetty.version}"/>
<dependency groupId="org.mortbay.jetty" artifactId="jetty-util" version="${jetty.version}"/>
<dependency groupId="dom4j" artifactId="dom4j" version="1.6.1"/>
<dependency groupId="org.apache.ant" artifactId="ant" version="1.7.1"/>
<dependency groupId="pmd" artifactId="pmd" version="4.2.4"/>
</artifact:dependencies>

<artifact:dependencies pathId="base.class.path" filesetId="runtime.fileset">
<remoteRepository refid="jboss.repository"/>
<remoteRepository refid="java.net.repository"/>
<remoteRepository refid="main"/>

<dependency groupId="oswego-concurrent" artifactId="concurrent" version="1.3.4"/>
<dependency groupId="c3p0" artifactId="c3p0" version="0.9.1.2"/>
<dependency groupId="javax.mail" artifactId="mail" version="1.4.1"/>
<dependency groupId="org.springframework" artifactId="spring" version="2.5.6"/>
<dependency groupId="org.hibernate" artifactId="hibernate-annotations" version="3.4.0.GA"/>
<dependency groupId="org.hibernate" artifactId="hibernate-entitymanager" version="3.4.0.GA"/>
<dependency groupId="org.hibernate" artifactId="hibernate-core" version="3.3.1.GA"/>
<dependency groupId="org.apache.wicket" artifactId="wicket" version="${wicket.version}"/>
<dependency groupId="org.apache.wicket" artifactId="wicket-extensions" version="${wicket.version}"/>
<dependency groupId="org.apache.wicket" artifactId="wicket-spring-annot" version="${wicket.version}"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api" version="1.5.6"/>
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.5.6"/>

<dependency groupId="org.apache.commons" artifactId="commons-email" version="1.1"/>
<dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.7"/>
<dependency groupId="postgresql" artifactId="postgresql" version="8.3-603.jdbc3"/>
</artifact:dependencies>
</target>

<target name="update-project" depends="init">
<taskdef name="mvnProject" classname="qwicket.myapp.util.ProjectConfigTask" classpathref="project.class.path"/>

<mvnProject idea="../../test-project-files/java.iml">
<path refid="project.class.path"/>
</mvnProject>
</target>
</project>

如果執行完ant沒問題後,可以直接執行ant jetty來執行,然後開啟一個瀏覽器連到http://localhost:8080/來檢查看看能否加入一個會員。
另外,要注意的一點是,如果要連到PostgreSQL等其他資料庫要先開好帳號跟密碼及資料庫,例如都叫做qwicket。這部分可以修改web/WEB-INF/classes目錄下的application.properties或application-override.properties檔案。
另外,也可以執行ant reports來用PMD檢查看看原來的程式有沒有地方可以改善的。
附上我修改過的版本,如果您懶得自己慢慢修改,可以直接使用這個版本來改。
參考資料
http://www.antwerkz.com/qwicket/app/home
http://www.mindrot.org/projects/jBCrypt/
http://wicket.apache.org/examplemarkupinheritance.html
 檔案名稱 Qwicket.zip [Disk] 下載
 描述 Qwicket修正版
 檔案大小 183 Kbytes
 下載次數:  49 次


分享經驗 累積智慧
[WWW]
 
討論區首頁 » 網頁程式設計 Web Development
前往:   
行動版