Good point.
I got mixed up because I found a very similar question
on the internet
And then I tested with ${ 1/0 } (gives an answer of "Infinity") as opposed to ${1 % 0}
I think the diagnosis remains the same though. Tomcat wraps the exception in a JasperException which results in the Throwable being matched instead of the ArithmeticException
However some more research sent me to
here
Which quoted the
Servlet Specification 9.9.2
If no error-page declaration containing an exception-type fits using the class-hierarchy match, and the exception thrown is a ServletException or subclass thereof, the container extracts the wrapped exception, as defined by the ServletException.getRootCause method. A second pass is made over the error page declarations, again attempting the match against the error page declarations, but using the wrapped exception instead.
In other words, it starts off with the JasperException, which matches against the Throwable declared in your web.xml and you get ErrorPage.jsp.
If you REMOVE the exception-type for throwable, then JasperException doesn't get matched. Because it is a JSP Exception, it unwraps, finds the root cause and voila! ArException.jsp here we come.