Webwork+XDoclet 1.2 beta+ANT+Resin == Rapid Prototyping City
This is somewhat sketchy on the details, but I wanted to get it out there while it was fresh in my mind.
How to iteratively prototype a webapp:-
Get Webwork and import it into your project.
Slap together an ANT script that compiles your stuff and WARs it up, puts the web.xml file from webwork in WEB-INF and includes webwork.jar in your WEB-INF/lib folder. Add an extra line to copy your WAR to your servlet container’s webapps directory.
Build at least one class that extends ActionSupport. Override execute() to return Action.SUCCESS.
Put a class-level javadoc comment that looks something like this in it:
/** * @webwork.action * name="myCoolAction" * input="myInput.jsp" * success="myCoolActionSuccess.jsp" /*
Write a simple jsp called myInput.jsp with an input form along the lines of:-
FORM METHOD="POST" ACTION="myCoolAction.action"
Write a quick success.jsp page with a ‘well done’ or similar message.
Get XDoclet 1.2 beta. Stick the jars in Ant’s classpath. Add a target that look like this:-
<target name="xdoclet" depends="init" <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="class.path" />
<webdoclet destdir="${build}/src" mergedir="parent-fake-to-debug" excludedtags="@version,@author,@todo" addedtags="@xdoclet-generated at ${TODAY}, XDoclet,@version ${version}" verbose="false" >
<fileset dir="${src.java}"> <include name="**/*Servlet.java"/> <include name="**/*Filter.java"/> <include name="**/*Tag.java"/> <include name="**/*Action.java"/> </fileset> <webWorkConfigProperties destDir="${webinf.classes}"/> </webdoclet> </target>
Include the target into your default build, just before the compilation step.
Run ANT. Wait for resin to reload your webapp.
Open /yourWebapp/myInput.jsp. Submit it. See the success.jsp page. Modify your Action class’s execute() method to actually do something, like check for the right name/value pairs. Make it return Action.INPUT to go round again, Action.SUCCESS to succeed and go to success.jsp, Action.ERROR to report an error etc.
Repeat.
More details when I have time.