Eigentlich wurde schon alles gesagt was die Vorgehensweise betrifft. Wenn Client und Server auf verschiedenen Rechnern laufen spricht man von einer verteilten Anwendung.
Ich würde mich nur zunächst fragen welche Technologien ich einsetzen möchte, denn es gibt mehrere Möglichkeiten eine verteilte Anwendung zu entwickeln. Um einige zu nennen:
1) Du schreibst den Server selbst mit oder ohne zuhilfenahme von Spring. Da liefert dir das von Oliver gepostete Beispiel echt gute Anregungen. Der Vorteil ist: Du brauchst nichtmal einen Webserver und Spring exportiert dir deine Services sehr schön als RMI,... -Service. Nachteil sind hier Firewalls, die meist brav die Ports blocken die zur Kommunikation notwendig sind. Wenn sich Client und Server im gleichen internen Netz befinden ist das nicht sonderlich tragisch (man kann ja so einiges freigeben) aber bei nem Aufruf über Internet kann das schon witziger werden. Vielleicht bin ich doof aber ich habe es noch nicht geschafft eine sichere Firewall so einzurichten dass eine wirklich entfernte Kommunikation über RMI möglich gewesen wäre.
2) Du nutzt EJBs und sprichst deine entfernten EJBs die irgendwo auf nem Application-Server laufen über ihre Remote-Interface an, diese Kommunizieren aber auch über RMI sodass rein vom Kommunikationsmechanismus gesehen kein erkennbarer Mehrwert zu 1) existiert.
3) Du nutzt Webservices zur Kommunikation. Vorteil ist hier dass diese mit http über Port 80 kommunizieren und daher auch durch jede Firewall kommen die Port 80 freigegeben hat. Nachteil: Du brauchst mindestens einen Webserver und es ist wohl nicht ganz so trivial wie 1 und 2 (finde ich zumindest)
In alle 3 Fällen musst du erst Interfaces und DTO (also Datentransferobjekte, sofern deine Anwendung nicht nur simple Basisdatentypen austauscht) entwickeln. Diese musst du in gleicher Form Client und Server zur Verfügung stellen. Der Dienst auf Serverseite implementiert dann das jeweilige Interface und wird vom Client darüber angesprochen.