Well, we developed the client side as a Swing application (not an applet). Our middle tier consist of different layers, but to make things simple, lets just reference them as the EJB layer. Our EJBs run in Borland's AppServer. Now Back to the client side.
Our client uses the HMVC arch. All the connections and calls to the middle tier are done inside the models. The controllers just handle the events generated by the views and the creation of other child triads in the view. (A triad consist of a view, model, and its controller).
Our views implement the Obersver interface, and our models extend the Observable class, to synchronize the views with its models.
We moved the intensive data gathering to jsps. The app. sends a cmd to the OS, which brings the default browser up and calls the jsp. Our JSPs are handled by TomCat which comes with AppServer.
JavaWorld has an article on HMVC.
You can also look at scoope
Here is a link to scoope, which is an open source HMVC arch.
http://scope.sourceforge.net/