Untuk struktur java web sedikit berbeda dengan java desktop, dengan memodifikasi project dari latihan terdahulu, buat struktur direktory project seperti di bawah ini :
+Latihan | | |--+web | | | index.jsp | | | +WEB-INF | | | web.xml | |--+src | | | +conf | | | +java | | | log4j.properties | | | +com | | | +dicky | | | Main.java | |--+lib | | | +source | | | | | log4j-1.2.16.jar | | | | | spiffy-all-0.05.jar | | | +test | | | junit-4.5.jar | |--+test | | | +com | | | +dicky | | | MainTest.java | |--+reports | |--build.xmlAda beberapa perubahan dalam susunan file-file dan directory dibanding dengan project jar di post terdahulu. Pertama kita edit dulu file web.xml menjadi seperti berikut :
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>Dapat dilihat di web.xml di atas, halaman awal yang akan ditampilkan pertama kali adalah file index.jsp, makan kita edit dulu file index.jsp sebagai berikut :
<%-- Document : index Created on : Aug 1, 2005, 12:10:12 AM Author : Dicky --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="com.dicky.Main" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Halaman awal</title> </head> <body> <% Main main = new Main(); %> <h1>Nilai pangkat 3 dari 5 adalah :<%=main.triple(5)%></h1> </body> </html>File index.jsp menampilkan fungsi yang ada dalam code Main.java, maka kita perlu mengubah file Main.java sebagai berikut :
package com.dicky; import org.apache.log4j.Logger; import spiffy.log4j.LoggerHelper; public class Main { private static final Logger logger = LoggerHelper.getLogger(); public int triple(int x) { logger.info("Menghitung nilai pangkat 3 dari " + x); return x*x*x; } }Setelah persiapan sudah selesai kita buat, konfigurasi ant, ubah file build.xml seperti berikut :
<project name="PengenalanAnt" default="war" basedir="."> <description> Latihan nyoba build .war dengan ant. </description> <!-- Mendeklarasikan nama-nama property yang akan dipakai --> <property name="app.name" value="pengenalanant" /> <property name="warfile.name" value="${app.name}.war" /> <property name="web.dir" value="${basedir}/web" /> <property name="src.dir" location="src" /> <property name="src.test.dir" location="test" /> <property name="webxml.file" value="${web.dir}/WEB-INF/web.xml" /> <property name="lib.dir" location="lib" /> <property name="lib.source.dir" value="${lib.dir}/source" /> <property name="lib.test.dir" value="${lib.dir}/test" /> <property name="lib.compile.dir" value="${lib.dir}/compile" /> <property name="build.dir" location="build" /> <property name="classes.dir" location="${build.dir}/classes" /> <property name="classes.test.dir" location="${build.dir}/test" /> <property name="target.dir" location="dist" /> <property name="report.dir" value="reports" /> <property name="test.report.dir" value="${report.dir}/tests" /> <property name="test.pattern" value="**/**Test.java" /> <!-- setting kompilasi --> <property name="compile.debug" value="true" /> <property name="compile.deprecation" value="true" /> <property name="compile.optimize" value="true" /> <!-- paths untuk dependensi source code java --> <path id="build.classpath"> <fileset dir="${lib.source.dir}"> <include name="**/*.jar" /> </fileset> </path> <!-- paths untuk dependensi source code test java --> <path id="build.test.classpath"> <fileset dir="${lib.test.dir}"> <include name="**/*.jar" /> </fileset> </path> <target name="clean" description="menghapus direktory hasil kompilasi" > <delete dir="${target.dir}"/> <delete dir="${classes.dir}"/> <delete dir="${classes.test.dir}"/> <delete dir="${build.dir}"/> <delete dir="${test.report.dir}"/> </target> <target name="-init"> <mkdir dir="${build.dir}" /> <mkdir dir="${classes.dir}" /> <mkdir dir="${classes.test.dir}" /> <mkdir dir="${target.dir}" /> <mkdir dir="${test.report.dir}"/> </target> <target name="build" depends="-init" description="Mengkompilasi source code " > <javac debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" srcdir="${src.dir}" destdir="${classes.dir}"> <classpath> <path refid="build.classpath" /> </classpath> </javac> <copy todir="${classes.dir}" filtering="off"> <flattenmapper /> <fileset dir="${src.dir}"> <include name="*.*"/> </fileset> </copy> </target> <target name="build-test" depends="build" description="Mengkompilasi source code test" > <javac debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" srcdir="${src.test.dir}" destdir="${classes.test.dir}"> <classpath> <path refid="build.test.classpath" /> <path refid="build.classpath" /> <pathelement path="${classes.dir}" /> </classpath> </javac> <copy todir="${classes.test.dir}" filtering="off"> <flattenmapper /> <fileset dir="${src.test.dir}"> <include name="*.*"/> </fileset> </copy> </target> <target name="clean-build" depends="clean, build" description="kompilasi dengan menghapus file" /> <target name="test" depends="build-test" description="jalankan semua test (unit)"> <junit dir="${basedir}" printsummary="on" fork="true" haltonfailure="false" errorProperty="test.failed" failureProperty="test.failed"> <sysproperty key="basedir" value="${basedir}" /> <formatter type="xml" /> <classpath> <path refid="build.test.classpath" /> <path refid="build.classpath" /> <pathelement path="${classes.dir}" /> <pathelement path="${classes.test.dir}" /> </classpath> <batchtest todir="${test.report.dir}"> <fileset dir="${src.test.dir}"> <include name="${test.pattern}" /> </fileset> </batchtest> </junit> </target> <target name="war" depends="build" description="Menggabungkan distribusi" > <delete file="${target.dir}/${warfile.name}" /> <war destfile="${target.dir}/${warfile.name}" webxml="${webxml.file}"> <fileset dir="${web.dir}"> <include name="**/*.jsp" /> </fileset> <mappedresources> <restrict> <path refid="build.classpath"/> <type type="file"/> </restrict> <chainedmapper> <flattenmapper/> <globmapper from="*.jar" to="WEB-INF/lib/*.jar"/> </chainedmapper> </mappedresources> <classes dir="${classes.dir}" /> <zipfileset dir="${web.dir}/WEB-INF" prefix="WEB-INF/classes"> <include name="*.properties" /> </zipfileset> </war> </target> </project>Sudah, silahkan dicoba! Untuk Unit Testing jalankan perintah dalam console :
ant testUntuk mengkompilasi menjadi file war jalankan perintah :
ant warUntuk melihat tampilan, file war ini perlu dideploy ke server agar bisa dilihat dari browser (Firefox atau Chrome browser), posting berikutnya kita akan belajar mendeploy file war ke server (bisa Tomcat, Glassfish, dsb). Jika masih kesulitan silahkan download source codenya.