I can think of several options:
a) keep track of which software version each customer is running and when you have a new release, inform the customer of this along with instructions on how to obtain and apply the update. This is a manual process that can be largely automated.
b) if the site has Internet connectivity you can write an in-app module that periodically checks for updates and downloads the update to the server. An authorized person could then be informed via email and manually apply the update out-of-app (e.g. logging in to the server and running a script) or by in-app approval (e.g. the app sets a flag that a privileged script on the app server picks up and applies the update). This is a manual/semi-automatic process that the customer controls.
c) install your update program on the server and have it periodically phone home and check for updates. If an update is found, download it and at the right time, automatically update the server. In the case of a war file, you could run a script from cron that checks, downloads, halts the app server, replaces the war file, and starts the app server again. If the site's connectivity is poor or the update is big, consider keeping the retrieval and update separate so as to leave enough time for both. This is an automated solution so beware -- make sure the customer is okay with it and understands the implications.
d) if no Internet connectivity you really can't automate much of the discovery and retrieval. You can, however, make it easy for the person responsible to apply the update. For instance, by offering clear instructions on how to get the update onto portable media such as a memory stick, CD-ROM, or whatever. It greatly helps to know their environment so that you can tailor the instructions -- it depends on how skilled they are.
If your update is packaged as a complete application war file (as you mentioned) then it's a pretty simple process as you're simply updating the entire application, and not individual components. But both can be done, though patching can be more involved. If you have a standardized stack at each customer site then you can write something that's automated and robust. The devil's in the details so the more information you can provide on the application stack the better, particularly what operating system and application server you're running on, and what the connectivity with the world is (Internet and also users clients, e.g. is it easy to get a file onto the server from a client -- for instance, if clients have Internet access (e.g. email, web) they could save the update to an SMB share on the app server and a script would pick it up from there).
I hope this gives you some ideas.