That's a big question! There's no clear agreement on what exactly an app server does, but there are some basic things that most give you, and which help when developing large-scale client-server applications:
1. Transactions. Multiple database updates can be treated as one
unit, so that if they don't all succeed, they are all rolled back.
2. Database pooling. You can keep a set of open connections to your database and share them among processes that need access.
3. Security. Parts of your application can be restricted to particular users, based on roles.
4. Clustering. Your application can be distributed to multiple servers, to increase availability to a large number of clients.
So if you're writing a stand-alone application, you keep using regular Java. If you are writing a simple client-server application with a browser interface, you go for
Tomcat or other
servlet runner. However, if you are writing a complex, mission-critical, client-server app., then an app server is the way to go.