Now, back end I am thinking about session ejbs which reads database tables. The method for getting values from database tables will be implemented in a DAO.
Take a look at the Servlet filters. You can implement caching by using them.
I did mention load balancing of the web servers in my assumptions/design documents.
In the real world, I have worked with some pretty big J2EE architecture over the years and most recently a cluster of 3 big BEA application server machines and 4 web servers in front. The web servers are load balance by a hardware load balancer, in this case a Cisco Director. That is a pretty standard approach I have seen and used alot.