Don't confuse the
Struts error handler with the JSP error handler. They're not the same thing. The Struts Error handler is invoked by Struts if an uncaught exception is thrown in an Action or ActionForm class. The JSP error handler is invoked if an uncaught exception is thrown in a JSP. The one has nothing to do with the other. Since your JSP was invoked by the Struts error handler, and not the JSP error handler, the JSP exception variable is naturally going to be null.
A fact that's not well documented is that the global exception handler will pass information on the underlying exception that was caught as the first parameter to your message. You can therefore capture it and display it in your JSP just by including an <html:errors /> tag.
In your messages properties file, your message would look something like this:
The {0} parameter is then filled in by the Struts error handler.