There have been quite a few attempts by others at notifying the issue, so far without an acceptable answer. Here's yet another attempt.
With Tomcat 8 (as of 8.0.27), the following simple tag: <%@ attribute name="attr1" required="true" %> <%@ attribute name="attr2" required="false" %> ${attr1} ${attr2} will result when called in 12 calls to loadClass, for every request, with a dramatic performance impact: 3x java.lang.attr2 3x javax.servlet.attr2 3x javax.servlet.jsp.attr2 3x javax.servlet.http.attr2 The workaround is to scope the optional attribute reference, e.g. ${pageContext.attr2}, but this might not be acceptable depending on the number of JSP/tags to update. I believe the following points need to be addressed: - what is so special with optional attributes, should they really be considered undefined? - if everything is conform with the spec, a more aggressive cache should probably be implemented and used by ImportHandler Related discussions/bugs: - most of https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__all__&content=ImportHandler&no_redirect=1&order=Importance&product=Tomcat%208&query_format=specific - http://markmail.org/message/5uolmdqgy6oemru5