JSTL patch
This is a patched version of the Jakarta Standard Tag Library
which implements the JSTL 1.1 specification. This patch makes the XML tags run 100 times faster. I wrote almost no code, I just reverted the XPathUtil class to a previous version and managed to compile the whole thing.
Originally the Standard Taglib used the Jaxen XPath processor. With version 1.1 the project switched to Xalan, decreasing performance by a factor of 100. At my company we chose to use JSTL and we’re really happy about it. But our sites must work now, so I put together this patched version. I hope to be able to use the official version very soon. In the meanwhile, if you’re using JSTL in a production environment give this version a try.
I submitted this patch to the Standard Taglib developers but it was refused because it implies a dependency on Jaxen. Here’s the original thread on the taglibs-dev at jakarta.apache.org mailing list.
To install over an existing webapp just drop in the standard-*.*.*-patched.jar
and remove standard.jar
.
You also need jaxen-*.*.jar
from the Jaxen project.
Requirements
Download
- standard-1.1.2-patched-jaxen-1.1.jar (works with Jaxen 1.1)
- The modified source file (org.apache.taglibs.standard.tag.common.xml.XPathUtil) (works with Jaxen 1.1)
- standard-1.1.2-patched.jar (works with Jaxen 1.0)
- standard-1.1.1-patched.jar (works with Jaxen 1.0)
- The modified source file (org.apache.taglibs.standard.tag.common.xml.XPathUtil) (works with Jaxen 1.0)
Great stuff Flavio,
I noticed a massive performance degradation too, after upgrading to JSTL 1.1, and I am very pleased to see that you have made your workaround available to other people. Your fix made my JSTL web pages usable again!
It also fixed the issues I was having to get JSTL 1.1 working with java 1.5. Until I installed your patch, I needed to include xalan.jar in my war files to get around many class loading errors, but now all works as before.
Many thanks!
Rob
Thank you Rob!
By the way on Java (1.)5 you needed xalan.jar because the JDK does not expose anymore its internal xalan to the application’s classloader.
Thanks Flavio, this has really helped me with a job I am doing at the moment. The performance without JAXEN is shocking. I can make dinner and eat it in the time it takes to render a page without JAXEN.
Many thanks as well.
Ralph
Hi, do you have any idea if this problem still exists or if it was fixed in later versions of jstl?
Hi Erik, I’m not following JSTL development these days. I know GlassFish has a brand new JSTL implementation, try it: http://jstl.java.net/