where to handle spring DataAccessException
The DataAccessException seems to be ignored after leaving dao area.
And that's a good thing! Let it fly down through the whole stack. You probably have transactions on service layer - the exception will transparently cause the outermost transaction to be rolled-back. Great!
Now it will find its way to the controller. If you catch it in the Struts controller, you can e.g. return different view. But most likely you don't want to handle exception in each and every Struts action. So let the exception fly even further down. At some point Struts will catch that exception and try to handle it. Struts has some sophisticated error handling mechanisms, you'll find plenty of information about them. Typically it will invoke some custom action or error screen depending on exception type.
Finally, if even Struts can't handle the exception, it will be rethrown to the container, causing HTTP 503 with exception details being returned.
As you can see you can control exceptions on a lot of levels, typically lower is better.