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