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.